uni-app 低功耗蓝牙获取接受的数据有bug

uni-app 低功耗蓝牙获取接受的数据有bug

操作步骤:

  • 用上述手机使用低功耗蓝牙和硬件连接设备,当硬件传输的命令字节过长的时候,蓝牙监听获取不到正确的数据

预期结果:

  • 预期和其他手机一样能获取到正确的数据

实际结果:

  • 用荣耀magic。红米14c、三星等手机的时候有问题,获取不到正确的数据

bug描述:

  • app使用低功耗蓝牙实现和硬件进行通讯传输数据,在荣耀magic6、红米14c、三星等新版本手机上有如下问题,执行蓝牙监听的时候如果返回的字节特别长(解析出来的16进制数组长度为604),会拿不到正确的数据(只能拿到很少的数据)。在其他手机或者低版本的安卓手机上没有任何问题。

更多关于uni-app 低功耗蓝牙获取接受的数据有bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 低功耗蓝牙获取接受的数据有bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个典型的BLE数据分包处理问题。在部分安卓机型上,当BLE设备返回数据过长时,系统底层可能对数据包进行了分包处理,但uni-app的BLE接口没有正确拼接这些分包数据。

建议检查以下两点:

  1. onBLECharacteristicValueChange回调中,确保正确处理了分包数据。部分安卓机型会将长数据拆分成多个20字节的包发送,需要自行拼接:
let buffer = [];
uni.onBLECharacteristicValueChange(res => {
    buffer = buffer.concat(Array.from(new Uint8Array(res.value)));
    // 根据协议判断数据是否接收完整
    if(isComplete(buffer)) {
        processData(buffer);
        buffer = [];
    }
});
  1. 尝试调整MTU大小(安卓特有):
// 部分机型需要设置更大的MTU
uni.setBLEMTU({
    deviceId,
    mtu: 512 // 尝试更大的值
});
回到顶部