uni-app 蓝牙中的服务INDICATE NOTIFY这两个 INDICATE操作不了 NOTIFY能开启成功 收不到蓝牙返回数据
uni-app 蓝牙中的服务INDICATE NOTIFY这两个 INDICATE操作不了 NOTIFY能开启成功 收不到蓝牙返回数据
| 信息类别 | 信息内容 |
|---|---|
| 产品分类 | uniapp/App |
| PC开发环境 | Mac |
| PC版本号 | macos 15.6 |
| HBuilderX | 正式 |
| HBuilderX版本号 | 4.75 |
| 手机系统 | Android |
| 手机版本号 | Android 15 |
| 手机厂商 | 小米 |
| 手机机型 | Readmi K70 Ultra |
| 页面类型 | vue |
| vue版本 | vue2 |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
操作步骤:
uni.notifyBLECharacteristicValueChange({
state: true,
deviceId: this.connectDeviceInfo.deviceId,
serviceId: item.serviceId,
characteristicId: item.uuid,
success: (res) => {
console.log('notify开启成功', res);
}
})
uni.onBLECharacteristicValueChange(res => {
console.log('正式通知开启成功》》》》》》》', bufferTohex(res.value));
})
// 发送蓝牙数据
uni.writeBLECharacteristicValue({
deviceId,
serviceId: this.bluetoothInfo?this.bluetoothInfo.serviceId:writeIds[index].serviceId,
characteristicId: this.bluetoothInfo?this.bluetoothInfo.writeId:writeIds[index].uuid,
value: buffer,
writeType: this.system == 'ios'?'write':'writeNoResponse',
success: (res) => {
console.log('写入成功--', data);
resolve(this.connectDeviceInfo)
},
fail: (err) => {
console.log(err);
console.log('写入失败------', index);
reject(err)
}
})
预期结果:
可以收到蓝牙设备回复数据
uni.onBLECharacteristicValueChange(res => {
console.log('正式通知开启成功》》》》》》》', bufferTohex(res.value));
})
实际结果:
没有收到蓝牙设备回复数据
bug描述:
蓝牙中的服务存在INDICATE, NOTIFY这两个,INDICATE操作不了,NOTIFY能开启成功,使用uni.notifyBLECharacteristicValueChange 提示服务开启成功,为蓝牙发送数据收不到蓝牙返回的通知消息。 如果服务中只有NOTIFY 为蓝牙发送数据可以收到蓝牙返回的通知消息

更多关于uni-app 蓝牙中的服务INDICATE NOTIFY这两个 INDICATE操作不了 NOTIFY能开启成功 收不到蓝牙返回数据的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于uni-app 蓝牙中的服务INDICATE NOTIFY这两个 INDICATE操作不了 NOTIFY能开启成功 收不到蓝牙返回数据的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个典型的蓝牙特征值属性配置问题。从你的描述和截图来看,INDICATE和NOTIFY特征值都有,但只有NOTIFY能正常工作,这通常与特征值的属性配置有关。
问题分析:
- INDICATE操作失败可能是因为该特征值缺少写入权限或配置错误
- NOTIFY能开启但收不到数据,可能是设备端没有正确发送通知数据
解决方案:
-
检查特征值属性:
- 确认INDICATE特征值是否支持写入操作
- 检查NOTIFY特征值的属性配置是否正确
-
优化NOTIFY监听代码:
// 在连接成功后立即设置监听 uni.onBLECharacteristicValueChange((res) => { console.log('收到蓝牙数据:', bufferTohex(res.value)); }); // 开启通知 uni.notifyBLECharacteristicValueChange({ state: true, deviceId: this.connectDeviceInfo.deviceId, serviceId: item.serviceId, characteristicId: item.uuid, success: (res) => { console.log('NOTIFY开启成功'); }, fail: (err) => { console.error('NOTIFY开启失败:', err); } });

