uniapp onblecharacteristicvaluechange事件如何使用
在uniapp中使用蓝牙时,onBLECharacteristicValueChange事件应该如何正确监听?我按照文档调用了uni.onBLECharacteristicValueChange方法,但收不到设备返回的数据。请问这个事件是否需要先启用notify或indicate?回调函数的参数具体包含哪些信息?能否提供一个完整的示例代码,包括初始化、监听和数据处理的全流程?
2 回复
在 UniApp 中,onBLECharacteristicValueChange 是一个蓝牙低功耗(BLE)特征值变化的事件监听器,用于接收蓝牙设备特征值(Characteristic)数据更新的通知。以下是使用步骤和示例代码:
使用步骤:
- 初始化蓝牙模块:使用
uni.openBluetoothAdapter。 - 监听特征值变化:通过
uni.onBLECharacteristicValueChange注册事件。 - 启用特征值通知:使用
uni.notifyBLECharacteristicValueChange启用设备通知。 - 处理接收的数据:在事件回调中解析特征值数据(通常为 ArrayBuffer 格式)。
示例代码:
// 1. 初始化蓝牙模块
uni.openBluetoothAdapter({
success: (res) => {
console.log('蓝牙适配器打开成功');
startBLE(); // 开始蓝牙操作
},
fail: (err) => {
console.error('蓝牙适配器打开失败:', err);
}
});
function startBLE() {
// 2. 监听特征值变化事件
uni.onBLECharacteristicValueChange((res) => {
console.log('特征值变化:', res);
// res 包含 deviceId、serviceId、characteristicId、value(ArrayBuffer)
const value = res.value;
// 将 ArrayBuffer 转换为十六进制字符串或处理数据
const hexString = Array.from(new Uint8Array(value))
.map(b => b.toString(16).padStart(2, '0'))
.join('');
console.log('接收数据:', hexString);
});
// 3. 启用特征值通知(需已连接设备并发现服务)
uni.notifyBLECharacteristicValueChange({
deviceId: '设备ID', // 替换为实际设备ID
serviceId: '服务UUID', // 替换为实际服务UUID
characteristicId: '特征UUID', // 替换为实际特征UUID
state: true, // 启用通知
success: () => {
console.log('启用特征值通知成功');
},
fail: (err) => {
console.error('启用通知失败:', err);
}
});
}
注意事项:
- 确保设备已连接(使用
uni.createBLEConnection)。 - 先发现服务(
uni.getBLEDeviceServices)和特征(uni.getBLEDeviceCharacteristics)。 - 特征必须支持
notify或indicate属性。 - 数据格式需根据设备协议解析(如十六进制、UTF-8)。
如有问题,提供更多细节(如设备协议)可进一步调试。


