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)