我正在寻找一种从Android设备检测iBeacon(iOS 7.0功能)的方法。我阅读了Android文档,其中iBeacon似乎是某种发送其位置的GATT服务器。尽管Android文档说我不应该轮询该数据,但是为了进行检测,这是必要的。
我经常用Google搜索,但是这个主题是相当新的(我什至创建了一个新标签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格式的完整文档。在那里您可能会找到更多答案。