Android端从相册选择图片是否需要申请存储访问权限?
Android 11+ 仅调用相册选图是否需要存储权限
明确结论:不需要。
具体实现规则
- 优先使用系统内置的Photo Picker(Android 13及以上原生支持,低版本可通过AndroidX Photo Picker兼容库适配)实现选图能力:该组件运行在系统独立进程中,用户选图操作完全和你的应用进程隔离,你的应用仅能获得用户主动选中图片的临时访问授权,全程无需申请任何存储类权限。
- 如果用传统意图
ACTION_PICK/ACTION_GET_CONTENT调起系统相册,同样不需要申请存储权限:系统返回选中图片的Uri时,会自动给你的应用授予该Uri对应的临时读写权限,你直接读取流上传即可,不需要申请全存储访问范围的权限。
唯一需要申请存储权限的场景
只有当你放弃系统选图组件,需要自行遍历设备存储、实现自定义相册浏览选择页面时,才需要按系统版本申请对应权限:Android 13+申请
READ_MEDIA_IMAGES,Android 11-12申请READ_EXTERNAL_STORAGE,Android 10及以下版本额外补充WRITE_EXTERNAL_STORAGE权限。
上传环节注意事项
- 不要尝试把系统返回的图片Uri转换为本地真实文件路径,不同厂商ROM的媒体存储路径规则差异极大,很容易出现兼容问题。直接通过
ContentResolver.openInputStream()获取图片输入流,构造multipart表单请求上传到你的PHP后端即可。 - 系统授予的临时Uri访问权限是单次生效的,拿到Uri后请尽快完成上传流程,不要持久化存储该Uri供后续重复访问,否则会触发无权限报错。
内容的提问来源于stack exchange,提问作者Federico Alie
相关产品推荐
相关产品推荐

