Ionic3应用申请MANAGE_EXTERNAL_STORAGE适配Android11遭Play商店拒审
合规整改及过审解决方案
核心拒审原因
Google Play对MANAGE_EXTERNAL_STORAGE这类高危全存储访问权限有严格的适用范围限制,仅允许核心功能必须依赖全设备文件访问的应用(如文件管理器、备份恢复类工具等)申请,普通应用无合理使用场景申请该权限会直接被拒。
你当前的两个核心功能完全不需要使用该权限:
- SQLite数据库默认存储在应用私有目录,本身无需额外权限即可访问
- 应用生成的图片资源可以存到应用专属外部目录,无需申请公共存储权限
具体整改步骤
- 第一步:移除
MANAGE_EXTERNAL_STORAGE权限相关代码
删掉AndroidManifest.xml中该权限的声明,同时移除应用内动态申请该权限的逻辑。 - 第二步:修改图片目录创建逻辑
你当前使用的this.file.externalRootDirectory指向设备公共存储根目录,访问该路径才需要额外权限。修改为应用专属外部存储路径this.file.externalDataDirectory即可,该路径读写无需任何存储权限,原有文件操作逻辑无需调整:
如果你的业务需要用户可以在相册中查看应用保存的图片,可以调用系统MediaStore API写入公共媒体目录,仅需申请对应媒体权限,无需全存储权限this.file.createDir(this.file.externalDataDirectory, AppConstants.IMG_FOLDER, false) .then((entry) => { // 原有业务逻辑保持不变 }).catch((err) => { // 原有异常处理逻辑保持不变 }) - 第三步:SQLite代码无需调整
你当前配置的location: 'default'会默认将test.db存储在应用内部私有目录,本身无权限访问限制,原有代码可以直接正常运行:import { SQLiteObject, SQLite } from '@ionic-native/sqlite'; import { Storage } from '@ionic/storage'; this.sqlite.create({ name: 'test.db', location: 'default' }).then((db: SQLiteObject) => { this.dbsql = db; this.CreateTables(); }).catch(e => this.appmanager.ConsoleLog("DataB new", e)); - 第四步:若确实需要访问用户自选的公共目录文件,使用系统存储访问框架(SAF)
通过系统自带的文件选择器让用户主动授权你访问指定的文件/文件夹,无需申请MANAGE_EXTERNAL_STORAGE权限即可完成读写操作。
过审补充注意事项
如果你的应用核心功能确实必须使用全存储访问权限(如主打功能为文件管理),需要在Play控制台的权限声明环节提交详细的使用说明,同时上传功能演示视频,证明该权限的使用完全服务于应用的核心功能,没有滥用。
内容的提问来源于stack exchange,提问作者matin sayyad
相关产品推荐
相关产品推荐

