uni-app 5+蓝牙监听不到notify值
uni-app 5+蓝牙监听不到notify值
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
HBuilderX | 3.4.3 | 云端 |
操作步骤:
蓝牙监听:plus.bluetooth.onBLECharacteristicValueChange
5+上面notify值获取到的value是空,使用蓝牙工具是可以获取到的
尝试用uniapp也能获取到notify值
### 预期结果:
可以打印蓝牙设备传给手机的notify值
实际结果:
获取为value: {}
### bug描述:
5+蓝牙监听不到notify值
5+: onBLECharacteristicValueChange: {“deviceId”:“E8:31:CD:AC:53:96”,“serviceId”:“000000EE-0000-1000-8000-00805F9B34FB”,“characteristicId”:“0000EE01-0000-1000-8000-00805F9B34FB”,“value”:{}}
在使用 uni-app 进行 5+ 蓝牙开发时,如果无法监听到 notify
值,可能是由于以下几个原因导致的。以下是一些常见的排查步骤和解决方案:
1. 确保设备已连接并已启用通知
首先,确保蓝牙设备已成功连接,并且已启用通知(Notify)功能。你可以通过以下步骤来启用通知:
uni.writeBLECharacteristicValue({
deviceId: deviceId,
serviceId: serviceId,
characteristicId: characteristicId,
value: new Uint8Array([0x01]).buffer, // 启用通知
success: function (res) {
console.log('writeBLECharacteristicValue success', res);
},
fail: function (err) {
console.error('writeBLECharacteristicValue fail', err);
}
});
2. 监听 onBLECharacteristicValueChange
事件
确保你已经正确监听了 onBLECharacteristicValueChange
事件,该事件会在特征值发生变化时触发。
uni.onBLECharacteristicValueChange(function (res) {
console.log('characteristic value changed:', res.value);
});
3. 检查特征值是否支持通知
确保你正在监听的特征值(Characteristic)支持通知(Notify)功能。你可以通过 getBLEDeviceCharacteristics
方法获取特征值的属性,检查 properties
是否包含 notify
。
uni.getBLEDeviceCharacteristics({
deviceId: deviceId,
serviceId: serviceId,
success: function (res) {
console.log('getBLEDeviceCharacteristics success', res.characteristics);
res.characteristics.forEach(function (characteristic) {
if (characteristic.uuid === characteristicId) {
console.log('Characteristic properties:', characteristic.properties);
}
});
},
fail: function (err) {
console.error('getBLEDeviceCharacteristics fail', err);
}
});
4. 检查设备是否发送了通知
确保蓝牙设备确实发送了通知。你可以使用其他蓝牙调试工具(如 nRF Connect)来验证设备是否正常发送通知。
5. 检查权限和配置
确保你的应用已经获取了必要的蓝牙权限,并且在 manifest.json
中正确配置了蓝牙相关的权限。
{
"permissions": {
"bluetooth": {
"description": "蓝牙权限"
}
}
}