Android Q/R及以上版本存储图片是否需权限?Media API是否适用?
Android 10及以上图片存储权限与方案问题解答
问题1:Android Q、R及以上版本存储图片是否需要申请相关权限?使用Media API存储图片是否为合适方案?
权限要求说明
- 若你的应用仅需要将图片保存到系统公共媒体库的相册类目录(对应
MediaStore.Images.Media覆盖的DCIM、Pictures等系统默认目录),或是应用自身的私有目录,无需申请任何存储权限,Android 10到最新版本都适用该规则。 - 仅当你需要读取其他应用创建的公共媒体图片时,才需要申请对应权限:Android 12及以下申请
READ_EXTERNAL_STORAGE,Android 13及以上申请READ_MEDIA_IMAGES。
Media API适配性说明
Media API是Google官方推荐的公共媒体文件存储方案,完全适配分区存储规范,是非常合适的存储方案:
- 避免了传统文件路径适配不同版本的兼容性问题,无需处理路径变更的适配成本。
- Android 10上的过渡方案
requestLegacyExternalStorage在Android 11及以上已经强制失效,使用Media API可以实现全版本的长期兼容,不需要额外做分支适配。 - 写入逻辑非常简单,只需要构造
ContentValues填充图片信息,插入到MediaStore.Images.Media.EXTERNAL_CONTENT_URI即可完成存储。
问题2:Android 11中WRITE_EXTERNAL_STORAGE权限已失效,是否可以无需用户授权直接将图片保存至手机中?
大部分场景下可以无需授权直接保存,仅两类特殊场景需要用户授权:
- 可直接无授权保存的场景:保存图片到应用私有目录,或是保存到公共媒体库的相册、图片类默认目录,不需要任何用户授权,也不需要申请
WRITE_EXTERNAL_STORAGE权限。 - 需要用户授权的例外场景:
- 要将图片保存到公共存储的非媒体自定义目录(比如存储根目录下自建的非相册类文件夹),需要申请
MANAGE_EXTERNAL_STORAGE权限,该权限需要用户手动跳转到系统设置页授权,且Google Play仅允许文件管理、备份类等需要访问全量存储的应用申请。 - 要修改或删除其他应用创建的公共媒体图片,需要向用户申请单文件的操作授权,无法批量直接操作。
- 要将图片保存到公共存储的非媒体自定义目录(比如存储根目录下自建的非相册类文件夹),需要申请
内容的提问来源于stack exchange,提问作者Pranav Panwar
相关产品推荐
相关产品推荐

