一、蓝牙广播包的分类:
BEL蓝牙广播,有四种基本类型的广播包(也有扩展的),总结如下
(1)可连接、非定向的广播
这种广播,可以接受对方的扫描请求(如果对方是主动扫描),可以接受对方的连接请求。
简单说,只要收到广播包,谁都可以发送扫描请求和连接请求。
(2)可连接、定向广播
这种广播,不接受对方的扫描请求,只接受对方的连接请求。通常这种广播包报文仅含广播者的地址和连接发起者的地址,对方收到地址后,可以快速建立连接。
简单说,这种广播只针对特定地址的设备。
(3)不可连接、非定向的广播
这种广播,不接受对方的扫描请求、不接受对方的连接请求。这个与原始的含义相近。
(4)可扫描、非定向广播
这种广播,可以接受对方的扫描请求,以便对方能够通过扫描请求获取到更多的信息。但是也仅此而已,不接受对方的连接请求。
ps: 什么是主动扫描,什么是被动扫描,两者区别?
主动扫描,指的是打开扫描窗口,接收到广播包之后, 会再发起一个扫描请求。而被动扫描,则不会发起扫描请求。
设备受到扫描请求之后,会回复scan_response。当广播包不足以表示完整信息时,可以通过scan_response来进行补充。
对方可以通过scan_request来进一步获取更多信息。
二、蓝牙广播包的结构
蓝牙广播包的结构:<len> <type> <data>,
len:占1个字节,是后面type和data的长度之和
type:占1个字节,数据的类型。见下图,常用的有0x01(发现标记),0x03(16位服务UUID),0x16(服务数据,16位UUID), 0xFF(厂家指定数据,苹果的ibeacon用的就是0xFF)
data:具体的数据
总长31个字节,可以包含多个 (len + type + data)
!!!注意:
(1)如果广播包是可连接的,包结构里面一定要包含type为1的标记数据,不然APP会连接不上
(2)扫描响应包里面不要加type为1的标记数据