我想大家都和我一样在蓝牙4.0开发中遇到不知道多少坑,特别是设备的适配问题。好了,废话也不多说直接上干货。
4.0开发主要分为一下几步
1.我门首先要来判断设备是否支持4.0android是在4.3的时候才开始支持4.0的。
这里我的是把判断是否支持4.0和是否开启放到一起的,因为只有两个都满足我们才能执行下一步。
这些对象建议设置成全局的,因为不知道在判断的时候我们要用,后面都要用
privateBluetoothManagerbluetoothManager;
privateBluetoothAdapterbluetoothAdapter;
privateBluetoothGattbluetoothGatt;
2.设备支持并已经开启,那我们就开始扫描设备
调用扫描方法因为我们是4.0开发所以调用的是startLeScan这个是只扫描4.0设备
调用扫描之后,会把扫描的设备通过回调给我返回
bluetoothDevice就是们会扫描到的设备
i 代表的是设备的信号强度
bytes代表的是广播
我们可以通过bluetoothDevice获得很多设备信息
bluetoothDevice.getAddress() 获得设备的地址(获得地址到时连接要用)
(链接成功后就要停止扫描,或者根据自己的需求停止)
3.当你获得设备的地址之后就可以连接设备了
adress就是刚才获得的地址
false是代表断开后不重新连接
连接成功后会回调bluetoothGattCallback
4.连接以后进行数据的读取和写入
在newBluetoothGattCallback(){}里很多方法
onConnectionStateChange里面我们执行发现服务的操作gatt.discoverServices()
里面还有很多方法
当发现服务完成之后就会回调下的方法
在这里我就可以gatt.getServices();获得所有的服务然后通过服务在获得所以的特征
两个for循环分别获得的是服务的uuid和特征的uuid我这里是把获得的uuid添加到list集合为了显示,你门可以根据自己的需求来做处理,(uuid就是我读写每一个特征的标记)
如果你要读取某一个uuid (必须是特征的)调用
gatt.readCharacteristic(characteristic);
这里的characteristic就包含这你要读取的uuid characteristic.getUuid();要和你想获取的相同才可以。
当你调用读取之后会回调下面的方法
onCharacteristicRead
在这个可以通过getValue或得值,当然获得的值是二进制数据,需要转换
这里最好在判断一下uuid是否是你要读去的uuid在getValue
读去说完现在我们来说写入值
5.写入值
写入比读取要简短一下
characteristic.setValue(这里是你要写入的值(必须是二进制));
gatt.writeCharacteristic(characteristic);//值添加完成之后调用这个
当调用写入的时候会回调
在这里面调用characteristic.getValue()可以获得你写入的值,判断是否相同就可以知道是否写入成功
6.最后
我们肯定是要关闭扫描断开蓝牙
bluetoothGatt.close();
周期我发布一个帮助蓝牙4.0开发的工具,但是现在网址域名还没备案完成暂时不发布,到时候,会把地址填写在下面,如果你是大神请绕行!谢谢