In my app I use images from phone galery. I recive uri and write it to database.
When I want to use this uri I get error, for example:
java.lang.SecurityException: Calling uid ( 10192 ) does not have permission to access picker uri: content://media/picker/0/com.android.providers.media.photopicker/media/1000000033
On start my app I send request for permissions:
val permissionState = rememberMultiplePermissionsState(
listOf(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CAMERA
)
)
SideEffect() {
permissionState.launchMultiplePermissionRequest()
}
But I get error when:
fun getImgBitmap(img: String, context: Context): Bitmap {
val source: ImageDecoder.Source
val bitmap: Bitmap
source = ImageDecoder.createSource(context.contentResolver, Uri.parse(img))
bitmap = ImageDecoder.decodeBitmap(source)
.....
}

The problem appears on API > 29
For API > 29 I use:
val contentResolver = context.contentResolver
val takeFlags: Int = Intent.FLAG_GRANT_READ_URI_PERMISSION or
Intent.FLAG_GRANT_WRITE_URI_PERMISSION
contentResolver.takePersistableUriPermission(Uri.parse(img), takeFlags)
source = ImageDecoder.createSource(contentResolver, Uri.parse(img))
bitmap = ImageDecoder.decodeBitmap(source)
(img is String)
And get: java.lang.SecurityException: No persistable permission grants found for UID 10195 and Uri content://media/...
when I get uri write next line:
val name = context.packageName
context.grantUriPermission(name, it, Intent.FLAG_GRANT_READ_URI_PERMISSION)
val launcher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.PickVisualMedia()
) {it ->
**val name = context.packageName
context.grantUriPermission(name, it, Intent.FLAG_GRANT_READ_URI_PERMISSION)**
//savetodatabase
}
seems to work...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With