Android 11下READ_EXTERNAL_STORAGE是否会根据场景呈现不同授权等级?
问题结论与原因说明
这种情况是完全可能存在的,核心诱因是Android 11(API 30)的存储权限兼容逻辑,和是否申请MANAGE_EXTERNAL_STORAGE权限没有关联,差异来自两款应用的清单配置不同:
核心差异点:requestLegacyExternalStorage属性配置
你可以优先检查两个应用AndroidManifest.xml中application节点的如下属性:
- 应用1的配置为
android:requestLegacyExternalStorage="false"(targetSdk 30的默认值)
此时系统启用分区存储逻辑,READ_EXTERNAL_STORAGE权限仅授权应用访问公共媒体目录下的照片、视频、音频三类文件,对应权限设置页显示为「仅允许访问媒体文件」,权限申请弹窗也只会提示访问照片和媒体,完全符合你看到的现象。 - 应用2的配置为
android:requestLegacyExternalStorage="true"
即使targetSdk到30,只要是首次安装的全新应用,系统依然会为其启用兼容模式,READ_EXTERNAL_STORAGE权限会授权应用访问所有公共存储下的非私有文件,对应权限设置页就会显示为「允许访问管理所有文件」,申请弹窗也会额外增加「文件」选项,和你观测到的应用2表现完全一致。
补充验证说明
三星Android 11的ROM对存储权限逻辑没有做定制修改,完全遵循AOSP官方规则,你可以直接导出应用2的清单文件确认该属性配置,即可100%复现你遇到的差异。
注意:如果应用是从targetSdk<=29的版本升级安装而来,requestLegacyExternalStorage属性会被系统忽略,但你明确说明两款都是首次安装的全新应用,所以刚好触发该兼容逻辑
内容的提问来源于stack exchange,提问作者SOSparachuter1
相关产品推荐
相关产品推荐

