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
相关产品推荐
相关产品推荐

