前言
最近在研究低功耗蓝牙的项目
需求是把设备通过蓝牙传输文件升级
问题
Android Ble与终端设备进行大量数据交互时(如终端升级)发送中状态断开
升级文件大概100多kb 蓝牙mtu最大设置为128+约定位
每100ms发送一次也要发送1,2分钟才可以完成全部发送
在发送过程中 发送10帧以后 蓝牙自动断开 百思不得其解
查阅资料后得知 需要配合ble设置 连接优先级
ble 中requestConnectionPriority这个方法 修改设备连接参数 设置优先级
CONNECTION_PRIORITY_BALANCED :0
默认的值
,ble建议的设备连接参数
对应的连接时间间隔取值范围为:30ms–50ms(24–40个单位)。
对应的从机延时取值为:0ms(0个单位)
对应的监控超时取值为:20s();
CONNECTION_PRIORITY_HIGH:1
连接快的值
,当需要跟设备进行大的数据传输时设置该值,当传输完成后需要设置为
对应的连接时间间隔取值范围为:11.25ms–15ms(9–12个单位)。
对应的从机延时取值为:0ms(0个单位)
对应的监控超时取值为:20s();
CONNECTION_PRIORITY_LOW_POWER:2
低功耗值
对应的连接时间间隔取值范围为:100ms–125ms(80–100个单位)。
对应的从机延时取值为:2.5ms(2个单位)
对应的监控超时取值为:20s(以10ms为一个单位);
解决
在Ble连接成功后 我们可以拿到这个蓝牙的对象和BluetoothGatt
特征
requestConnectionPriority方法就可以使用gatt直接调用
gatt.requestConnectionPriority(BluetoothGatt.CONNECTION_PRIORITY_HIGH);
设置这个优先级后 传输1000多次的蓝牙协议 不再丢失蓝牙连接状态!!