android蓝牙使用总结
前几个月做了一个蓝牙项目,后面一直没有时间总结,这几天心血来潮,想来做个总结,一来为了以后自己用时直接拿来用,二来有方便想学习蓝牙朋友学习,好了,废话少说,进入主题:
1.加入权限
2.判断手机是否可用蓝牙
![](https://img.haomeiwen.com/i2783070/b55cfa2dd66fec57.png)
3.打开蓝牙
(1) 强制打开手机蓝牙
![](https://img.haomeiwen.com/i2783070/c01b17f8ae32e012.png)
![](https://img.haomeiwen.com/i2783070/091086208ab620ef.png)
(2) 跳到手机蓝牙页面手动打蓝牙
![](https://img.haomeiwen.com/i2783070/6859d132a84800fd.png)
![](https://img.haomeiwen.com/i2783070/9cd71ae5ed339437.png)
4.搜索周边蓝牙设备
![](https://img.haomeiwen.com/i2783070/f6f2c9be556057d5.png)
进入搜索蓝牙页面,开始蓝牙搜索:
![](https://img.haomeiwen.com/i2783070/6b7b8572e8bbd038.png)
![](https://img.haomeiwen.com/i2783070/a339a2690a193a0b.png)
开始蓝牙搜索后设一下监听回调方法mLeSenCallback,当搜索到有搜索时加入到蓝牙列表中;
![](https://img.haomeiwen.com/i2783070/194162dadc809a73.png)
5.蓝牙连接
点击蓝牙列表中任何一个设备进去蓝牙连接,蓝牙连接,蓝牙通讯我都写在一个UartService服务里面;下面看蓝牙连接代码:
![](https://img.haomeiwen.com/i2783070/6fca2acbd5ef8f62.png)
从以上代码可以看出,先要判断上次连接的蓝牙是否跟本次连接的蓝牙一样,如果一样的话就直接连接,方法为mBluetoothGatt.connect();不是一样的话就根据蓝牙地址得到蓝牙设备进行蓝牙连接,(device.connectGatt(this,false,mGattCallback)第二个参数,设为true时,表示蓝牙断开后会重动重连,设为false时,断开后不会重连)这里做一个蓝牙连接监听回调;
![](https://img.haomeiwen.com/i2783070/44d230a9cdac46b8.png)
这个方法监听连接状态的改变,连接状态有四个值:
值描述
STATE_CONNECTED 已连接
STATE_CONNECTING 正在连接
STATE_DISCONNECTED 断开连接
STATE_DISCONNECTING 正在断开连接
当设备已连接时,需要通过discoverServices()查找GATT服务,查找服务过程中会执行重写的第二个方法onServicesDiscovered。
onServicesDiscovered
可以在此方法中获取GATT的服务列表,这个服务列表中的每一个服务对应着一个BluetoothGattCharacteristic(用于通信)列表,需要对这个列表通过UUID过滤出我们想要的BluetoothGattCharacteristic,然后就可以拿这个BluetoothGattCharacteristic进行通信了。
关于 UUID
通用唯一标识符 (UUID) 是用于唯一标识信息的字符串 ID 的 128 位标准化格式。 UUID 的特点是其足够庞大,因此你可以选择任意随机值而不会发生冲突。 在此示例中,它被用于唯一标识应用的蓝牙服务。 要获取 UUID 以用于你的应用,你可以使用网络上的众多随机 UUID 生成器之一,然后使用 fromString(String) 初始化一个 UUID。不必过多纠结于UUID。
![](https://img.haomeiwen.com/i2783070/bcb2545aab4a9ad0.png)
bleGatt.setCharacteristicNotification(bleGattChar,true);//设置开启接收蓝牙数据
6.蓝牙写入数据(向蓝牙设备发送数据)
通过BluetoothGattCharacteristic对对象以及BluetoothGatt对象进行相关方法的调用就行,
![](https://img.haomeiwen.com/i2783070/86b186bdeda735e1.png)
7.蓝牙接收数据
此方法用于接收蓝牙模块发送过来的数据,它是异步的,
![](https://img.haomeiwen.com/i2783070/9ca4e07424251561.png)
![](https://img.haomeiwen.com/i2783070/48a5c82fa819d645.png)
蓝牙差不多就这些方法,先总结到这里,后面有的话会继续增加!!!