Android选取图片报错:No persistable permission grants found问题排查
解决Android选取图片时的持久化URI权限错误
我开发的Android应用包含以下功能:
- 创建包含图片字段的对象
- 从设备相册选取图片
- 将对象存入Room数据库
- 从数据库读取并展示数据及对应图片
在选取第二张图片时,点击图片触发了如下错误:
No persistable permission grants found for UID "number" and Uri content://media/...
原问题代码
图片选取逻辑:
val singlePhotoPickerLauncher = rememberLauncherForActivityResult( contract = ActivityResultContracts.PickVisualMedia()){ imageUri -> if (imageUri != null){ val contentResolver = context.contentResolver val takeFlags: Int = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION try { contentResolver.takePersistableUriPermission(imageUri, takeFlags) viewModel.onEvent(AddPlantEvents.AddImageUri(imageUri)) } catch (e: SecurityException) { // Handle the SecurityException, e.g., show an error message Log.e("PickVisualMedia", "Failed to take persistable permission", e) } } }
触发选取的按钮代码:
Button( modifier = Modifier .width(100.dp) .height(100.dp), onClick = { singlePhotoPickerLauncher.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly)) }) { Text( text = "Add Photo", textAlign = TextAlign.Center, fontSize = 19.sp) }
问题原因与解决方案
最初未使用ContentResolver获取持久化URI时出现其他权限错误,添加后仍触发上述异常。最终发现问题出在权限标志上:移除Intent.FLAG_GRANT_WRITE_URI_PERMISSION标志后,代码即可正常运行。
修正后的图片选取逻辑代码:
val singlePhotoPickerLauncher = rememberLauncherForActivityResult( contract = ActivityResultContracts.PickVisualMedia()){ imageUri -> if (imageUri != null){ val contentResolver = context.contentResolver val takeFlags: Int = Intent.FLAG_GRANT_READ_URI_PERMISSION try { contentResolver.takePersistableUriPermission(imageUri, takeFlags) viewModel.onEvent(AddPlantEvents.AddImageUri(imageUri)) } catch (e: SecurityException) { // Handle the SecurityException, e.g., show an error message Log.e("PickVisualMedia", "Failed to take persistable permission", e) } } }
说明
使用ActivityResultContracts.PickVisualMedia选取图片时,系统默认仅授予读权限,请求写权限会导致持久化权限申请失败——因为媒体库并未授予该URI的写权限,进而触发SecurityException及后续的权限找不到错误。仅保留读权限即可满足从相册读取图片并持久化URI用于后续展示的需求。
内容的提问来源于stack exchange,提问作者LazyHam
相关产品推荐
相关产品推荐

