Dhaval2404 / ImagePicker

📸Image Picker for Android, Pick an image from Gallery or Capture a new image with Camera
Apache License 2.0
1.52k stars 339 forks source link

No persistable permission grants found for UID #294

Open Surendar7 opened 2 years ago

Surendar7 commented 2 years ago

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

paulsUsername commented 2 years ago

Same crash happening for me

tl-yen commented 1 year ago

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

Installation method

implementation 'com.github.dhaval2404:imagepicker:2.1'

Compile SDK Version

32

Rohitsachdeva commented 1 year ago

Any solution?

alviandf commented 1 year ago

Same, happening in Redmi S2, Android 8.

lolucosmin commented 1 year ago

Same error. Any solution?

chplalex commented 11 months ago

Same error.Any solution?

TorkelV commented 4 months ago

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