2013-06-29 4 views
0

Я разрабатываю приложение, которое включает и выключает вспышку, и я хочу добавить автоматическое переключение в зависимости от освещенности, обнаруженной датчиком света, но я не могу запустить свое приложение. Есть много исключений, и я не знаю почему.Автоматическая переключающая горелка зависит от освещенности

Существует мой Java-код:

public class MainActivity extends Activity implements SensorEventListener, OnItemSelectedListener 
{ 

private boolean isLighOn = false; 

private Camera camera; 
private SensorManager mSensorManager; 
private Sensor mLight; 
private boolean isSwitchingSet =false; 
private Parameters p; 
private float bound = 30; 
private Spinner spinner; 
private String[] illuminance = {"On when can't see nothing", "On when dark", "On when middle dark", "Always On"}; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mSensorManager = (SensorManager)this.getSystemService(Context.SENSOR_SERVICE); 
    mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); 
    spinner = (Spinner) findViewById(R.id.spinner); 


    final ImageButton ib = (ImageButton)findViewById(R.id.imageButton); 
    final Button button= (Button)findViewById(R.id.button); 
    this.getWindow().getDecorView().setBackgroundColor(Color.BLACK); 

    button.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) 
     { 
      if(mLight == null) 
      { 
       AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
       builder.setMessage("We're sorry, but on Your device accelerometer isn't available") 
       .setCancelable(false) 
       .setPositiveButton("OK", new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) 
        { 
         dialog.cancel(); 
        } 
       }); 

       AlertDialog dialog = builder.create(); 
       dialog.show(); 
      } 
      if(isSwitchingSet) 
       { 
       isSwitchingSet = false; 
       Toast.makeText(MainActivity.this, "Switching off", Toast.LENGTH_SHORT).show(); 
       mSensorManager.unregisterListener(MainActivity.this); 
       } 
      else 
       { 
       isSwitchingSet = true; 
       mSensorManager.registerListener(MainActivity.this, mLight, SensorManager.SENSOR_DELAY_FASTEST); 
       Toast.makeText(MainActivity.this, "Switching on", Toast.LENGTH_SHORT).show(); 
       } 
     } 
    }); 

    ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item, illuminance); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(adapter); 
    spinner.setOnItemSelectedListener(this); 

    camera = Camera.open(); 
    p = camera.getParameters(); 
    ib.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) 
     { 
      if (isLighOn) 
      { 

       p.setFlashMode(Parameters.FLASH_MODE_OFF); 
       camera.setParameters(p); 
       camera.stopPreview(); 
       isLighOn = false; 
       ib.setImageResource(R.drawable.button_power_off); 

      } else 
      { 

       p.setFlashMode(Parameters.FLASH_MODE_TORCH); 

       camera.setParameters(p); 
       camera.startPreview(); 
       isLighOn = true; 
       ib.setImageResource(R.drawable.button_power_on_small); 

      } 
     } 
    }); 

} 

@Override 
protected void onStop() { 
    super.onStop(); 

    if (camera != null) { 
     camera.release(); 
    } 
    mSensorManager.unregisterListener(this); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public void onAccuracyChanged(Sensor arg0, int arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onSensorChanged(SensorEvent event) 
{ 
    if(event.sensor.getType() == Sensor.TYPE_LIGHT) 
    { 

       p.setFlashMode(Parameters.FLASH_MODE_TORCH); 

       camera.setParameters(p); 
       camera.startPreview(); 
       isLighOn = true;    
    } 

} 

@Override 
public void onItemSelected(AdapterView<?> arg0, View arg1, int position, 
     long arg3) 
{ 
    switch(position) 
    { 
    case 0: 
     bound =30; 
     break; 
    case 1: 
     bound =80; 
     break; 
    case 2: 
     bound =170; 
     break; 
    case 3: 
     bound =10000; 
     break; 
    } 
} 

@Override 
public void onNothingSelected(AdapterView<?> arg0) { 
    // TODO Auto-generated method stub 

} 

}

И я объявляю эти permisions в Manifest.XML:

Это список моих исключений:

06-29 12:02:31.106: E/AndroidRuntime(2483): FATAL EXCEPTION: main 
06-29 12:02:31.106: E/AndroidRuntime(2483): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.adrspo95.torch/com.adrspo95.torch.MainActivity}: java.lang.NullPointerException 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at android.os.Handler.dispatchMessage(Handler.java:99) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at android.os.Looper.loop(Looper.java:137) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at java.lang.reflect.Method.invoke(Method.java:511) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at dalvik.system.NativeStart.main(Native Method) 
06-29 12:02:31.106: E/AndroidRuntime(2483): Caused by: java.lang.NullPointerException 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at com.adrspo95.torch.MainActivity.onCreate(MainActivity.java:94) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at android.app.Activity.performCreate(Activity.java:5104) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  ... 11 more 
06-29 12:02:31.096: D/AndroidRuntime(2483): Shutting down VM 
06-29 12:02:31.096: W/dalvikvm(2483): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 
06-29 12:02:31.106: E/AndroidRuntime(2483): FATAL EXCEPTION: main 
06-29 12:02:31.106: E/AndroidRuntime(2483): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.adrspo95.torch/com.adrspo95.torch.MainActivity}: java.lang.NullPointerException 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at android.os.Handler.dispatchMessage(Handler.java:99) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at android.os.Looper.loop(Looper.java:137) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at java.lang.reflect.Method.invoke(Method.java:511) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at dalvik.system.NativeStart.main(Native Method) 
06-29 12:02:31.106: E/AndroidRuntime(2483): Caused by: java.lang.NullPointerException 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at com.adrspo95.torch.MainActivity.onCreate(MainActivity.java:94) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at android.app.Activity.performCreate(Activity.java:5104) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
06-29 12:02:31.106: E/AndroidRuntime(2483):  ... 11 more 

ответ

0

Существует исключение Null Pointer в строке 94 в onCreate() - метод вашей активности. Я предполагаю, что "camera = Camera.open();" или следующая причина является причиной этого.

+0

Как вы сейчас находитесь в строке 94 и почему я не могу инициализировать объект камеры в этом случае? – user2511941

+0

Журнал ошибок печатает: «Caused by: java.lang.NullPointerException at com.adrspo95.torch.MainActivity.onCreate (MainActivity.java:94)». Я точно не знаю, почему вы не можете его инициализировать, но, возможно, эта ссылка может вам помочь: http://developer.android.com/reference/android/hardware/Camera.html#open(int) –