google / cameraview

[DEPRECATED] Easily integrate Camera features into your Android app
Apache License 2.0
4.74k stars 1.03k forks source link

Crash when calling CameraView.stop in onPictureTakenCallback #187

Open radimjanda754 opened 7 years ago

radimjanda754 commented 7 years ago

Im trying to fix this issue simillar like this: https://github.com/google/cameraview/issues/29 , which is probably caused by finishing activity too early after picture was taken. My idea was to properly close CameraView after picture was taken before finishing activity. But anyway Im trying to close camera in onPictureTakenCallback i get this error:

Fatal Exception: java.lang.RuntimeException: Camera is being used after Camera.release() was called
       at android.hardware.Camera.native_cancelAutoFocus(Camera.java)
       at android.hardware.Camera.cancelAutoFocus(Camera.java:1383)
       at com.google.android.cameraview.Camera1$3.onPictureTaken(Camera1.java:246)
       at android.hardware.Camera$EventHandler.handleMessage(Camera.java:1170)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:135)
       at android.app.ActivityThread.main(ActivityThread.java:5569)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:931)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:726)

Here is code:

mCamera.addCallback(new CameraView.Callback() {
            @Override
            public void onPictureTaken(CameraView cameraView, byte[] data) {
                super.onPictureTaken(cameraView, data);
                mCamera.stop(); // causes error
            }
        });

mBtnCapture.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mCamera.takePicture();
            }
        });

@Override
protected void onPause() {
        mCamera.stop();
        super.onPause();
    }

@Override
protected void onResume() {
        super.onResume();
        mCamera.start();
    }
smellouk commented 6 years ago

Perhaps you can use this fix for it : https://github.com/google/cameraview/pull/158