【问题标题】:Android Marshmallow - how to know "Never ask again" is checked beforeAndroid Marshmallow - 如何知道“不再询问”之前检查过
【发布时间】: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


【解决方案1】:

我对@9​​87654321@ 有很好的经验,Dexter 简化了在运行时请求权限。

【讨论】:

    【解决方案2】:

    如果:

    • 您之前已请求该权限,并且
    • 你没有权限(checkSelfPermission()表示被拒绝),并且
    • shouldShowRequestPermissionRationale() 返回false

    然后用户勾选了“不再询问”。

    【讨论】:

      【解决方案3】:

      您不需要知道用户是否选中了该框。系统会像用户每次都拒绝你一样处理它。

      只需请求许可。如果用户选中了“不再询问”框,或者他们只是每次都拒绝你,那么从你的应用程序的角度来看,这不会有什么不同。

      http://developer.android.com/training/permissions/requesting.html

      【讨论】:

        【解决方案4】:

        但在请求该权限之前,我想通过选中“不再询问”复选框来了解它是否被用户阻止。

        我不认为你可以,但坦率地说,我看不出你需要关心的理由。如果您的流程正确,那么用户如何拒绝您的请求就无关紧要了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-04-07
          • 2016-01-07
          • 1970-01-01
          • 2017-07-15
          • 2015-12-16
          • 1970-01-01
          • 1970-01-01
          • 2016-11-20
          相关资源
          最近更新 更多