-
Notifications
You must be signed in to change notification settings - Fork 670
Description
Bug Report
Plugin(s)
@capacitor/camera — version 6.0.0
Capacitor Version
Latest Dependencies:
@capacitor/cli: 6.1.2
@capacitor/core: 6.1.2
@capacitor/android: 6.1.2
@capacitor/ios: 6.1.2
Installed Dependencies:
@capacitor/cli: 6.1.0
@capacitor/core: 6.1.0
@capacitor/ios: 6.1.0
@capacitor/android: 6.1.0
Platform(s)
Android
Current Behavior
On our app's Sentry tracker (and in the Play Store console's "Crashes and ANRs" page), we're seeing quite a few users being hit by an issue occurring when the camera plugin attempts to call unregister on the pickMultipleMedia ActivityResultHandler.
This has started happening after updating to Capacitor 6.
(See the full stack trace in the bottom of this post)
We haven't been able to reproduce this on our own (not for lack of trying though).
Expected Behavior
That this crash doesn't happen.
Code Reproduction
As mentioned, we haven't been able to reproduce this — neither in our own app nor in a minimal sample scenario.
Other Technical Details
There's seemingly no pattern wrt. Android versions / device types being more affected than others as far as we can see in our data.
Looking at the implementation in CameraPlugin.java's override of onDestroy and how it calls unregister, I wonder if it would make sense to also add a similar null-checking guard before calling unregister on the other unregister call on line 381. Or would that just "hide" an underlying issue?
Additional Context
Stack trace:
java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.activity.result.ActivityResultLauncher.unregister()' on a null object reference
at com.capacitorjs.plugins.camera.CameraPlugin.lambda$openPhotos$3(CameraPlugin.java:381)
at com.capacitorjs.plugins.camera.CameraPlugin.$r8$lambda$fTjbhwXpo9A6PA35qcfl__8nKdQ
at com.capacitorjs.plugins.camera.CameraPlugin$$ExternalSyntheticLambda3.onActivityResult
at androidx.activity.result.ActivityResultRegistry.register(ActivityResultRegistry.java:227)
at com.capacitorjs.plugins.camera.CameraPlugin.registerActivityResultLauncher(CameraPlugin.java:334)
at com.capacitorjs.plugins.camera.CameraPlugin.openPhotos(CameraPlugin.java:350)
at com.capacitorjs.plugins.camera.CameraPlugin.pickImages(CameraPlugin.java:137)
at java.lang.reflect.Method.invoke(Method.java)
at com.getcapacitor.PluginHandle.invoke(PluginHandle.java:138)
at com.getcapacitor.Bridge.lambda$callPluginMethod$0(Bridge.java:820)
at com.getcapacitor.Bridge.$r8$lambda$ehFTi5f4HhVNFKTbCKAYDkpQYRA
at com.getcapacitor.Bridge$$ExternalSyntheticLambda3.run
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.os.HandlerThread.run(HandlerThread.java:67)
java.lang.reflect.InvocationTargetException: null
at java.lang.reflect.Method.invoke(Method.java)
at com.getcapacitor.PluginHandle.invoke(PluginHandle.java:138)
at com.getcapacitor.Bridge.lambda$callPluginMethod$0(Bridge.java:820)
at com.getcapacitor.Bridge.$r8$lambda$ehFTi5f4HhVNFKTbCKAYDkpQYRA
at com.getcapacitor.Bridge$$ExternalSyntheticLambda3.run
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.os.HandlerThread.run(HandlerThread.java:67)
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at com.getcapacitor.Bridge.lambda$callPluginMethod$0(Bridge.java:829)
at com.getcapacitor.Bridge.$r8$lambda$ehFTi5f4HhVNFKTbCKAYDkpQYRA
at com.getcapacitor.Bridge$$ExternalSyntheticLambda3.run
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.os.HandlerThread.run(HandlerThread.java:67)