fix android crash when pausing or resuming video on APIs lower than 24. (#2029)
This PR fixes a crash when pause/resume methods are called in APIs lower than 24 on Android.
diff --git a/packages/camera/CHANGELOG.md b/packages/camera/CHANGELOG.md
index 49535b7..9ed7a78 100644
--- a/packages/camera/CHANGELOG.md
+++ b/packages/camera/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.5.4+1
+
+* Fix Android pause and resume video crash when executing in APIs below 24.
+
## 0.5.4
* Add feature to pause and resume video recording.
diff --git a/packages/camera/android/src/main/java/io/flutter/plugins/camera/Camera.java b/packages/camera/android/src/main/java/io/flutter/plugins/camera/Camera.java
index 110c5b6..80da644 100644
--- a/packages/camera/android/src/main/java/io/flutter/plugins/camera/Camera.java
+++ b/packages/camera/android/src/main/java/io/flutter/plugins/camera/Camera.java
@@ -21,6 +21,7 @@
import android.media.Image;
import android.media.ImageReader;
import android.media.MediaRecorder;
+import android.os.Build;
import android.util.Size;
import android.view.OrientationEventListener;
import android.view.Surface;
@@ -395,7 +396,12 @@
}
try {
- mediaRecorder.pause();
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+ mediaRecorder.pause();
+ } else {
+ result.error("videoRecordingFailed", "pauseVideoRecording requires Android API +24.", null);
+ return;
+ }
} catch (IllegalStateException e) {
result.error("videoRecordingFailed", e.getMessage(), null);
return;
@@ -411,7 +417,13 @@
}
try {
- mediaRecorder.resume();
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+ mediaRecorder.resume();
+ } else {
+ result.error(
+ "videoRecordingFailed", "resumeVideoRecording requires Android API +24.", null);
+ return;
+ }
} catch (IllegalStateException e) {
result.error("videoRecordingFailed", e.getMessage(), null);
return;
diff --git a/packages/camera/example/lib/main.dart b/packages/camera/example/lib/main.dart
index cfdcd1d..1c4b116 100644
--- a/packages/camera/example/lib/main.dart
+++ b/packages/camera/example/lib/main.dart
@@ -393,7 +393,7 @@
await controller.pauseVideoRecording();
} on CameraException catch (e) {
_showCameraException(e);
- return null;
+ rethrow;
}
}
@@ -406,7 +406,7 @@
await controller.resumeVideoRecording();
} on CameraException catch (e) {
_showCameraException(e);
- return null;
+ rethrow;
}
}
@@ -477,6 +477,7 @@
Future<void> main() async {
// Fetch the available cameras before initializing the app.
try {
+ WidgetsFlutterBinding.ensureInitialized();
cameras = await availableCameras();
} on CameraException catch (e) {
logError(e.code, e.description);
diff --git a/packages/camera/pubspec.yaml b/packages/camera/pubspec.yaml
index e94d4bd..c9e7152 100644
--- a/packages/camera/pubspec.yaml
+++ b/packages/camera/pubspec.yaml
@@ -2,7 +2,7 @@
description: A Flutter plugin for getting information about and controlling the
camera on Android and iOS. Supports previewing the camera feed, capturing images, capturing video,
and streaming image buffers to dart.
-version: 0.5.4
+version: 0.5.4+1
authors:
- Flutter Team <flutter-dev@googlegroups.com>