首页 > 解决方案 > 如何识别用户是否在Android上的权限对话框之外单击

问题描述

由于在 Android 11 ( https://developer.android.com/about/versions/11/privacy/location ) 上引入了新的位置权限更改,因此需要更仔细地处理权限。我们现在只能请求两次后台位置权限

我想向用户显示一个取决于其位置权限状态的对话框。

问题是系统处理对话框外的点击与拒绝权限相同,但它显然不计入PermissionsUtil.shouldShowRequestStoragePermissionRationale限制。因此很难区分用户处于哪种状态。

我最初的问题是:如何处理这种特定情况?

但我想更有用的是一般问题:
如何识别用户是在系统权限对话框之外按下还是直接拒绝了权限?.

标签: androidkotlindialog

解决方案


根据每个权限的结果,您可以将其添加到列表中,然后您可以知道用户是否完全拒绝/拒绝了权限。可以通过以下方式完成:

    private val requestPermissionLauncher =
        registerForActivityResult(
            ActivityResultContracts.RequestMultiplePermissions()
        ) { result: MutableMap<String, Boolean> ->
            val deniedList: List<String> = result.filter {
                !it.value
            }.map {
                it.key
            }

            when {
                deniedList.isNotEmpty() -> {
                    val map = deniedList.groupBy { permission ->
                        if (shouldShowRequestPermissionRationale(permission)) DENIED else EXPLAINED
                    }
                    map[DENIED]?.let {
                        // request denied , request again
                    }
                    map[EXPLAINED]?.let {
                        //request denied ,send to settings 

                    }

                }
                else -> {
                   //All request are permitted
                }
            }
        }

推荐阅读