目标SDK设为30时Google Play被拒要求使用Media Store Api解决方案问询
可行解决方案如下:
立即移除
MANAGE_EXTERNAL_STORAGE权限
该权限仅允许文件管理器、备份类等需要访问全量存储的应用申请,普通应用的相机、图库功能完全不需要该权限,申请后会直接触发Google Play审核驳回。更新存储权限配置以兼容多系统版本
针对Android 13(API 33)开始的细分媒体权限,调整AndroidManifest.xml中的权限声明:
<!-- 安卓10及以下需要写外部存储权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="29" /> <!-- 安卓11-12需要读外部存储权限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> <!-- 安卓13及以上细分媒体权限,按需申请:仅需要图片就只申请READ_MEDIA_IMAGES --> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" android:required="false" />
- 全量替换相机、图库逻辑为MediaStore API实现
- 拍照存图场景:不要直接创建公共存储路径下的文件,通过
ContentResolver.insert()方法向MediaStore的MediaStore.Images.Media.EXTERNAL_CONTENT_URI插入空记录得到图片Uri,将该Uri作为相机输出地址,应用自己创建的媒体文件不需要额外申请权限即可写入。 - 图库选图场景:不要使用
ACTION_GET_CONTENT获取文件路径,也不要直接遍历公共存储目录找图片,通过MediaStore查询公共媒体库得到图片Uri,使用ContentResolver.openInputStream()读取Uri对应内容即可,不需要获取文件绝对路径。 - 彻底删除所有直接访问
/sdcard、/storage/emulated/0等公共存储原生路径的代码,API 30+下即使有权限也无法直接访问这类路径,会被Google Play扫描检出。
- 提交审核时准确填写权限声明
如果应用申请了媒体相关权限,在Google Play Console的权限声明表单中,明确说明权限仅用于应用内拍照、选取本地图片的功能,上传功能演示截图证明权限用途和描述一致。
内容的提问来源于stack exchange,提问作者Sharjeel Ahmad Siddiqui
相关产品推荐
相关产品推荐

