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

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

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

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

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

【问题讨论】:

    标签: bluetooth-lowenergy ibeacon android-bluetooth android-ble rxandroidble


    【解决方案1】:

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

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

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

    【讨论】:

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