5
5
import android .hardware .Camera ;
6
6
import android .media .CamcorderProfile ;
7
7
import android .media .MediaRecorder ;
8
- import android .os .Build ;
9
8
import android .os .Handler ;
10
9
import android .support .annotation .Nullable ;
11
10
import android .util .Log ;
@@ -235,7 +234,11 @@ public void onPictureTaken(byte[] data, Camera camera) {
235
234
// Reset capturing state to allow photos to be taken
236
235
capturingImage = false ;
237
236
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 ){}
239
242
}
240
243
});
241
244
}
@@ -270,10 +273,26 @@ void startVideo() {
270
273
271
274
@ Override
272
275
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
+ }
277
296
}
278
297
279
298
// Code from SandriosCamera library
@@ -331,7 +350,7 @@ List<Size> sizesFromList(List<Camera.Size> sizes) {
331
350
// https://github.com/sandrios/sandriosCamera/blob/master/sandriosCamera/src/main/java/com/sandrios/sandriosCamera/internal/manager/impl/Camera1Manager.java#L212
332
351
void initResolutions () {
333
352
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 ());
335
354
336
355
CamcorderProfile camcorderProfile = getCamcorderProfile (mVideoQuality );
337
356
@@ -440,6 +459,13 @@ private int calculateCaptureRotation() {
440
459
}
441
460
442
461
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
+
443
469
initResolutions ();
444
470
445
471
boolean invertPreviewSizes = (mCameraInfo .orientation + mDisplayOrientation ) % 180 == 0 ;
@@ -459,11 +485,10 @@ private void adjustCameraParameters() {
459
485
);
460
486
int rotation = calculateCaptureRotation ();
461
487
mCameraParameters .setRotation (rotation );
488
+ mCamera .setParameters (mCameraParameters );
462
489
463
490
setFocus (mFocus );
464
491
setFlash (mFlash );
465
-
466
- mCamera .setParameters (mCameraParameters );
467
492
}
468
493
469
494
private void collectCameraProperties () {
@@ -667,12 +692,16 @@ private void resetFocus(final boolean success, final Camera camera) {
667
692
public void run () {
668
693
if (camera != null ) {
669
694
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" );
676
705
}
677
706
678
707
if (mAutofocusCallback != null ) {
0 commit comments