Android :java.lang.RuntimeException: takePicture failed

错误堆栈:

    --------- beginning of crash
2020-09-14 13:43:51.723 10343-10343/com.xiaomi.micolauncher E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.xiaomi.micolauncher, PID: 10343
    java.lang.RuntimeException: takePicture failed
        at android.hardware.Camera.native_takePicture(Native Method)
        at android.hardware.Camera.takePicture(Camera.java:1573)
        at android.hardware.Camera.takePicture(Camera.java:1515)
        at com.xiaomi.refrigerator.scan.ScanActivity.onClick(ScanActivity.java:286)
        at android.view.View.performClick(View.java:6610)
        at android.view.View.performClickInternal(View.java:6583)
        at android.view.View.access$3100(View.java:780)
        at android.view.View$PerformClick.run(View.java:26076)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:209)
        at android.app.ActivityThread.main(ActivityThread.java:6702)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)

问题原因:

因为调用takepic 之后,相机默认会关闭preview,你需要调用startPreview,然后才能调用takePic.

我这里是快速双击拍照Button 导致调用两次takepic 导致崩溃。

增加了一个变量,表示当前是不是调用了takePic。

    private boolean mHasTakePicture = false;
                getCamera().takePicture(null, null, new Camera.PictureCallback() {
     
                    @Override
                    public void onPictureTaken(byte[] data, Camera camera) {
     
                        
                        mHasTakePicture = false;
                    }
                });

然后在callback 里面 重置mHasTakePicture

你可能感兴趣的:(Android)