我想请求权限 android.permission.ACCESS_COARSE_LOCATION 以获取塔位置。
但在请求该权限之前,我想知道它是否被用户通过选中“不再询问”复选框来阻止。
是否有正确的方法来知道“不再询问”以获得许可?
=======================要求======================= ===
我想阻止用户在未授予位置访问权限的情况下进入屏幕。
所以我将权限请求用作名为 在 onResume() 中调用的 requestLocation()。
在 requestLocation() 内部
-> 检查权限
-> 如果:权限已授予,注册更新位置。
-> ELSE : 未被授予,用两个按钮显示授予权限的对话框
-> 一键执行代码“ActivityCompat.requestPermissions(.........);”并显示内置弹出窗口以获得许可。
-> 另一个按钮有助于退出应用程序。
当在 onRequestPermissionsResult() 中标记 deny 或 grant 时,requestLocation() 将再次执行。
但是如果勾选了“Never show again”,点击了deny,就会继续死循环,如下图
onRequestPermissionsResult()=>
PERMISSION_DENIED =>
requestLocation()=>
未授予权限=>
ActivityCompat.requestPermissions(..........); =>
onRequestPermissionsResult() => PERMISSION_DENIED =>requestLocation()=>
未授予权限=>
ActivityCompat.requestPermissions(..........);
=>......................
因此,如果我能理解“不再显示”是否被点击,我可以通过在 requestLocation() 中检查它来退出循环。
最佳答案
如果:
- 您之前已请求许可,并且
- 您没有权限(
checkSelfPermission()
表示被拒绝),并且 shouldShowRequestPermissionRationale()
返回false
然后用户勾选了“不再询问”。
关于Android Marshmallow - 如何知道之前检查过 "Never ask again",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35184665/