Android Marshmallow - 如何知道之前检查过 "Never ask again"

标签 android android-6.0-marshmallow android-permissions

我想请求权限 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/

相关文章:

android - 子类化 SimpleCursorAdapter 以包含 convertView 以节省内存

android - 如何在android中测试振动功能?

android - 虚拟机上的 adb devices 未列出设备

安卓 6.0 棉花糖。无法写入 SD 卡

android - 从 Byte 扩展到 Int(Marshmallow 错误)

未授予 Android 权限

java - 如何在ArrayList中存储选定的复选框值

android - "Doze"到底做了什么?应用程序是否应该因此更改其代码?

android - 访问 ActivityResult 上的公共(public)下载文件 Android 28 Samsung Galaxy S9+ (Verizon)

java - 使用 android.content.Context.checkPermission 检查权限时出现空指针异常