我正在构建一个应用程序:
创建一个具有图像字段的对象
从设备存储“图库”中选择图像
将该对象存储到房间数据库中
使用数据库中的图像显示数据
当我尝试选择第二个时,我单击图像时出现此错误
这是我用于选择图像的代码块:未找到 UID“number”和 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,当我编辑代码并启动应用程序来测试它时,我得到了错误如上所述“没有找到 UID 和 Uri 的持久权限授予”
我没有使用与获取图像相同的方法找到答案,所以我现在要求找到解决方案,或者是否需要更改获取图像的方式。
OpenDocument
。在某些设备上,
PickVisualMedia
可能会回落到
OpenDocument
,但在那些没有的设备上,无法保证您获得持久的权限授予。您的选择是:
OpenDocument
,或
PickVisualMedia
,但当你的
takePersistableUriPermission()
失败时要优雅地处理