新registerForActivityResult方法使得请求权限变得非常简单,如下所示:
registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
when {
granted -> getUserLocation()
else -> {
//permission denied
}
}
}
但是,如何检测用户是否已通过“不再询问”复选框拒绝权限或在 Android 11+ 中已永久拒绝权限?在这些情况下,我想将用户重定向到设备的“设置”屏幕吗?
最佳答案
遗憾的是,Android API 不允许我们检测用户何时通过旧 Android 版本中的“不再询问”复选框拒绝权限或在较新的 Android 版本(即 Android 11 台以上设备)。
着眼于Android 11+,以上之所以不可能,是因为Android API不允许我们区分以下两种情况:
- 用户从未拒绝过权限请求。
- 用户已两次拒绝权限请求。
在这两种情况下,shouldShowRequestPermissionRationale(permission:)方法返回 false
和 checkSelfPermission(permission:)方法返回 PackageManager.PERMISSION_DENIED .
只要有点聪明,我们就可以绕过 Android API 的限制,让我们自己区分上述两种情况。看我的回答here有关如何执行此操作的示例。
关于android - 如何使用新的 ActivityResultContracts 类检查 "Never ask again"权限场景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68808234/