我正在寻找一种从 Android 设备检测 iBeacon(iOS 7.0 功能)的方法。我阅读了 Android 文档,其中 iBeacon 似乎是某种发送其位置的 GATT 服务器。虽然 Android 文档说我不应该轮询该数据,但对于检测来说,这将是必要的。
我用谷歌搜索了很多,但这个主题很新(我什至创建了一个新标签ibeacon),所以如果我能从 iOS 世界中获得一些描述实现的资源链接,我会很高兴。此外,如果有一些我还没有找到的 Android 库会很好。
我正在寻找一种从 Android 设备检测 iBeacon(iOS 7.0 功能)的方法。我阅读了 Android 文档,其中 iBeacon 似乎是某种发送其位置的 GATT 服务器。虽然 Android 文档说我不应该轮询该数据,但对于检测来说,这将是必要的。
我用谷歌搜索了很多,但这个主题很新(我什至创建了一个新标签ibeacon),所以如果我能从 iOS 世界中获得一些描述实现的资源链接,我会很高兴。此外,如果有一些我还没有找到的 Android 库会很好。
编辑:下面的库已移至此处:
https://github.com/AltBeacon/android-beacon-library
我已将 iOS7 iBeacon SDK 移植到 Android,并且能够看到标准 iBeacon 并估计它们的范围。该代码可在此处获得:
https://github.com/RadiusNetworks/android-ibeacon-service
为此,您需要引入了低功耗蓝牙 API 的 Android 4.3。您还需要具有低功耗蓝牙芯片组的设备。
如果你不想使用上面的完整库,你可以自己滚动。iBeacon 只需每秒发送一次 BLE 广告,该广告以已知的字节序列开始。您只需告诉 Android 进行 BLE 扫描,获取每个广告,并寻找以已知 iBeacon 字节序列开头的广告。然后,您可以解析出 iBeacon 字段。这是显示如何完成的代码:
这里唯一的问题是即使应用程序没有运行也能检测到信标。与 iOS7 不同,它不是原生支持的。在iOS7中,当你在你的BT上,当你进入注册的iBeacon区域时它会自动通知你。
我使用 IntentService 和 AlarmManager 在 Android 4.3 API 中实现了 iBeacon。每 30 秒进行一次扫描(为了节省电池电量,应该更长)。它适用于用户。只有当找到匹配的 uuid/major/minor 时,才会触发通知。否则,它将休眠并唤醒以再次扫描。
我认为这是您问题的解决方案。
我不太明白你的意思,你能提供指向你不应该轮询数据的文档的链接吗?
但在我看来,iBeacon 是作为服务器工作的,这对我来说有点有趣。不是要查找其他设备,而不是手机本身吗?
这是它使用的特性。对我来说,听起来您正在寻找的设备是“信标”,而手机本身只是一个监听器。因此,您不会轮询 EHPE 和 EVPE 数据,但您应该实际收听它的更改或“广播”。
我自己对此也很陌生,找不到任何真正具体的文档。
不过,请注意,在我提供的链接中,右上角有下载链接,它将为您提供 PDF 格式的完整文档。在那里你可能会找到更多的答案。