Android 找不到UID 10208的持久权限授予[安全异常]
我正在应用程序中使用Storage Access Framework for Image Picker。下面是代码Android 找不到UID 10208的持久权限授予[安全异常],android,android-permissions,securityexception,storage-access-framework,imagepicker,Android,Android Permissions,Securityexception,Storage Access Framework,Imagepicker,我正在应用程序中使用Storage Access Framework for Image Picker。下面是代码 val types = arrayOf("image/png", "image/jpeg", "image/jpg") val intent = Intents.createDocumentIntent(types, true) if (canDeviceHandle(intent)) caller.startActivi
val types = arrayOf("image/png", "image/jpeg", "image/jpg")
val intent = Intents.createDocumentIntent(types, true)
if (canDeviceHandle(intent)) caller.startActivityForResult(intent, OPEN_GALLERY)
以下是创建文档的意图
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)
}
}
在onActivityResult中
我读过很多关于这个崩溃的解决方案,比如添加persistable(FLAG\u GRANT\u persistable\u URI\u PERMISSION)FLAG或添加takePersistableUriPermission,但我已经有了这个解决方案,但我仍然遇到了这个崩溃。到目前为止,我还没有找到任何解决方案,我的应用程序用户也在我的手机上面临这个问题,我自己也无法复制
另请注意:我正在使用目标版本->11替换:
val flags=data.flags和Intent.FLAG\授予\读取\ URI\权限
与:
val flags=Intent.FLAG\授予\读取\ URI\权限
您传递给
takePersistableUriPermission()
的唯一值是FLAG\u GRANT\u READ\u URI\u PERMISSION
和FLAG\u GRANT\u WRITE\u URI\u PERMISSION
,并且您不知道数据中包含什么。flags
我仍然收到此崩溃。我已从代码中删除data.flags@通过一次选择约540张图像,我可以重现这次崩溃。我读到在获取持久权限时有128 | 512张图像的限制。@FiXiT:Ah!是的,如果您选择了那么多图像,这很可能是您的问题的根源。这一限制是不可改变的,至少对现有版本的Android来说是如此,尽管人们总是希望他们在未来版本的Android中提高这一限制。不过,很可能总会有一些限制。还要注意的是,AFAIK的限制是每个应用程序,而不是每个ACTION\u OPEN\u DOCUMENT
call——两个ACTION\u OPEN\u DOCUMENT
调用一次大约270个图像,在第二批中,或者在具有128Uri
限制的设备上,第一批应该会给出类似的结果。@FiXiT:用于少量文档,而不是用于图库或类似内容的图像。而且,由于您正在处理图像,您可能会考虑切换到查询<代码> MistaSTORE < /COD>并呈现自己的库UI。
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)
}
activity.contentResolver.takePersistableUriPermission(it, flags)