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 为蓝牙发送数据可以收到蓝牙返回的通知消息

![](https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20250816/0811f06f93a0ea782554803381744f29.png)

更多关于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能正常工作,这通常与特征值的属性配置有关。

问题分析:

  1. INDICATE操作失败可能是因为该特征值缺少写入权限或配置错误
  2. NOTIFY能开启但收不到数据,可能是设备端没有正确发送通知数据

解决方案:

  1. 检查特征值属性:

    • 确认INDICATE特征值是否支持写入操作
    • 检查NOTIFY特征值的属性配置是否正确
  2. 优化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);
        }
    });
回到顶部