0

鉴于设备的RSSI和校准传输功率,我正试图获得BLE设备的估计范围。Android BLE iBeacon广告数据包大于预期

校准后的txPower被认为是外设iBeacon广告数据包中的最后一个字节。根据我发现的文档,这些数据包的长度应为30个字节。

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

为什么会发生这种情况,有什么方法可以解密62字节数据包的格式?

回答

0

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

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

对于100%的可靠性,您必须解析出所有的PDU,查找制造商广告,并查看其中的字节。我在编写Android Beacon Library时学到了这个难题。它是开源的,所以即使你想推出自己的扫描,最好看看它是如何做到的。

+0

这很奇怪。有没有更简单的方法来获得校准的外设txPower?校准常数是广告中我所需要的。 – Orbit

+0

您必须从广告的字节中获取常量。比解析PDU更简单的解决方案是搜索静态iBeacon前缀的字节模式,然后根据偏移从那里找到校准常量。这种方法的缺点是字节序列可能(偶然)也出现在广告的其他地方,导致该技术失败。 – davidgyoung