diff --git a/camerakit/src/main/api16/com/flurgle/camerakit/Camera1.java b/camerakit/src/main/api16/com/flurgle/camerakit/Camera1.java index 956804f3..b6457083 100644 --- a/camerakit/src/main/api16/com/flurgle/camerakit/Camera1.java +++ b/camerakit/src/main/api16/com/flurgle/camerakit/Camera1.java @@ -6,6 +6,7 @@ import android.hardware.Camera; import android.media.CamcorderProfile; import android.media.MediaRecorder; import android.os.Handler; +import android.util.Log; import android.support.annotation.Nullable; import android.view.MotionEvent; import android.view.SurfaceHolder; @@ -30,6 +31,8 @@ import static com.flurgle.camerakit.CameraKit.Constants.METHOD_STILL; @SuppressWarnings("deprecation") public class Camera1 extends CameraImpl { + private static final String TAG = Camera1.class.getSimpleName(); + private static final int FOCUS_AREA_SIZE_DEFAULT = 300; private static final int FOCUS_METERING_AREA_WEIGHT_DEFAULT = 1000; private static final int DELAY_MILLIS_BEFORE_RESETTING_FOCUS = 3000; @@ -44,6 +47,7 @@ public class Camera1 extends CameraImpl { private MediaRecorder mMediaRecorder; private File mVideoFile; private Camera.AutoFocusCallback mAutofocusCallback; + private boolean capturingImage = false; private int mDisplayOrientation; @@ -210,15 +214,28 @@ public class Camera1 extends CameraImpl { void captureImage() { switch (mMethod) { case METHOD_STANDARD: - mCamera.takePicture(null, null, null, new Camera.PictureCallback() { - @Override - public void onPictureTaken(byte[] data, Camera camera) { - mCameraListener.onPictureTaken(data); - if (mCamera != null) { - mCamera.startPreview(); - } - } - }); + // Null check required for camera here as is briefly null when View is detached + if (!capturingImage && mCamera != null) { + + // Set boolean to wait for image callback + capturingImage = true; + + mCamera.takePicture(null, null, null, + new Camera.PictureCallback() { + @Override + public void onPictureTaken(byte[] data, Camera camera) { + mCameraListener.onPictureTaken(data); + + // Reset capturing state to allow photos to be taken + capturingImage = false; + + camera.startPreview(); + } + }); + } + else { + Log.w(TAG, "Unable, waiting for picture to be taken"); + } break; case METHOD_STILL: diff --git a/camerakit/src/main/java/com/flurgle/camerakit/CameraView.java b/camerakit/src/main/java/com/flurgle/camerakit/CameraView.java index 71cfc74b..5930e2e3 100644 --- a/camerakit/src/main/java/com/flurgle/camerakit/CameraView.java +++ b/camerakit/src/main/java/com/flurgle/camerakit/CameraView.java @@ -183,9 +183,10 @@ public class CameraView extends FrameLayout implements LifecycleObserver { super.onAttachedToWindow(); if (!isInEditMode()) { mDisplayOrientationDetector.enable( - ViewCompat.isAttachedToWindow(this) - ? DisplayManagerCompat.getInstance(getContext()).getDisplay(Display.DEFAULT_DISPLAY) - : null + ViewCompat.isAttachedToWindow(this) + ? DisplayManagerCompat.getInstance(getContext()) + .getDisplay(Display.DEFAULT_DISPLAY) + : null ); } }