add try catch to catch exceptions when takePicture fails, to give the user a better experience than an app crash

pull/1024/head
Michael Specht 5 years ago
parent 40ace54c19
commit 25bfa6126e
  1. 12
      cameraview/src/main/java/com/otaliastudios/cameraview/picture/Full1PictureRecorder.java
  2. 11
      cameraview/src/main/java/com/otaliastudios/cameraview/picture/Full2PictureRecorder.java

@ -1,10 +1,12 @@
package com.otaliastudios.cameraview.picture; package com.otaliastudios.cameraview.picture;
import android.hardware.Camera; import android.hardware.Camera;
import android.util.Log;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.exifinterface.media.ExifInterface; import androidx.exifinterface.media.ExifInterface;
import com.otaliastudios.cameraview.CameraException;
import com.otaliastudios.cameraview.PictureResult; import com.otaliastudios.cameraview.PictureResult;
import com.otaliastudios.cameraview.engine.Camera1Engine; import com.otaliastudios.cameraview.engine.Camera1Engine;
import com.otaliastudios.cameraview.engine.offset.Reference; import com.otaliastudios.cameraview.engine.offset.Reference;
@ -44,6 +46,7 @@ public class Full1PictureRecorder extends FullPictureRecorder {
// or takePicture can hang and leave the camera in a bad state. // or takePicture can hang and leave the camera in a bad state.
mCamera.setPreviewCallbackWithBuffer(null); mCamera.setPreviewCallbackWithBuffer(null);
mEngine.getFrameManager().release(); mEngine.getFrameManager().release();
try {
mCamera.takePicture( mCamera.takePicture(
new Camera.ShutterCallback() { new Camera.ShutterCallback() {
@Override @Override
@ -95,6 +98,15 @@ public class Full1PictureRecorder extends FullPictureRecorder {
} }
); );
LOG.i("take() returned."); LOG.i("take() returned.");
} catch (Exception e) {
String msg = "Error";
if (e.getMessage() != null) {
msg = e.getMessage();
}
Log.e("onTakePicture:", msg);
mError = e;
dispatchResult();
}
} }
@Override @Override

@ -8,6 +8,7 @@ import android.hardware.camera2.TotalCaptureResult;
import android.media.Image; import android.media.Image;
import android.media.ImageReader; import android.media.ImageReader;
import android.os.Build; import android.os.Build;
import android.util.Log;
import com.otaliastudios.cameraview.PictureResult; import com.otaliastudios.cameraview.PictureResult;
import com.otaliastudios.cameraview.controls.PictureFormat; import com.otaliastudios.cameraview.controls.PictureFormat;
@ -87,6 +88,7 @@ public class Full2PictureRecorder extends FullPictureRecorder
@NonNull CaptureRequest request, @NonNull CaptureRequest request,
@NonNull TotalCaptureResult result) { @NonNull TotalCaptureResult result) {
super.onCaptureCompleted(holder, request, result); super.onCaptureCompleted(holder, request, result);
try {
if (mResult.format == PictureFormat.DNG) { if (mResult.format == PictureFormat.DNG) {
mDngCreator = new DngCreator(holder.getCharacteristics(this), result); mDngCreator = new DngCreator(holder.getCharacteristics(this), result);
mDngCreator.setOrientation(ExifHelper.getExifOrientation(mResult.rotation)); mDngCreator.setOrientation(ExifHelper.getExifOrientation(mResult.rotation));
@ -94,6 +96,15 @@ public class Full2PictureRecorder extends FullPictureRecorder
mDngCreator.setLocation(mResult.location); mDngCreator.setLocation(mResult.location);
} }
} }
} catch (Exception e) {
String msg = "Error";
if (e.getMessage() != null) {
msg = e.getMessage();
}
Log.e("onCaptureCompleted:", msg);
mError = e;
dispatchResult();
}
} }
}; };
} }

Loading…
Cancel
Save