结合Android 4.3的iBeacon蓝牙低功耗

我正在寻找从Android设备检测iBeacon(iOS 7.0function)的方法。 我阅读了Android文档,似乎iBeacon是某种发送它的位置的GATT服务器。 虽然Android的文件说,我不应该轮询这些数据,但为检测这将是nessesary。

我谷歌了很多,但这个话题是相当新的(我甚至创build了一个新的标签ibeacon ),所以我会很高兴,如果我得到一些链接从iOS世界描述的实施资源。 此外,如果有一些Android的库,我没有find,但会很好。

编辑:下面的图书馆现在已经被拿下来了,但是一个替代图书馆现在可以在这里find:

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


我已经将iOS7 iBeacon SDK移植到Android,并能够看到标准的iBeacons并估计它们的范围。 代码可以在这里find:

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

为了达到这个目的,你需要Android 4.3,它引入了低能量蓝牙API。 您还需要一个低能量蓝牙芯片组的设备。

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

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

唯一的办法就是检测信标,即使应用程序没有运行。 不像iOS7,它不是本地支持。 在iOS7中,当您使用BT时,当您进入注册的iBeacon区域时,它会自动通知您。

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

我认为这是你的问题的解决scheme。

我没有完全明白你的意思,你能提供一些文件链接,说你不应该轮询数据吗?

但在我看来,iBeacon是作为一个服务器,这对我来说很有趣。 是不是要find其他设备,而不是电话本身?

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

这是它使用的特征。 对我来说,这听起来像你正在寻找的设备是“信标”,手机本身只是一个听众。 所以你不会轮询EHPE和EVPE的数据,但你应该听听它的变化或“广播”。

我自己也是一个新的,也找不到任何具体的文件。

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