使用Android 4.3组合低功耗iBeacon蓝牙

问题描述 投票:39回答:3

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

我经常用Google搜索,但是这个主题是相当新的(我什至创建了一个新标签),因此,如果我从iOS世界获得一些描述实现的资源链接,我会很高兴。另外,如果我还没有找到一些Android库,那就太好了。

android ios7 bluetooth-lowenergy ibeacon ibeacon-android
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


2
投票

这里唯一的陷阱是即使应用程序未运行也要检测到信标。与iOS7不同,它不是本机支持。在iOS7中,当您使用BT时,当您输入注册的iBeacon的区域时,它将自动通知您。

我已经使用IntentService和AlarmManager在Android 4.3 API中实现了iBeacon。每30秒进行一次扫描(以节省电池电量,它应该更长一些)。对用户来说效果很好。仅当找到匹配的uuid / major / minor时,它才会触发通知。否则,它将进入睡眠状态并再次唤醒以进行扫描。

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


0
投票

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

但是在我看来,iBeacon充当服务器,这对我来说很有趣。这不是要找到其他设备,不是手机本身吗?

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

这是它使用的特征。在我看来,您所寻找的设备是“信标”,而电话本身只是一个听众。因此,您不会轮询EHPE和EVPE数据,但实际上应该收听它的更改或“广播”。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.