App crushes after starting flash at the second time
Im trying to make the flashlight work but on the second I power it, the
app crushes because I've released the Camera.
This is my code:
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if
(getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)){
if (!power){
processOnClick();
light.setImageResource(R.drawable.on);
button.setImageResource(R.drawable.clicked);
power=true;
//ToastLoadShout(getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)+"");
}
else{
processOffClick();
light.setImageResource(R.drawable.off);
button.setImageResource(R.drawable.unclicked);
power=false;
}
}
else
{
msg.setVisibility(View.VISIBLE);
}
}
});
ok = (Button) findViewById(R.id.button1);
ok.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
msg.setVisibility(View.INVISIBLE);
}
});
}
private void processOnClick() {
if (manuName.contains("motorola")) {
DroidLED led;
try {
led = new DroidLED();
led.enable(true);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
if (mCamera == null) {
try {
mCamera = Camera.open();
} catch (Exception e) {
e.printStackTrace();
}
}
if (mCamera != null) {
final Parameters params = mCamera.getParameters();
List<String> flashModes =
params.getSupportedFlashModes();
if (flashModes == null) {
return;
} else {
if (count == 0) {
params.setFlashMode(Parameters.FLASH_MODE_OFF);
mCamera.setParameters(params);
mCamera.startPreview();
}
String flashMode = params.getFlashMode();
if (!Parameters.FLASH_MODE_TORCH.equals(flashMode)) {
if
(flashModes.contains(Parameters.FLASH_MODE_TORCH))
{
params.setFlashMode(Parameters.FLASH_MODE_TORCH);
mCamera.setParameters(params);
} else {
// Toast.makeText(this,
// "Flash mode (torch) not
supported",Toast.LENGTH_LONG).show();
params.setFlashMode(Parameters.FLASH_MODE_ON);
mCamera.setParameters(params);
try {
mCamera.autoFocus(new
AutoFocusCallback() {
public void onAutoFocus(boolean
success, Camera camera) {
count = 1;
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}
if (mCamera == null) {
return;
}
}
private void processOffClick() {
if (manuName.contains("motorola")) {
DroidLED led;
try {
led = new DroidLED();
led.enable(false);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
if (mCamera != null) {
mCamera.stopPreview();
mCamera.release();
}
}
}
The Logcat:
08-31 14:30:04.113: W/dalvikvm(18622): threadid=1: thread exiting with
uncaught exception (group=0x412552a0)
08-31 14:30:04.123: E/AndroidRuntime(18622): FATAL EXCEPTION: main
08-31 14:30:04.123: E/AndroidRuntime(18622): java.lang.RuntimeException:
Method called after release()
08-31 14:30:04.123: E/AndroidRuntime(18622): at
android.hardware.Camera.native_getParameters(Native Method)
08-31 14:30:04.123: E/AndroidRuntime(18622): at
android.hardware.Camera.getParameters(Camera.java:1464)
08-31 14:30:04.123: E/AndroidRuntime(18622): at
com.example.wolfeyetools.MainActivity.processOnClick(MainActivity.java:127)
08-31 14:30:04.123: E/AndroidRuntime(18622): at
com.example.wolfeyetools.MainActivity.access$0(MainActivity.java:105)
08-31 14:30:04.123: E/AndroidRuntime(18622): at
com.example.wolfeyetools.MainActivity$1.onClick(MainActivity.java:60)
08-31 14:30:04.123: E/AndroidRuntime(18622): at
android.view.View.performClick(View.java:4162)
08-31 14:30:04.123: E/AndroidRuntime(18622): at
android.view.View$PerformClick.run(View.java:17082)
08-31 14:30:04.123: E/AndroidRuntime(18622): at
android.os.Handler.handleCallback(Handler.java:615)
08-31 14:30:04.123: E/AndroidRuntime(18622): at
android.os.Handler.dispatchMessage(Handler.java:92)
08-31 14:30:04.123: E/AndroidRuntime(18622): at
android.os.Looper.loop(Looper.java:137)
08-31 14:30:04.123: E/AndroidRuntime(18622): at
android.app.ActivityThread.main(ActivityThread.java:4856)
08-31 14:30:04.123: E/AndroidRuntime(18622): at
java.lang.reflect.Method.invokeNative(Native Method)
08-31 14:30:04.123: E/AndroidRuntime(18622): at
java.lang.reflect.Method.invoke(Method.java:511)
08-31 14:30:04.123: E/AndroidRuntime(18622): at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
08-31 14:30:04.123: E/AndroidRuntime(18622): at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
08-31 14:30:04.123: E/AndroidRuntime(18622): at
dalvik.system.NativeStart.main(Native Method)
My question is how can I do that without getting the app crushed. Or
without releasing the camera
No comments:
Post a Comment