Le code suivant est utilisé pour obtenir une photo jpeg de la caméra
public void getPhoto(final PictureCallback callback, final Runnable focusFailCallback) {
if (!Camera.Parameters.FOCUS_MODE_FIXED.equals(mCamera.getParameters().getFocusMode()) &&
!Camera.Parameters.FOCUS_MODE_INFINITY.equals(mCamera.getParameters().getFocusMode())) {
mCamera.autoFocus(new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
if (success) {
camera.takePicture(null, null, null, callback);
} else {
camera.cancelAutoFocus();
focusFailCallback.run();
}
}
});
} else {
mCamera.takePicture(null, null, null, callback);
}
}
La plupart du temps cela fonctionne bien. Il est appelé entre les appels de startPreview
et stopPreview
, donc je n'ai pas de problèmes à ce sujet. Mais à des moments aléatoires, il peut générer une exception.
java.lang.RuntimeException: takePicture failed
android.hardware.Camera.native_takePicture(Native Method)
android.hardware.Camera.takePicture(Camera.java:1828)
org.opencv.android.JavaCameraView$2.onAutoFocus(JavaCameraView.java:463)
android.hardware.Camera$EventHandler.handleMessage(Camera.java:1273)
android.os.Handler.dispatchMessage(Handler.java:111)
android.os.Looper.loop(Looper.java:194)
android.app.ActivityThread.main(ActivityThread.java:5534)
java.lang.reflect.Method.invoke(Native Method)
java.lang.reflect.Method.invoke(Method.java:372)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:955)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:750)
Je n'ai aucune idée de ce qui pourrait se passer que je n'ai pas pris en compte.