使用CH582开发的BLE Mesh在与自己写的APP进行LE连接后偶尔会断开连接,另外连接后已经启用了特征通知,经常会收不到特征改变通知,有时会反复连接并启用通知,看返回投诉通知启用成功了的,但是就是收不到特征变化的信息,有时又一直都没问题,都可以收到特征变化信息。感觉不稳定一样,希望提供一个解决方法,启用特征通知部分的代码完全和官方DEMO的方法一样
使用BLE调试助手连接试试看,如果连接没有问题定位问题在你的APP上;如果连接有问题,优先检查582代码情况。
连接都没问题,很顺畅,即使偶尔莫名其妙断开,然后就是连接上后很难收到特征改变的通知。
(BluetoothGattCharacteristic characteristicenabled) { (== || == ) { Log.()} (Build.VERSION.>= Build.VERSION_CODES.) { properties = characteristic.getProperties()((properties & BluetoothGattCharacteristic.) == ) Log.(+ characteristic.getUuid() + )(.setCharacteristicNotification(characteristicenabled)) { BluetoothGattDescriptor descriptor = characteristic.getDescriptor()(descriptor != ) { descriptor.setValue(enabled?BluetoothGattDescriptor.:BluetoothGattDescriptor.)Log.((enabled?:) + characteristic.getUuid())Log.(+ + ).writeDescriptor(descriptor)} } } }
(UUID serviceUUIDUUID charaUUIDenabled){ (== || == ) { Log.()} (Build.VERSION.>= Build.VERSION_CODES.) { BluetoothGattService bluetoothGattServices =.getService(serviceUUID)(bluetoothGattServices!=) { BluetoothGattCharacteristic mGattCharacteristic = bluetoothGattServices.getCharacteristic(charaUUID)(mGattCharacteristic != ) { setCharacteristicNotification(mGattCharacteristicenabled)} } } }
(enabled){ (!=&& !=) { UUID notifyService=getUUID(Constants.)UUID notifyChara=getUUID(Constants.)Toast.(+ notifyService ++notifyCharaToast.).show()setCharacteristicNotification(notifyServicenotifyCharaenabled)} }
这是我启用特征通知的代码。UUID用的是
1.异常断开连接的问题,断开时有错误码status的,可以看下错误码
2.在参考demo的基础上注意下,连接上后使用discoverService发现目标服务,尽量不要使用UUID直接获取。开启通知需要在主线程操作,使用handler.post切换到主线程即可。
如有问题可以通过邮箱zhangpc@wch.cn直接联系我
我是将BLE封装在服务里面的,UUID是连接后调用discoverService,然后在回调中获取。通知的启用时通过Handler发送消息的发送在主线程中启用,这种方式应该时主线程,而且联机调试下启用该通知后基本都可以收到特征改变的数据。
如果使用我们的DEMO没有问题的话,应该是您软件这边处理有问题。上面贴出的代码太少,无法定位问题。可以联系zhangpc@wch.cn或者微信 张工 13851192763,和技术人员确认下软件代码。