1

我要对我之前提出的问题提出后续问题-> 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 设备上运行相同的代码时无法检测到信标。谁能解释为什么会这样?谢谢。

4

2 回答 2

3

为了让应用检测 BLE 信标,Android 6.0 提出了两个新要求:

  1. 必须在设置中打开定位服务。设置 -> 位置 -> 开启。具体模式可以是“高精度”或“设备节省”。这是一项新要求,似乎正在向 Google 的所有固件版本推出。如果不启用此选项,BLE 扫描不会发现任何设备。

  2. 用户必须为应用授予ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION 的运行时权限。您必须对您的应用程序进行编码以向用户呈现这些权限请求之一。如果未授予,应用程序将无法检测 BLE 信标。

这个过程的详细解释在我的博客文章中:你的 Beacon 应用程序准备好用于 Android 6.0 了吗?

于 2015-11-13T11:59:32.400 回答
1

在 Android 6.0 中,您现在需要在运行时请求位置权限才能发现信标。

从我们最初的测试来看:如果您的应用针对 SDK < 23(即 Android 6.0 之前的版本),您将只需要这些权限即可在后台检测信标。如果您的应用面向 SDK >= 23(即 Android 6.0 或更高版本),您将需要这些权限来检测后台和前台的信标。对于这两种情况,您还需要在 Android 6.0 设备上启用位置信息。

谷歌有一个关于如何实现检查和请求运行时权限的详细指南:

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

具体来说,您需要ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION。它们实际上都向用户显示相同的消息(“允许 APP_NAME 访问您的位置?”)。

于 2015-11-13T10:56:08.207 回答