想要搞清楚这个问题,首先我们要明白 iBeacon
向外发送的最原始的广播包是什么样的?
首先我们要搞清楚一点,蓝牙在向外发送数据的时候是分成两个部分的一个就是普通的广播包还有一个叫做应答包。这是蓝牙协议的规定内容,针对于所有的蓝牙设备(iBeacon 只是蓝牙设备的一种)
-
普通的广播包格式是定义好的,长度为
30 byte
-
应答包中的内容是可以由 蓝牙的各个制造厂商自己向里面放数据的。最大长度是
32 byte
需要注意的是,发送数据是从低位到高位一次发送,所以接收到的数据要返回来按字节拼接,例如接收到的MAC为 8b 03 00 b0 01 c2,那么实际的MAC为 c2:01:b0:00:03:8b
蓝牙广播包
首先我们来看一下第一个蓝牙广播包(来自 iBeacon 设备),一共 59 个字节
04 3e 38 0d 01 13 00 01 8b 03 00 b0 01 c2 01 00 ff 7f af 00 00 00 00 00 00 00 00 00 1e 29个字节
02 01 06 1a ff 4c 00 02 15 fd a5 06 93 a4 e2 4f b1 af cf c6 eb 07 64 78 25 27 11 4c b9 c5 30个字节
第一行的内容可以认为是蓝牙广播包中的附带信息,通过 Android SDK 是没法看到的,第二行是对应我们 Android SDK 中收到的广播包中的前一部分。
第一个字节是HCI Packet Type,04表示这是HCI Event;剩下的58bytes则