找不到 UID 10208 的持久权限授予 [安全异常]

问题描述

我在我的应用中使用了 Image Picker 的存储访问框架。下面是代码

False

这里是创建文档的意图

val types = arrayOf("image/png","image/jpeg","image/jpg")
val intent = Intents.createDocumentIntent(types,true)
if (canDeviceHandle(intent)) caller.startActivityForResult(intent,OPEN_galLERY)

这是在 OnActivityResult

 fun createDocumentIntent(types: Array<String>,allowedMultiple: Boolean): Intent {
        return Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
            addCategory(Intent.CATEGORY_OPENABLE)
            type = if (!types.isNullOrEmpty()) {
                putExtra(Intent.EXTRA_MIME_TYPES,types)
                types[0]
            } else "*/*"
            putExtra(Intent.EXTRA_ALLOW_MULTIPLE,allowedMultiple)
            addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION)
            addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
        }
    }

我正在排队

    private fun handlegalleryActivityResult(data: Intent?,callbacks: FilePicker.Callbacks) {
        if (data == null) return

        val files = mutablelistof<Uri>()
        when {
            data.clipData != null -> {
                val clipData = data.clipData ?: return
                (0 until clipData.itemCount).forEach { files.add(clipData.getItemAt(it).uri) }
            }
            data.data != null -> {
                files.add(data.data!!)
            }
            else -> return
        }

        files.forEach {
            val flags = data.flags and Intent.FLAG_GRANT_READ_URI_PERMISSION
            activity.contentResolver.takePersistableuriPermission(it,flags)
        }

        callbacks.onFilesPicked(files)
    }

在 onActivityResult 中。

我阅读了许多有关此崩溃的解决方案,例如添加持久性 (FLAG_GRANT_PERSISTABLE_URI_PERMISSION) 标志或添加 takePersistableuriPermission,但我已经有了这个,但我仍然遇到此崩溃。到目前为止,我找不到任何解决方案,我的应用用户也在我的手机上遇到了这个问题,我自己无法重现。

另外附注:我正在使用目标版本 -> 11

解决方法

替换:

val flags = data.flags and Intent.FLAG_GRANT_READ_URI_PERMISSION

与:

val flags = Intent.FLAG_GRANT_READ_URI_PERMISSION

您传递给 takePersistableUriPermission() 的唯一值是 FLAG_GRANT_READ_URI_PERMISSIONFLAG_GRANT_WRITE_URI_PERMISSION,而您不知道 data.flags 中包含什么。