I worked barcode scanner with zxing library in my app. I added flash on/off function to barcode scanner Activity. Unfortunately, when I flash turn ON, app gets crashed.
public void requestAutoFocus(Handler handler, int message) {
if (camera != null && previewing) {
autoFocusCallback.setHandler(handler, message);
// Log.d(TAG, "Requesting auto-focus callback");
camera.autoFocus(autoFocusCallback); // <<<<<<< dead here
}
}
********* Error Log ******************************************
java.lang.RuntimeException: autoFocus failed
at android.hardware.Camera.native_autoFocus(Native Method)
at android.hardware.Camera.autoFocus(Camera.java:1297)
at com.google.zxing.client.android.camera.CameraManager.requestAutoFocus(CameraManager.java:222)
at com.google.zxing.client.android.CaptureActivityHandler.handleMessage(CaptureActivityHandler.java:75)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6646)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
I prevent focus code if it is flash turn on, like below,
public void requestAutoFocus(Handler handler, int message) {
if (isFlashOn) return; // <<<<<<< prevent here
if (camera != null && previewing) {
autoFocusCallback.setHandler(handler, message);
//Log.d(TAG, "Requesting auto-focus callback");
camera.autoFocus(autoFocusCallback);
}
}
then, it is not crashed, but camera preview was freezing.
logcat logs like below.
I/Choreographer: Skipped 38 frames! The application may be doing too much work on its main thread.
E/Camera: Error 2
flash turn on/off code like below.
private void setFlash(boolean turnOn) {
Camera camera;
if (turnOn) {
camera = CameraManager.get().getCamera().open();
Camera.Parameters p = camera.getParameters();
p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(p);
camera.startPreview();
} else {
camera = CameraManager.get().getCamera().open();
Camera.Parameters p = camera.getParameters();
p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(p);
camera.stopPreview();
}
}
please help me....