@@ -65,6 +65,7 @@ public class CameraPlugin implements MethodCallHandler {
6565 private Camera camera ;
6666 private Activity activity ;
6767 private Registrar registrar ;
68+ private Application .ActivityLifecycleCallbacks activityLifecycleCallbacks ;
6869 // The code to run after requesting camera permissions.
6970 private Runnable cameraPermissionContinuation ;
7071 private boolean requestingPermission ;
@@ -76,53 +77,51 @@ private CameraPlugin(Registrar registrar, FlutterView view, Activity activity) {
7677
7778 registrar .addRequestPermissionsResultListener (new CameraRequestPermissionsListener ());
7879
79- activity
80- .getApplication ()
81- .registerActivityLifecycleCallbacks (
82- new Application .ActivityLifecycleCallbacks () {
83- @ Override
84- public void onActivityCreated (Activity activity , Bundle savedInstanceState ) {}
80+ this .activityLifecycleCallbacks =
81+ new Application .ActivityLifecycleCallbacks () {
82+ @ Override
83+ public void onActivityCreated (Activity activity , Bundle savedInstanceState ) {}
8584
86- @ Override
87- public void onActivityStarted (Activity activity ) {}
85+ @ Override
86+ public void onActivityStarted (Activity activity ) {}
8887
89- @ Override
90- public void onActivityResumed (Activity activity ) {
91- if (requestingPermission ) {
92- requestingPermission = false ;
93- return ;
94- }
95- if (activity == CameraPlugin .this .activity ) {
96- if (camera != null ) {
97- camera .open (null );
98- }
99- }
88+ @ Override
89+ public void onActivityResumed (Activity activity ) {
90+ if (requestingPermission ) {
91+ requestingPermission = false ;
92+ return ;
93+ }
94+ if (activity == CameraPlugin .this .activity ) {
95+ if (camera != null ) {
96+ camera .open (null );
10097 }
98+ }
99+ }
101100
102- @ Override
103- public void onActivityPaused (Activity activity ) {
104- if (activity == CameraPlugin .this .activity ) {
105- if (camera != null ) {
106- camera .close ();
107- }
108- }
101+ @ Override
102+ public void onActivityPaused (Activity activity ) {
103+ if (activity == CameraPlugin .this .activity ) {
104+ if (camera != null ) {
105+ camera .close ();
109106 }
107+ }
108+ }
110109
111- @ Override
112- public void onActivityStopped (Activity activity ) {
113- if (activity == CameraPlugin .this .activity ) {
114- if (camera != null ) {
115- camera .close ();
116- }
117- }
110+ @ Override
111+ public void onActivityStopped (Activity activity ) {
112+ if (activity == CameraPlugin .this .activity ) {
113+ if (camera != null ) {
114+ camera .close ();
118115 }
116+ }
117+ }
119118
120- @ Override
121- public void onActivitySaveInstanceState (Activity activity , Bundle outState ) {}
119+ @ Override
120+ public void onActivitySaveInstanceState (Activity activity , Bundle outState ) {}
122121
123- @ Override
124- public void onActivityDestroyed (Activity activity ) {}
125- }) ;
122+ @ Override
123+ public void onActivityDestroyed (Activity activity ) {}
124+ } ;
126125 }
127126
128127 public static void registerWith (Registrar registrar ) {
@@ -181,6 +180,9 @@ public void onMethodCall(MethodCall call, final Result result) {
181180 camera .close ();
182181 }
183182 camera = new Camera (cameraName , resolutionPreset , result );
183+ this .activity
184+ .getApplication ()
185+ .registerActivityLifecycleCallbacks (this .activityLifecycleCallbacks );
184186 break ;
185187 }
186188 case "takePicture" :
@@ -204,6 +206,11 @@ public void onMethodCall(MethodCall call, final Result result) {
204206 if (camera != null ) {
205207 camera .dispose ();
206208 }
209+ if (this .activity != null && this .activityLifecycleCallbacks != null ) {
210+ this .activity
211+ .getApplication ()
212+ .unregisterActivityLifecycleCallbacks (this .activityLifecycleCallbacks );
213+ }
207214 result .success (null );
208215 break ;
209216 }
@@ -376,7 +383,8 @@ private void computeBestPreviewAndRecordingSize(
376383 } else {
377384 previewSize = goodEnough .get (0 );
378385
379- // Video capture size should not be greater than 1080 because MediaRecorder cannot handle higher resolutions.
386+ // Video capture size should not be greater than 1080 because MediaRecorder cannot handle
387+ // higher resolutions.
380388 videoSize = goodEnough .get (0 );
381389 for (int i = goodEnough .size () - 1 ; i >= 0 ; i --) {
382390 if (goodEnough .get (i ).getHeight () <= 1080 ) {
0 commit comments