55import android .hardware .Camera ;
66import android .media .CamcorderProfile ;
77import android .media .MediaRecorder ;
8- import android .os .Build ;
98import android .os .Handler ;
109import android .support .annotation .Nullable ;
1110import android .util .Log ;
@@ -235,7 +234,11 @@ public void onPictureTaken(byte[] data, Camera camera) {
235234 // Reset capturing state to allow photos to be taken
236235 capturingImage = false ;
237236
238- camera .startPreview ();
237+ // Wrapping in a try catch to try and avoid crashes.
238+ // https://fabric.io/goosechase/android/apps/com.goosechaseadventures.goosechase/issues/59aed6cfbe077a4dcc2822fc
239+ try {
240+ camera .startPreview ();
241+ } catch (Exception e ){}
239242 }
240243 });
241244 }
@@ -270,10 +273,26 @@ void startVideo() {
270273
271274 @ Override
272275 void endVideo () {
273- mMediaRecorder .stop ();
274- mMediaRecorder .release ();
275- mMediaRecorder = null ;
276- mCameraListener .onVideoTaken (mVideoFile );
276+ // Try to fix this bug:
277+ // https://fabric.io/goosechase/android/apps/com.goosechaseadventures.goosechase/issues/59aee2b5be077a4dcc28a5bd
278+ try {
279+ mMediaRecorder .stop ();
280+ mMediaRecorder .release ();
281+ mMediaRecorder = null ;
282+ mCameraListener .onVideoTaken (mVideoFile );
283+ } catch (Exception e ) {
284+ if (mMediaRecorder != null ){
285+ mMediaRecorder .release ();
286+ }
287+
288+ mMediaRecorder = null ;
289+ if (mVideoFile != null ){
290+ mVideoFile .delete ();
291+ mVideoFile = null ;
292+ }
293+
294+ mCameraListener .onVideoFailed (e );
295+ }
277296 }
278297
279298 // Code from SandriosCamera library
@@ -331,7 +350,7 @@ List<Size> sizesFromList(List<Camera.Size> sizes) {
331350 // https://github.com/sandrios/sandriosCamera/blob/master/sandriosCamera/src/main/java/com/sandrios/sandriosCamera/internal/manager/impl/Camera1Manager.java#L212
332351 void initResolutions () {
333352 List <Size > previewSizes = sizesFromList (mCameraParameters .getSupportedPreviewSizes ());
334- List <Size > videoSizes = ( Build . VERSION . SDK_INT > 10 ) ? sizesFromList (mCameraParameters .getSupportedVideoSizes ()) : previewSizes ;
353+ List <Size > videoSizes = sizesFromList (mCameraParameters .getSupportedVideoSizes ());
335354
336355 CamcorderProfile camcorderProfile = getCamcorderProfile (mVideoQuality );
337356
@@ -440,6 +459,13 @@ private int calculateCaptureRotation() {
440459 }
441460
442461 private void adjustCameraParameters () {
462+ // Try and fix the following bug:
463+ // https://fabric.io/goosechase/android/apps/com.goosechaseadventures.goosechase/issues/59aed6dabe077a4dcc282396
464+ if (mCameraParameters == null ){
465+ // mCamera should also be valid here since you can only call this method after mCamera has been set or checked.
466+ mCameraParameters = mCamera .getParameters ();
467+ }
468+
443469 initResolutions ();
444470
445471 boolean invertPreviewSizes = (mCameraInfo .orientation + mDisplayOrientation ) % 180 == 0 ;
@@ -459,11 +485,10 @@ private void adjustCameraParameters() {
459485 );
460486 int rotation = calculateCaptureRotation ();
461487 mCameraParameters .setRotation (rotation );
488+ mCamera .setParameters (mCameraParameters );
462489
463490 setFocus (mFocus );
464491 setFlash (mFlash );
465-
466- mCamera .setParameters (mCameraParameters );
467492 }
468493
469494 private void collectCameraProperties () {
@@ -667,12 +692,16 @@ private void resetFocus(final boolean success, final Camera camera) {
667692 public void run () {
668693 if (camera != null ) {
669694 camera .cancelAutoFocus ();
670- Camera .Parameters params = camera .getParameters ();
671- if (params .getFocusMode () != Camera .Parameters .FOCUS_MODE_CONTINUOUS_PICTURE ) {
672- params .setFocusMode (Camera .Parameters .FOCUS_MODE_CONTINUOUS_PICTURE );
673- params .setFocusAreas (null );
674- params .setMeteringAreas (null );
675- camera .setParameters (params );
695+ try {
696+ Camera .Parameters params = camera .getParameters ();
697+ if (params .getFocusMode () != Camera .Parameters .FOCUS_MODE_CONTINUOUS_PICTURE ) {
698+ params .setFocusMode (Camera .Parameters .FOCUS_MODE_CONTINUOUS_PICTURE );
699+ params .setFocusAreas (null );
700+ params .setMeteringAreas (null );
701+ camera .setParameters (params );
702+ }
703+ } catch (Exception e ) {
704+ Log .i (TAG , "Couldn't set parameters for focus" );
676705 }
677706
678707 if (mAutofocusCallback != null ) {
0 commit comments