您的位置:首页 > 其它

蓝牙流程

2016-07-15 11:49 225 查看

1、蓝牙搜索

ListBleScan类 搜索附近的蓝牙设备

onLeScan(List bleDeviceList, boolean isEnd)方法回调

UUIDBleScan类 根据具体设备UUID搜索

onFoundDeviceSuccess 搜索成功回调

onFoundDeviceFailed 搜索超时失败回调

2、蓝牙连接

HetBleManager 继承于BaseBleManager,对het的设备协议进行了封装

onConnectionStateChange (BluetoothGatt gatt, boolean connSuccess) 蓝牙连接回调 connSuccess=true则为连接成功

onServicesDiscovered(BluetoothGatt gatt, boolean success) 连接成功之后会去主动发现蓝牙服务之后会调用此方法,当success=true时,蓝牙才能真正进行通信。

发现服务成功之后,可以监听特征setCharacteristicNotification、读取特征toReadCharacteristic、发送蓝牙命令toWriteCharacteristic

3、断开设备

距离太远断开,APP能收到回调

BluetoothGatt.close() 不会收到回调

BluetoothGatt.disconnect() 会收到回调

注意事项

连接蓝牙设备和发现蓝牙服务都必须在主线程。

连接成功的标志以newState == BluetoothProfile.STATE_CONNECTED为准

连接成功,但是有可能发现服务失败。连接成功之后,发现服务的速度取决于设备BluetoothGattService和BluetoothGattCharacteristic数量多少。发现服务成功之后,APP与蓝牙设备才能进行通信。

toWriteCharacteristic、setCharacteristicNotification、toReadCharacteristic方法均有返回值,返回false,则设备响应失败。返回true 设备也不一定响应成功(安卓蓝牙的坑)。所以需要协议双方交互命令的ACK

鉴于安卓不同手机蓝牙连接问题表现不一样,提供了refreshDeviceCache和clearAllBondedDevices两个方法,可以刷新蓝牙缓存以及清除已绑定蓝牙设备,但是可能会引发其他问题。(慎用)

以上为个人经验总结,可能有所偏差 https://www.bluetooth.com/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  蓝牙