找不到 UID 和 Uri 的持久权限授予

问题描述 投票:0回答:1

我正在构建一个应用程序:

  • 创建一个具有图像字段的对象

  • 从设备存储“图库”中选择图像

  • 将该对象存储到房间数据库中

  • 使用数据库中的图像显示数据

当我尝试选择第二个时,我单击图像时出现此错误

未找到 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 的持久权限授予”

我没有使用与获取图像相同的方法找到答案,所以我现在要求找到解决方案,或者是否需要更改获取图像的方式。

android kotlin android-permissions android-contentresolver android-securityexception
1个回答
0
投票
唯一(几乎)保证提供持久许可授予的合约是

OpenDocument

。在某些设备上,
PickVisualMedia
 可能会回落到 
OpenDocument
,但在那些没有的设备上,无法保证您获得持久的权限授予。

您的选择是:

  1. 切换到

    OpenDocument

    ,或

  2. 坚持

    PickVisualMedia

    ,但当你的
    takePersistableUriPermission()
    失败时要优雅地处理

© www.soinside.com 2019 - 2024. All rights reserved.