在 Marshmallow 中给予 ACCESS_FINE_LOCATION 权限时信标检测停止

Beacon detection stops when giving ACCESS_FINE_LOCATION permission in Marshmallow

我在 BaseApplication class 中设置了 beacon 后台扫描 using this tutorial 但在 Marshmallow 运行 设备中它显示了这个日志:

Caught a RuntimeException from the binder stub implementation.
java.lang.SecurityException: Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission to get scan results

最后,借助 this and this 参考,我能够为 Marshmallow 运行 设备提供位置访问权限以检测信标。

我的问题:

即使我授予位置访问权限,它也不会检测到信标,并且还会停止显示上方的日志。是不是这个ISSUE中的问题。我的 Nexus 5 内部版本号是 MRA58N

更新: 当我手动打开位置时,它现在可以工作了。但这很奇怪。这是检测信标的正确方法吗?

Android Marshmallow 引入了全新的应用程序权限,用户现在可以随时撤销运行时权限。这意味着您不能假设该应用程序有权访问该权限,即使它之前已被授予。可以参考this lib or this guide。并且您可以创建一个接口侦听器位置在启用 GPS 后更改,当位置!= 0 时。启用 GPS 后您必须恢复。我希望这会帮助你。