gpt4 book ai didi

android - 如何在 Android 11 中检测权限的永久拒绝?

转载 作者:行者123 更新时间:2023-12-04 23:54:52 30 4
gpt4 key购买 nike

在Android 11中,当用户对任何权限请求多次选择“拒绝”选项时,系统会将其标记为“永久拒绝”。一旦永久拒绝,用户必须在设置中启用。从此shouldShowRequestPermissionRationale()开始返回false权限窗口有三个选项,“拒绝”、“允许所有时间”、“只允许这个时间”。但在“拒绝”、“始终允许”、“每次询问”的设置中都存在。
如何查找用户何时从设置中选择“每次都询问我”,因为,checkSelfPermission()返回 PackageManager.PERMISSION_DENIED , 和 shouldShowRequestPermissionRationale()返回 false .这次我想显示权限窗口,而不是移动到设置。 类似于谷歌地图权限的东西

最佳答案

使用新的 ActivityResultsContract 您可以通过以下方式执行此操作


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
}
}
}

在 OnCreate()[确保在 OnCreate 中请求权限,否则应用程序将崩溃],请求权限:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
requestPermissionLauncher.launch(REQUIRED_PERMISSIONS)
}
以下列方式询问 requiredPermissions :
private val REQUIRED_PERMISSIONS = arrayOf(
Manifest.permission.CAMERA,
Manifest.permission.READ_EXTERNAL_STORAGE
)

关于android - 如何在 Android 11 中检测权限的永久拒绝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68907182/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com