uniapp中readblecharacteristicvalue需要与onblecharacteristicvaluechange一起使用吗?
在uniapp中使用蓝牙时,readBLECharacteristicValue和onBLECharacteristicValueChange这两个API需要配合使用吗?还是说它们各自有独立的功能?如果我想读取蓝牙设备的特征值并实时监听变化,应该怎么正确使用这两个API?
2 回复
不需要。readBLECharacteristicValue是主动读取特征值,onBLECharacteristicValueChange是监听特征值变化,两者功能独立,可单独使用。
在 UniApp 中,readBLECharacteristicValue 和 onBLECharacteristicValueChange 是两个独立的蓝牙 API,不需要强制一起使用,但通常结合使用以实现完整的蓝牙数据交互功能。以下是详细说明:
1. readBLECharacteristicValue
- 作用:主动读取蓝牙设备特定特征值(characteristic)的数据。
- 使用场景:当你需要手动触发读取操作时调用,例如点击按钮读取设备状态。
- 代码示例:
uni.readBLECharacteristicValue({ deviceId: '设备ID', serviceId: '服务UUID', characteristicId: '特征UUID', success: (res) => { console.log('读取成功'); }, fail: (err) => { console.error('读取失败', err); } });
2. onBLECharacteristicValueChange
- 作用:监听蓝牙设备特征值变化的事件。当特征值被设备主动推送或修改时触发。
- 使用场景:用于实时接收设备发送的数据(如传感器数据)。
- 代码示例:
uni.onBLECharacteristicValueChange((res) => { console.log('特征值变化', res.value); // 处理接收到的数据(res.value 为 ArrayBuffer 类型) const data = new Uint8Array(res.value); console.log('解析数据:', data); });
使用关系:
- 独立使用:
- 仅用
readBLECharacteristicValue:手动读取数据,但无法自动获取设备推送的更新。 - 仅用
onBLECharacteristicValueChange:监听数据变化,但需确保设备支持主动通知(需启用特征值的 NOTIFY 属性)。
- 仅用
- 结合使用:
- 先调用
readBLECharacteristicValue获取初始数据,再通过onBLECharacteristicValueChange监听后续变化。 - 典型流程:
- 连接设备并发现服务/特征。
- 启用特征值通知(使用
notifyBLECharacteristicValueChange)。 - 监听变化事件,并可选择性地主动读取数据。
- 先调用
注意事项:
- 确保蓝牙连接已建立,且特征值支持读取或通知属性。
- 数据格式为
ArrayBuffer,需转换为所需类型(如字符串、数值)。
总结:根据需求选择使用方式,若需实时数据更新,建议结合两者。

