uni-app 蓝牙onBLECharacteristicValueChange 没有响应

uni-app 蓝牙onBLECharacteristicValueChange 没有响应

产品分类

uniapp/App

属性
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 win10
HBuilderX类型 正式
HBuilderX版本号 3.3.8
手机系统 Android
手机系统版本号 Android 10
手机厂商 华为
手机机型 meta20
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

操作步骤

function ab2hex(buffer) {
const hexArr = Array.prototype.map.call(
new Uint8Array(buffer),
function (bit) {
return ('00' + bit.toString(16)).slice(-2)
}
)
return hexArr.join('')
}
uni.onBLECharacteristicValueChange(function (ress) {
console.log(`characteristic ${ress.characteristicId} has changed, now is ${ress.value}`)
console.log(ab2hex(ress.value))
})

更多关于uni-app 蓝牙onBLECharacteristicValueChange 没有响应的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

IOS 可以正常写入和监听,安卓就不行!

更多关于uni-app 蓝牙onBLECharacteristicValueChange 没有响应的实战教程也可以访问 https://www.itying.com/category-93-b0.html


同样情况,问题解决了么?

我刚好相反,安卓能正常读写,但是ios只能写 缺监听不到任何数据。。

回复 Azikou: 问题解决了吗?我这边也是安卓能正常读写,但是ios有时会会调用不了

onBLECharacteristicValueChange 能监听到,就是不返回数据。

根据你提供的信息,onBLECharacteristicValueChange 没有响应的最常见原因是没有先调用 uni.notifyBLECharacteristicValueChange 来启用特征值通知(notify)或指示(indicate)。

关键步骤缺失:
在连接设备、获取服务(getBLEDeviceServices)、获取特征值(getBLEDeviceCharacteristics)之后,必须对该特征值执行 notifyBLECharacteristicValueChange 并设置 statetrue,才能触发 onBLECharacteristicValueChange 的回调。

典型流程示例(简化):

// 1. 连接设备
uni.createBLEConnection(deviceId);
// 2. 获取服务
uni.getBLEDeviceServices({ deviceId, success: (res) => {
  // 找到你的服务
  const serviceId = res.services[0].uuid;
  // 3. 获取特征值
  uni.getBLEDeviceCharacteristics({ deviceId, serviceId, success: (res) => {
    // 找到需要监听的通知特征值
    const characteristicId = res.characteristics[0].uuid;
    // 4. ★ 启用通知(必须调用,否则不会触发回调)
    uni.notifyBLECharacteristicValueChange({
      deviceId,
      serviceId,
      characteristicId,
      state: true,  // 启用
      success() {
        console.log('notify enabled');
        // 5. 现在监听才有用
        uni.onBLECharacteristicValueChange((res) => {
          console.log('值变了', res.value);
        });
      }
    });
  }});
}});
回到顶部