我问我之前提出的问题后续问题 - > http://stackoverflow.com/questions/33607410/background-monitoring-of-eddystone-beacon-using-altbeacon-library-on-android-pla/33613116?noredirect=1#comment55139316_33613116
我能够在前台和后台成功检测到信标,直到我发现当我尝试在运行android 6.0的nexus 5设备上运行它时,相同的代码无法检测到信标。 任何人都可以解释为什么会这样吗?感谢。
答案 0 :(得分:3)
Android 6.0为应用程序检测BLE信标提出了两项新要求:
必须在设置中启用位置服务。设置 - >位置 - >上。具体模式可以是"高精度"或"设备保存"。这是一项新要求,似乎正在推广到Google的所有固件版本。如果没有这个,BLE扫描就会发现没有设备。
必须由用户向ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION授予应用程序运行时权限。您必须对应用进行编码,以向用户提供其中一个权限请求。如果未授予,该应用将无法检测到BLE信标。
此过程的详细说明在我的博客文章中:Is Your Beacon App Ready For Android 6.0?
答案 1 :(得分:1)
使用Android 6.0,您现在需要在运行时请求位置权限才能发现信标。
从我们的初步测试:如果您的应用针对SDK< 23(即Android 6.0之前版本),您只需要这些权限即可在后台检测信标。如果您的应用定位SDK> = 23(即Android 6.0或更高版本),您将需要这些权限来检测后台和前台的信标。对于这两种情况,您还需要在Android 6.0设备上启用位置。
Google提供了有关如何实施检查和请求运行时权限的详细指南:
http://developer.android.com/training/permissions/requesting.html
具体而言,您需要ACCESS_FINE_LOCATION
或ACCESS_COARSE_LOCATION
。他们实际上都向用户显示了相同的消息(“允许APP_NAME访问您的位置?”)。