在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 存储权限兼容, 应用上架权限处理

你的评论