uniapp的低功耗蓝牙API,监听蓝牙消息方法有缓存?监听到的消息是蓝牙设备上一次发送的?

uniapp + 苹果系统 + 低功耗蓝牙API,在IOS系统上出现一个问题。

连接上并给蓝牙设备发送wifi账号密码配网,配网成功后,蓝牙设备给uniapp发送消息,uniapp接收到的消息是蓝牙设备上一次发送的消息。

img

img

蓝牙设备端打印的日志是接收到wifi账号密码后6秒以后才给手机uniapp发送的信息,而uniapp在1秒内就接收到了信息,而此时蓝牙设备打印的日志显示并没有发送信息。而且即使蓝牙设备发送失败了,uniapp也能接收到消息,这是什么问题。

img

img

改用递归去重复监听蓝牙信息,也是不行。
就感觉uniapp的低功耗蓝牙API监听蓝牙信息有缓存是的,每一次监听到的信息是蓝牙设备上一次想uniapp发送的信息

以下是两次配网的日志截图(正确的wifi密码是:12345678)
1、第一次输入错误的密码,蓝牙设备还没有向uniapp发送蓝牙信息,uniapp却已经监听到 配网成功 的信息,而蓝牙设备日志记录的是配网失败信息,发送的也是配网失败,设备也显示状态为未连接。

img

img

img

img

2、第二次输入正确的wifi密码,蓝牙设备还没有向uniapp发送蓝牙信息,uniapp却已经监听到 配网失败 的信息,设备也显示状态为已连接。

img

img

img

可以尝试使用以下方法解决这个问题:

将蓝牙设备和手机连接后,在发送wifi账号密码前,先注册 onBLECharacteristicValueChange 事件监听。
在收到蓝牙设备发送的消息后,使用 uni.readBLECharacteristicValue 接口读取蓝牙信息。
在读取到信息后,使用 array.from 函数将接收到的信息从 Uint8Array 转换为字符串。
使用 setTimeout 函数等待一段时间后再读取蓝牙信息,以避免在并行调用多次时读取失败。