焦点后Android相机takePicture失败

时间:2017-06-13 10:09:30

标签: java android camera android-camera autofocus

以下代码用于从相机获取jpeg-photo

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);
    }
}

大多数情况下都可以。它在startPreviewstopPreview来电之间进行通话,因此我没有遇到任何问题。但是在随机的时刻,它可以抛出异常。

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)

我不知道我没有提供什么。

1 个答案:

答案 0 :(得分:0)

我在Moto E3和其他一些设备上遇到了同样的问题,并且在cancelAutoFocus之前调用camera.takePicture使得崩溃消失了。