java - 对焦后Android相机拍照失败

标签 java android camera android-camera autofocus

以下代码用于从相机获取 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);
    }
}

大多数情况下它工作正常。它在 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)

我不知道会发生什么是我没有提供的。

最佳答案

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

关于java - 对焦后Android相机拍照失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44518457/

相关文章:

java - 映射以在 Dozer 中设置映射解决方法

java - Struts2 嵌套迭代器

java - 如何在 android studio 上创建风格化的 Google map 应用程序和自定义平铺层以显示将实时更新的附加信息?

android - 用相机拍照后无法恢复 Activity

camera - 如何使用网络摄像机集成人脸和物体识别?

java - if-else 和 if return 有什么区别,哪个更好?

Java:类似于 popen() 的函数?

android - dalvik VM VFY代码的含义

android - 如何以编程方式在 AsyncTask.onPreExecute 中添加 ProgressBar?

ios - iPhone : Toggling front/back AVCaptureDeviceInput camera when processing individual frames via setSampleBufferDelegate