这次说一下BLE的广播数据格式,也就是android扫描回调里面byte[] scanRecord这个参数:
先假设这次扫描到的结果是:
文章图片
上面的全部广播数据,就是byte[] scanRecord的所有数据,没有进过任何处理的。
下面的分析广播数据就是进过分析后的:有设备名,等等数据
每条广播数据格式是这样的:
长度(1byte) key值(1byte)数据(长度-1 byte)
也就是数据是这样的:
02 01 06(长度是02, key是01,数据是06)
03 FF 4D 54(长度是03, key是FF,数据是4D 54)
0C 09 4D 54 53 65 72 69 42 6C 65 30 34(长度是0C, key是09,数据是4D 54 53 65 72 69 42 6C 65 30 34)
11 06 10 01 64 43 00 C8 01 06 00 98 7B F3 58 E3 04 34(长度是11, key是06,数据是10 01 64 43 00 C8 01 06 00 98 7B F3 58 E3 04 34)
【android BLE从入门到精通开发2】这样一整条广播数据就分析完了,是不是感觉很简单?有些公司会利用这些数据进行一些加密。就需要这样解析了。
现在很火的IBeacon就是有一个这种广播数据,我们看一个IBeacon的例子:
文章图片
就以MTBeacon2A为例子:major、minor、Txpower、UUID这几个是IBeacon的标志性参数。
它的广播数据为:
文章图片
key为09的是名字字段
key为FF的是IBeacon字段:
4C 00 02 15(苹果公司信息) FD A5 06 93 A4 E2 4F B1 AF CF C6 EB 07 64 78 25 (UUID)27 12(major)21 1F(minor)C0(Txpower)
major是27 12,合成整数就是0x1227 ,就刚好是10002
minor是21 1F,合成整数就是0x1F21,就刚好是8479
Txpower是个有符号型数据,所以就是-64
广播数据格式就这么简单。有些公司会用些特定的数据段来代表是他们的产品,这样在做app时,扫描就可以把不是本公司的产品过滤掉,提升用户体验。
推荐阅读
- Android|Android Ble开发出现的问题
- nRF52 PWM 使用
- 微信硬件平台|微信硬件平台从入门到精通(服务器端)
- android BLE从入门到精通开发
- IOS BLE从入门到精通
- CC2640|蓝牙协议分析(8)_BLE安全机制之白名单