【发布时间】:2016-05-13 02:23:19
【问题描述】:
我想申请获取塔位置的权限 android.permission.ACCESS_COARSE_LOCATION。
但在请求该权限之前,我想通过选中“不再询问”复选框来了解它是否被用户阻止。
是否有正确的方法知道“不再要求”获得许可?
========================需求======================= ===
我想阻止用户在未授予位置访问权限的情况下进入屏幕。
所以我将权限请求用作名为 在 onResume() 中调用的 requestLocation()。
在 requestLocation() 中
-> 检查权限
-> 如果 : 已授予权限,请注册更新位置。
-> ELSE : 未授予,使用两个按钮显示授予权限对话框
-> 一键执行代码“ActivityCompat.requestPermissions(........);”并显示内置弹出窗口以获得许可。
-> 另一个按钮有助于退出应用程序。
当 onRequestPermissionsResult() 中标记了deny 或 grant 时,requestLocation() 将再次执行。
但如果勾选“不再显示”并点击拒绝,则无限循环将继续如下
onRequestPermissionsResult()=>
PERMISSION_DENIED =>
requestLocation()=>
未授予权限 =>
ActivityCompat.requestPermissions(........); =>
onRequestPermissionsResult() => PERMISSION_DENIED =>requestLocation()=>
未授予权限 =>
ActivityCompat.requestPermissions(........);
=>.......
所以如果我能理解是否点击了“不再显示”,我可以通过在 requestLocation() 中检查它来退出循环。
【问题讨论】:
-
注意:如果用户过去拒绝了权限请求,并在权限请求系统对话框中选择了不再询问选项,则此方法返回 false。如果设备策略禁止应用拥有该权限,该方法也会返回 false。
标签: android android-6.0-marshmallow android-permissions