以下代码用于从相机获取 jpeg 照片
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);
}
}
大多数情况下它工作正常。它在 startPreview
和 stopPreview
调用之间调用,所以我对此没有问题。但在随机时刻它可能会抛出异常。
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)
我不知道会发生什么是我没有提供的。
最佳答案
我在 Moto E3 和其他一些设备上遇到了同样的问题,在 camera.takePicture
之前调用 cancelAutoFocus
使崩溃消失。
关于java - 对焦后Android相机拍照失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44518457/