39

我正在寻找一种从 Android 设备检测 iBeacon(iOS 7.0 功能)的方法。我阅读了 Android 文档,其中 iBeacon 似乎是某种发送其位置的 GATT 服务器。虽然 Android 文档说我不应该轮询该数据,但对于检测来说,这将是必要的。

我用谷歌搜索了很多,但这个主题很新(我什至创建了一个新标签),所以如果我能从 iOS 世界中获得一些描述实现的资源链接,我会很高兴。此外,如果有一些我还没有找到的 Android 库会很好。

4

3 回答 3

67

编辑:下面的库已移至此处:

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 字段。这是显示如何完成的代码:

https://github.com/RadiusNetworks/android-ibeacon-service/blob/master/src/com/radiusnetworks/ibeacon/IBeacon.java#L177-L231

于 2013-09-26T21:53:57.593 回答
2

这里唯一的问题是即使应用程序没有运行也能检测到信标。与 iOS7 不同,它不是原生支持的。在iOS7中,当你在你的BT上,当你进入注册的iBeacon区域时它会自动通知你。

我使用 IntentService 和 AlarmManager 在 Android 4.3 API 中实现了 iBeacon。每 30 秒进行一次扫描(为了节省电池电量,应该更长)。它适用于用户。只有当找到匹配的 uuid/major/minor 时,才会触发通知。否则,它将休眠并唤醒以再次扫描。

我认为这是您问题的解决方案。

于 2014-01-17T02:56:46.170 回答
0

我不太明白你的意思,你能提供指向你不应该轮询数据的文档的链接吗?

但在我看来,iBeacon 是作为服务器工作的,这对我来说有点有趣。不是要查找其他设备,而不是手机本身吗?

https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.position_quality.xml

这是它使用的特性。对我来说,听起来您正在寻找的设备是“信标”,而手机本身只是一个监听器。因此,您不会轮询 EHPE 和 EVPE 数据,但您应该实际收听它的更改或“广播”。

我自己对此也很陌生,找不到任何真正具体的文档。

不过,请注意,在我提供的链接中,右上角有下载链接,它将为您提供 PDF 格式的完整文档。在那里你可能会找到更多的答案。

于 2013-07-31T11:35:56.700 回答