Android Bluetooth LE API onScanResult ScanRecord 字节含义

Android Bluetooth LE API onScanResult ScanRecord bytes meaning

我正在开发一款应用程序,用于扫描范围内的信标并向用户显示信标数据。我正在使用 Android 低功耗蓝牙 API。在 onScanResult() 方法中,我得到 ScanResult 对象,然后将其解析为原始字节。这是我从我的一个信标中得到的样本:

02:01:06:1A:FF:4C:00:02:15:74:27:8B:DA:B6:44:45:20:8F:0C:72:0E:AF:05:99:35:00:00:00:01:C5:02:0A:00:08:16:F0:FF:64:00:00:00:01:11:09:4D:69:6E:69:42:65:61:63:6F:6E:5F:33:36:38:35:30:00:00

我很容易找出第一部分的意思 - 它对应于 iBeacon 格式:

02:01:06:1A:FF:4C:00:02:15 - iBeacon prefix
74:27:8B:DA:B6:44:45:20:8F:0C:72:0E:AF:05:99:35 - UUID
00:00 - Major
00:01 - Minor
C5 - TX power

但我完全不知道其余的字节是什么。这些是某种制造商特定数据还是什么?它们可以用来获取任何有用的信息吗?

02:0A:00:08:16:F0:FF:64:00:00:00:01:11:09:4D:69:6E:69:42:65:61:63:6F:6E:5F:33:36:38:35:30:00:00

蓝牙数据包被分解成所谓的 PDU。 PDU 以一字节长度开始,后跟一字节类型。剩余字节的解释特定于 PDU 类型。

一些额外的数据是有意义的(主要是蓝牙名称),但大部分不是。

所以这些字节意味着:

02:0A:00 (标记 PDU。没有太大意义。)

08:16:F0:FF:64:00:00:00:01 (服务数据 PDU。服务 UUID:FFF0,服务数据:64:00:00:00:01)

11:09:4D:69:6E:69:42:65:61:63:6F:6E:5F:33:36:38:35:30 (完整的本地名称 PDU:"MiniBeacon_36850")

00:00 (缓冲区填充)