解决低功耗蓝牙接受不到信息uni.onBLECharacteristicValueChange()不触发问题

696 阅读1分钟

公司项目有个app有个低功耗蓝牙接受信息的一个功能,蓝牙模块甲方已经发过来了,一开始还是比较顺利的,界面和蓝牙连接都已经顺利完成,主要是接受信息功能。

第一肯定要uni.getBLEDeviceServices()获取低功耗蓝牙的服务然后再进入特征值,连接成功后开始消息监听。刚开始测试时偶尔会接受到信息。我以为是设备问题,甲方说是1秒发一次消息,而且不间断的发。给的测试工具完全正常接受信息。肯定是我哪里做错了。

我排查错误后发现uni.onBLECharacteristicValueChange()会经常不触发的问题,在网上搜索了一下发现很多人有类似的问题,有的说开启notifiy但是我已经开启该功能

image.png 然后我就把做了一个测试按钮把uni.onBLECharacteristicValueChange()点一次让它触发一次,发现蓝牙连接后只要没收到信息,不管怎么点击都不会有触发。

最后排查到进入特征值时会有三个uuid,我开始的做法是随便进入其中一个特征值。然后我就指定进入其中一uuid,发现1800和1801这个号是不会触发uni.onBLECharacteristicValueChange(),只有3CD00才会触发。在网上查了一下发现而1800和1801服务UUID为TI蓝牙协议栈的GATT层服务。

image.png

所以要让uni.onBLECharacteristicValueChange()触发必须要进入特定的UUID值,不然连接和会随机进入,有很大机率是接收不到发过来的信息。