上架360市场的时候遇到的奇葩事
在Android版本的APP上架市场的时候,我专门升级了编译版本,把所有媒体内容选择操作使用了系统选择器。因此是不需要储存权限的。
但是360手机软件市场的审核人员认为,我们读取了系统文件内容,需要申请储存权限。未在隐私声明中标明,且未申请该权限……
因此我单独做了以下处理:
首先在AndroidManifest.xml添加了:
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />然后写了个权限申请的方法:
object GalleryPermissionHelper {
const val REQUEST_CODE_STORAGE = 9001
private var pendingCallback: (() -> Unit)? = null
@JvmStatic
fun requestGalleryAccess(
activity: Activity,
onGranted: Runnable
) {
requestGalleryAccess(activity) {
onGranted.run()
}
}
@JvmStatic
fun requestGalleryAccess(
activity: Activity,
onGranted: () -> Unit
) {
val permission =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
Manifest.permission.READ_MEDIA_IMAGES
} else {
Manifest.permission.READ_EXTERNAL_STORAGE
}
// ⭐关键:已经有权限 → 直接执行,不弹任何UI
if (
ContextCompat.checkSelfPermission(activity, permission)
== PackageManager.PERMISSION_GRANTED
) {
onGranted()
return
}
// 没权限才弹自定义说明弹窗
CustomDialog.Builder(activity)
.setTitle("相册权限申请")
.setMessage("我们只会读取您选择的图片,不会访问您的其他相册内容")
.setPositiveButton("确定") { dialog, _ ->
dialog.dismiss()
checkStorageAndProceed(
activity,
onGranted
)
}
.setNegativeButton("拒绝") { dialog, _ ->
dialog.dismiss()
}
.setCanceledOnTouchOutside(false)
.show()
}
private fun checkStorageAndProceed(
activity: Activity,
onGranted: () -> Unit
) {
val permission =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
Manifest.permission.READ_MEDIA_IMAGES
} else {
Manifest.permission.READ_EXTERNAL_STORAGE
}
if (
ContextCompat.checkSelfPermission(activity, permission)
== PackageManager.PERMISSION_GRANTED
) {
onGranted()
return
}
pendingCallback = onGranted
ActivityCompat.requestPermissions(
activity,
arrayOf(permission),
REQUEST_CODE_STORAGE
)
}
@JvmStatic
fun onRequestPermissionsResult(
requestCode: Int,
grantResults: IntArray
) {
if (requestCode != REQUEST_CODE_STORAGE) return
if (
grantResults.isNotEmpty() &&
grantResults[0] == PackageManager.PERMISSION_GRANTED
) {
pendingCallback?.invoke()
}
pendingCallback = null
}
}所有的应用市场,只有360有因为这个被拒绝的问题。属实是有点奇葩了。
标签:Android 相册权限适配, 360 应用市场审核驳回, READ_MEDIA_IMAGES 权限, Android 存储权限兼容, 应用上架权限处理