如何识别用户是否在 Android 上的权限对话框之外单击

TGa*_*Gar 9 android dialog kotlin

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

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

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

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

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

Kar*_*kar -1

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

    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
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)