Android 11作用域存储下WhatsApp状态保存应用适配问题咨询
Android 11+ WhatsApp状态保存应用适配方案
权限显示歧义说明
你观察到的同类应用权限显示差异是系统文案的混淆问题,并非其使用了MANAGE_EXTERNAL_STORAGE权限:
- Android 11及以上版本,申请
READ_EXTERNAL_STORAGE(Android 12+对应READ_MEDIA_IMAGES+READ_MEDIA_VIDEO)时,系统给用户的弹窗提示为「允许访问照片、媒体和文件」,部分ROM的应用权限详情页会将该权限标注为「所有文件管理权限」,属于系统展示文案的歧义,实际并未授予全文件访问权限。 - 这类应用全程没有触发全文件权限申请弹窗,就是因为没有声明/申请
MANAGE_EXTERNAL_STORAGE权限。
无全文件权限的实现方案
不需要全文件权限即可实现状态读取、保存的核心功能,两种合规实现方式:
方案1:MediaStore媒体查询
WhatsApp状态缓存的图片、视频文件会被系统媒体扫描器收录,直接通过MediaStoreAPI查询即可,仅需要媒体访问权限:
- 权限申请要求:Android 11申请
READ_EXTERNAL_STORAGE,Android 12+申请READ_MEDIA_IMAGES、READ_MEDIA_VIDEO即可 - 查询示例代码:
// Android 11+ 查询WhatsApp状态隐藏目录下的媒体文件 String selection = MediaStore.Files.FileColumns.RELATIVE_PATH + " LIKE ? "; String[] selectionArgs = new String[]{"%WhatsApp/Media/.Statuses%"}; Uri queryUri = MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL); Cursor cursor = getContentResolver().query(queryUri, null, selection, selectionArgs, null);
读取到的媒体文件可直接通过MediaStoreAPI写入公共图片、下载目录,也可以存入应用专属沙箱目录,不需要额外权限。
方案2:SAF目录授权适配
如果部分ROM的媒体扫描器不收录.Statuses这类带点前缀的隐藏目录内容,可以引导用户通过系统存储访问框架(SAF)手动授权对应目录访问权限:
- 调用SAF目录选择器,引导用户跳转到WhatsApp的
Media/.Statuses目录授予访问权限,授权后可以持久化该目录的读写权限,后续无需重复申请 - 若需要将文件保存到根目录等任意公共路径,同样可以引导用户通过SAF授权对应目标目录的访问权限即可实现,全程不需要申请全文件权限。
Google Play提审注意事项
- 完全移除
AndroidManifest.xml中MANAGE_EXTERNAL_STORAGE权限的声明 - 提审时在权限声明页明确说明媒体权限的用途为「读取用户本地存储中的WhatsApp状态文件,供用户手动保存到公共存储目录」,同时附带功能操作的演示录屏,即可正常通过审核。
内容的提问来源于stack exchange,提问作者inabdev
相关产品推荐
相关产品推荐

