Android BLE iBeacon 广告包大于预期

Posted

技术标签:

【中文标题】Android BLE iBeacon 广告包大于预期【英文标题】:Android BLE iBeacon advertisement packet larger than expected 【发布时间】:2016-11-29 00:54:02 【问题描述】:

考虑到设备的 RSSI 和校准的传输功率,我正在尝试获取 BLE 设备的估计范围。

校准的 txPower 应该作为外围 iBeacon 广告数据包中的最后一个字节发出。根据我找到的文档,这些数据包的长度应为 30 个字节。

但是,为数据包返回的byte[] 的长度为 62 字节。因此,广告数据的格式是未知的。

为什么会发生这种情况,有没有办法破译 62 字节数据包的格式?

【问题讨论】:

【参考方案1】:

扫描 BLE 设备时,Android API 不仅返回原始广告 PDU 的字节,还返回扫描响应 PDU。 后者在字节数组中附加到前者的末尾由扫描 API 返回。

因此,如果字节数组访问信标字段,则不能可靠地使用从末尾开始的负偏移量。从一开始就使用正偏移量更可靠,但如果在制造商广告 PDU 之前插入不寻常的 PDU(这是您关心的那个),即使这样也可能失败。

为了 100% 的可靠性,您必须解析所有 PDU,找到制造商广告之一,然后查看其中的字节。我在写android Beacon Library 时很难学到这一点。它是开源的,所以即使你想自己进行扫描,看看它是如何做到的也是一个好主意。

【讨论】:

这很奇怪。有没有更简单的方法来获得外设的校准 txPower?校准后的常数是我真正需要的广告。 您必须从广告的字节中获取常量。比解析 PDU 更简单的解决方案是搜索静态 iBeacon 前缀的字节模式,然后根据从那里的偏移量找到校准常数。这种方法的缺点是字节序列可能(偶然)也出现在广告的其他地方,导致技术失败。

以上是关于Android BLE iBeacon 广告包大于预期的主要内容,如果未能解决你的问题,请参考以下文章

Cordova:在后台模式下扫描 iBeacons / BLE(iOS 和 Android)

iBeacon 广告 - 测量。功率/发射功率以确定与 iBeacon 的大致接近程度?

android蓝牙4.0(BLE)开发之ibeacon初步

android蓝牙4.0(BLE)开发之ibeacon初步

Android IBeacon

Android 开发中 iBeacon的使用