uni-app BLE蓝牙通讯 notify在安卓上不生效,IOS正常

uni-app BLE蓝牙通讯 notify在安卓上不生效,IOS正常

项目信息 详细信息
产品分类 uniapp/App
PC开发环境操作系统 Mac
PC开发环境操作系统版本号 12.3
HBuilderX类型 正式
HBuilderX版本号 3.4.7
手机系统 Android
手机系统版本号 Android 12
手机厂商 华为
手机机型 nova6se
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

预期结果:


实际结果:


bug描述:

同样的设备环境,安卓上没法监听到notify的数据变化 IOS则正常,我看好久前就有人咨询这个问题,编译为微信小程序也是ios正常 安卓不能监听,换了多个安卓设备都是这样


更多关于uni-app BLE蓝牙通讯 notify在安卓上不生效,IOS正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

read是正常的 就是notify不响应

更多关于uni-app BLE蓝牙通讯 notify在安卓上不生效,IOS正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html


我刚好相反,安卓正常的,在ios里 read正常,notify没反应。。

uni-app 中使用 BLE 蓝牙通讯时,notify 在安卓设备上不生效,但在 iOS 上正常,这可能是由于安卓和 iOS 在蓝牙实现上的差异导致的。以下是一些可能的原因和解决方案:


1. 确保 notify 已正确启用

在安卓设备上,notify 特性需要手动启用。你可以使用 uni.writeBLECharacteristicValue 方法向特征值写入 1 来启用 notify

uni.writeBLECharacteristicValue({
  deviceId: deviceId, // 设备 ID
  serviceId: serviceId, // 服务 UUID
  characteristicId: characteristicId, // 特征 UUID
  value: new Uint8Array([1]).buffer, // 启用 notify
  success: (res) => {
    console.log('Notify 已启用', res);
  },
  fail: (err) => {
    console.error('启用 Notify 失败', err);
  }
});

2. 检查特征值是否支持 notify

确保你使用的特征值(Characteristic)支持 notifyindicate 特性。可以通过 uni.getBLEDeviceCharacteristics 方法获取特征值的属性,检查其 properties 是否包含 notify

uni.getBLEDeviceCharacteristics({
  deviceId: deviceId,
  serviceId: serviceId,
  success: (res) => {
    const characteristics = res.characteristics;
    characteristics.forEach((char) => {
      if (char.properties.notify) {
        console.log('特征值支持 notify:', char.uuid);
      }
    });
  },
  fail: (err) => {
    console.error('获取特征值失败', err);
  }
});

3. 监听 onBLECharacteristicValueChange 事件

在启用 notify 后,需要通过 uni.onBLECharacteristicValueChange 监听特征值的变化。

uni.onBLECharacteristicValueChange((res) => {
  console.log('收到特征值变化:', res.value);
});

4. 安卓设备的兼容性问题

安卓设备在蓝牙实现上可能存在兼容性问题,尤其是某些厂商的定制系统(如小米、华为等)。可以尝试以下方法:

  • 确保设备蓝牙版本支持 BLE。
  • 检查设备是否开启了蓝牙权限。
  • 尝试重启设备或重新连接蓝牙。

5. 调试日志

在开发过程中,可以通过 uni.getSystemInfo 获取设备信息,确认设备型号和系统版本,以便更好地定位问题。

uni.getSystemInfo({
  success: (res) => {
    console.log('设备信息:', res);
  }
});
回到顶部