You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android重启应用后无法通过Intent访问图片权限问题求助

解决方案:Android应用重启后无法访问相册图片URI的权限问题

问题原因

使用ACTION_OPEN_DOCUMENT获取的图片URI仅具备临时访问权限,应用进程重启后,系统会自动回收该权限,导致再次访问时抛出SecurityException。

修复步骤

1. 申请持久化访问权限

在获取到图片URI后,调用ContentResolver.takePersistableUriPermission()将临时权限转为持久权限,确保应用重启后仍能访问该资源。修改你的onActivityResult方法:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if(resultCode == RESULT_OK) {
        val selectedImage = data?.data ?: return
        try {
            // 申请持久化读写权限
            val persistFlags = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
            contentResolver.takePersistableUriPermission(selectedImage, persistFlags)
            
            // 原有业务逻辑
            when (requestCode) {
                // 处理你的requestCode分支
            }
            imageList.add(selectedImage.toString())
        } catch (e: Exception){
            e.printStackTrace()
        }
    }
}

2. 验证权限有效性

从Room数据库读取URI后,直接用于图片加载即可(比如用Glide、Picasso或系统ImageView的setImageURI()),持久化权限会自动生效,无需额外操作。

注意事项

  • 每次通过ACTION_OPEN_DOCUMENT选择新图片时,都需要执行一次takePersistableUriPermission(),该权限仅对当前选中的URI生效。
  • 此操作不需要额外向用户申请权限弹窗,系统会在用户选择文件后自动授予持久化权限。
  • Android 10及以上版本中,READ_EXTERNAL_STORAGE权限对ACTION_OPEN_DOCUMENT返回的URI并非必需,但若需兼容更低版本可保留该权限配置。

内容的提问来源于stack exchange,提问作者Tods

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 13:15:33