GATT
GATT 连接是独占的。也就是一个 BLE 外设同时只能被一个中心设备连接。一旦外设被连接,它就会马上停止广播,这样它就对其他设备不可见了。当设备断开,它又开始广播。中心设备和外设需要双向通信的话,唯一的方式就是建立 GATT 连接。
整体流程
- 扫描设备
- 连接设备
- 蓝牙通信
- 发送notify
- 收到数据,放入queue中(其他线程对queue中数据进行解析)
- write写数据(每次最多20个字节,过了就会自动分包)
- 断开连接
- 释放资源
indicate和notify的区别
indicate是一定会收到数据,notify有可能会丢失数据。indicate底层封装了应答机制,如果没有收到中央设备的回应,会再次发送直至成功;而notify不会有central收到数据的回应,可能无法保证数据到达的准确性,优势是速度快。
Android BLE 蓝牙开发入门
Android BLE开发详解和FastBle源码解析
注意事项
- 判断当前Android设备是否支持BLE。Android 4.3以后系统中加入了蓝牙BLE的功能
- android 4.3 支持ble,并只支持作为central设备
- android 5.0 支持作为peripheral设备
- 系统6.0后需要位置权限(动态申请权限),否则无法使用
- 频繁扫描、停止扫描会出现问题(没有找到合适的办法,只能考虑app上交互控制,有个链接说需要硬件优化)
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/app/6205.html