Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit 031310a

Browse files
kmorkosbparrishMines
authored andcommitted
Unregister the activity lifecycle callbacks when disposing the camera (#645)
1 parent e6c8b92 commit 031310a

File tree

1 file changed

+47
-39
lines changed

1 file changed

+47
-39
lines changed

packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java

Lines changed: 47 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)