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)
归档时间: |
|
查看次数: |
1943 次 |
最近记录: |