Saturday, 31 August 2013

App crushes after starting flash at the second time

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