ImagePicker
ImagePicker copied to clipboard
No persistable permission grants found for UID
My app running in production and I see a particular user is facing this issue in android 12 during image selection or photo capture. Below is the stack,
Caused by java.lang.SecurityException: No persistable permission grants found for UID 10284 and Uri content://com.google.android.apps.photos.contentprovider/2/1/mediakey:/local%3Aea99ad38-b212-482b-9cf9-5b9f62f1b07f/ORIGINAL/NONE/image/jpeg/1763723274 at android.os.Parcel.createExceptionOrNull(Parcel.java:2425) at android.os.Parcel.createException(Parcel.java:2409) at android.os.Parcel.readException(Parcel.java:2392) at android.os.Parcel.readException(Parcel.java:2334) at android.app.IUriGrantsManager$Stub$Proxy.takePersistableUriPermission(IUriGrantsManager.java:284) at android.content.ContentResolver.takePersistableUriPermission(ContentResolver.java:2896) at com.github.dhaval2404.imagepicker.provider.GalleryProvider.takePersistableUriPermission(GalleryProvider.java:86) at com.github.dhaval2404.imagepicker.provider.GalleryProvider.handleResult(GalleryProvider.java:74) at com.github.dhaval2404.imagepicker.provider.GalleryProvider.onActivityResult(GalleryProvider.java:61) at com.github.dhaval2404.imagepicker.ImagePickerActivity.onActivityResult(ImagePickerActivity.kt:110) at android.app.Activity.dispatchActivityResult(Activity.java:8381) at android.app.ActivityThread.deliverResults(ActivityThread.java:5294) at android.app.ActivityThread.handleSendResult(ActivityThread.java:5340) at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:54) at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2210) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7839) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:550) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
Android version
Android 12
Impacted devices
Oneplus 8T
Installation method
Gradle: implementation 'com.github.dhaval2404:imagepicker:2.1'
SDK version
31
Same crash happening for me
Crash without reproduce step.
Log
Caused by java.lang.SecurityException: No persistable permission grants found for UID 99910120 and Uri 0 @ content://com.miui.gallery.open/raw//storage/emulated/0/Download/wPeFo8Vh.jpg
at android.os.Parcel.readException(Parcel.java:1715)
at android.os.Parcel.readException(Parcel.java:1668)
at android.app.ActivityManagerProxy.takePersistableUriPermission(ActivityManagerProxy.java:4924)
at android.content.ContentResolver.takePersistableUriPermission(ContentResolver.java:1809)
at com.github.dhaval2404.imagepicker.provider.GalleryProvider.takePersistableUriPermission(GalleryProvider.kt:86)
at com.github.dhaval2404.imagepicker.provider.GalleryProvider.handleResult(GalleryProvider.kt:74)
at com.github.dhaval2404.imagepicker.provider.GalleryProvider.onActivityResult(GalleryProvider.kt:61)
at com.github.dhaval2404.imagepicker.ImagePickerActivity.onActivityResult(ImagePickerActivity.kt:110)
at android.app.Activity.dispatchActivityResult(Activity.java:7109)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4192)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4239)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1599)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:165)
at android.app.ActivityThread.main(ActivityThread.java:6375)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)
Impacted devices and Android Version
- Redmi Note 4 with Android 7
- Redmi K20 Pro with Android 9
Installation method
implementation 'com.github.dhaval2404:imagepicker:2.1'
Compile SDK Version
32
Any solution?
Same, happening in Redmi S2, Android 8.
Same error. Any solution?
Same error.Any solution?
The library takes persistent read permission for picked images through contentResolver.takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION)
.
In android 10 and below an app can only have 128 persistent URIs. 512 in android 11 and above.
I started seeing this error more frequently in production after several years of my users uploading images and some of the users have now reached 500+ images.
As I'm uploading the images to a server and don't really need the persistence, I release the permission after upload with context.contentResolver.releasePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION)
.
See related bugtracker issue: https://issuetracker.google.com/issues/149315521 And stack overflow post: https://stackoverflow.com/questions/71099575/should-i-release-persistableuripermission-when-a-new-storage-location-is-chosen