将iBeacon蓝牙低能耗与Android 4.3相结合

时间:2013-07-26 07:28:45

标签: android ios7 bluetooth-lowenergy ibeacon ibeacon-android

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

我谷歌很多,但这个话题很新(我甚至创建了一个新标签)所以如果我从iOS世界获得一些描述实现的资源链接,我会很高兴。此外,如果有一些我没有找到的Android库,那将是不错的。

3 个答案:

答案 0 :(得分:67)

编辑:下面的图书馆已被删除,但现在可以在此处找到替换库:

https://github.com/AltBeacon/android-beacon-library


我已将iOS7 iBeacon SDK移植到Android,并能够看到标准iBeacons并估算其范围。代码可在此处获取:

https://github.com/RadiusNetworks/android-ibeacon-service

要实现这一点,您需要安装了低能耗蓝牙API的Android 4.3。您还需要一个具有低能量蓝牙芯片组的设备。

如果您不想使用上面的完整库,您可以自己动手。 iBeacons只是每秒发送一次BLE广告,以一个已知的字节序列开始。您只需要告诉Android进行BLE扫描,获取每个广告,并查找以已知的iBeacon字节序列开头的广告。然后,您可以解析出iBeacon字段。以下是显示如何完成此操作的代码:

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:0)

我没有明白你的意思,你能否提供指向不应该轮询数据的文件的链接?

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

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

这是它使用的特征。对我而言,您所寻找的设备听起来就像是“信标”而手机本身只是一个倾听者。因此,您不会轮询EHPE和EVPE数据,但您应该实际听取它的更改或“广播”。

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

但是,请注意,在我提供的链接中,顶部有一个下载链接,它将为您提供PDF格式的完整文档。那里你可能会找到更多的答案。