uni.onBLECharacteristicValueChange接收到数据,返回的value为{}的原因及其获取方法
使用uniapp开发蓝牙时,发现uni.onBLECharacteristicValueChange接收到数据res.value为{}。
但是命令又是对的,并且在其他蓝牙测试工具上的返回也是对的,为什么返回的value为{}?
核心原因:value
本质是 ArrayBuffer,空对象是 “可视化误解”
通过 res.value.byteLength
判断二进制数据长度(非空则有数据),再转成 Uint8Array
或字符串查看具体内容:
uni.onBLECharacteristicValueChange(res => {const buffer = res.value;console.log("数据长度:", buffer.byteLength); // 若 >0,说明有数据if (buffer.byteLength > 0) {const uint8Arr = new Uint8Array(buffer); // 转成 Uint8Array 查看二进制值const hexStr = Array.from(uint8Arr, byte => byte.toString(16).padStart(2, '0')).join(''); // 转16进制字符串console.log("实际数据(16进制):", hexStr);}
});