我正在开发一个应用程序,它扫描范围内的信标并向用户显示信标的数据。我使用的是Android蓝牙LE 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
答案 0 :(得分:1)
蓝牙数据包被分解为所谓的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")
0时 (缓冲填充)