如何将带MANAGE_EXTERNAL_STORAGE权限的Android 11应用发布到Play Store
Android 11+图片写入应用Play Store上架被拒解决方案
首先你当前的配置本身存在逻辑错误:minSdk=30代表应用最低兼容Android 11,compileSdk=29代表基于Android 10的SDK编译,编译版本低于最低支持版本属于非法配置,被拒是必然结果,先修正该配置,将compileSdk和targetSdk同步升级到33及以上(符合Play Store当前的targetSdk版本要求)。
后续按照以下方案调整即可合规上架:
- 移除敏感权限申请
完全删除AndroidManifest.xml中MANAGE_EXTERNAL_STORAGE权限的声明,同时移除所有请求该权限的代码逻辑。该权限仅面向文件管理器、备份工具等必须访问全量存储的应用开放审核,普通图片写入类应用无资格申请,也不需要申请。 - 改用MediaStore API实现图片写入
你的应用仅需要写入图片到公共存储目录,用官方提供的MediaStore API即可实现,Android 11及以上版本无需申请任何存储权限:
Java实现逻辑与上述代码完全一致,仅语法存在差异。// Kotlin 示例:写入图片到Pictures目录下的自定义文件夹 val imageValues = ContentValues().apply { put(MediaStore.Images.Media.DISPLAY_NAME, "sample_${System.currentTimeMillis()}.jpg") put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg") put(MediaStore.Images.Media.RELATIVE_PATH, "${Environment.DIRECTORY_PICTURES}/你的应用专属文件夹名") put(MediaStore.Images.Media.IS_PENDING, 1) } val imageUri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageValues) imageUri?.let { uri -> contentResolver.openOutputStream(uri).use { outputStream -> // 此处将你的Bitmap写入输出流 targetBitmap.compress(Bitmap.CompressFormat.JPEG, 95, outputStream) } // 写入完成后更新状态,对用户可见 imageValues.clear() imageValues.put(MediaStore.Images.Media.IS_PENDING, 0) contentResolver.update(uri, imageValues, null, null) } - 特殊场景适配
如果你需要用户自定义保存路径,不要申请敏感权限,调用系统存储访问框架(SAF)的ACTION_OPEN_DOCUMENT_TREEIntent唤起系统文件夹选择器,由用户主动授权目标文件夹的访问权限,该方式完全符合Play Store政策要求,无需额外权限申请。 - 提交前自查
提交前进入Play Console的「应用内容」板块,确认敏感权限声明列表中没有MANAGE_EXTERNAL_STORAGE,所有已申报权限都对应明确的应用功能,功能描述与实际应用行为完全匹配。
内容的提问来源于stack exchange,提问作者Falah Arby
相关产品推荐
相关产品推荐

