蓝牙低功耗(BLE)是在Android在4.3(API 18)中引入的。与经典蓝牙相比具有低延迟、低功耗、低吞吐量等优点。蓝牙通信之间遵循主从关系。
GATT(Generic Attribute PRofile):GATT配置文件作为通用规范,用于在ble链路上发送和接收数据块。配置文件是设备如何在特定的应用程序中工作的规格说明。一个设备可以实现多个配置文件。
ATT(Attribute Protocol):每个属性通过一个唯一的统一标识符(UUID)来实现,每个String类型的UUID使用128 bitb标准格式。
Service:是Characteristic的集合,每个Service代表从机的一种能力。
Characteristic:一个Characteristic包括一个单一的变量和N个用来描述Characteristic变量的Descriptor。
Descriptor:用来描述Characteristic变量的属性。
注: Profile可以理解成一种规范,存在于从机中,一个低功耗蓝牙可以包括多个Profile。 通过UUID可以直接找到对应的Service; 通过UUID可以直接找到对应的Characteristic; 通过UUID可以直接找到对应的Descripter;
问题: 蓝牙低功耗单次发送的数据量大于 20 字节, Android 只能接收前20个字节的数据,后面的数据将会丢失 。
解决方案:分包发送 分包发送时不要在当前线程做阻塞处理。并且一定要在上次发送数据成功写入(onCharacteristicWrite()回调执行)之后再去进行第二次写操作,否则第二次写操作将会失败。
问题:有时设备无法连接蓝牙? 解决方案: 1) 主端一次性可同时连接6-7个蓝牙设备进行通信,因此可能是中心设备连接的设备数过多。 2) GATT连接是独占的,一次只能被一个中心设备连接,一旦被连接,该外设会停止广播,因此周围设备是否已经被其他中心设备所连接。
问题: Android4.4的蓝牙回调不在主线程。 解决方案:更新界面时,需切换到主线程。
Android M中必须拥有定位权限才能扫描BLE设备。
新闻热点
疑难解答