uni-app uni.notifyBLECharacteristicValueChange(OBJECT) 在android下无法正常开启通知,但是在微信版可以

uni-app uni.notifyBLECharacteristicValueChange(OBJECT) 在android下无法正常开启通知,但是在微信版可以

信息类别 详细信息
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 win10
HBuilderX类型 正式
HBuilderX版本号 4.56
手机系统 Android
手机系统版本号 Android 14
手机厂商 荣耀
手机机型 畅玩
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

示例代码:

// 开启/关闭特征值变化通知
notifyBLECharacteristicValueChange(characteristic: BluetoothCharacteristic, enable: boolean): void {
if ( !this.connected) return  

  uni.notifyBLECharacteristicValueChange({  
    deviceId: this.device.deviceId,  
    serviceId: this.getServiceIdByCharacteristic(characteristic),  
    characteristicId: characteristic.uuid,  
    state: enable,  
    success: () => {  
      if (enable) {  
        if (!this.isNotifying(characteristic.uuid)) {  
          this.notifyingCharacteristics.push(characteristic.uuid)  
        }  
        this.addDebugLog('info', `开启通知成功: ${characteristic.uuid}`)  
        uni.showToast({  
          title: '已开启通知',  
          icon: 'success'  
        })  
      } else {  
        this.notifyingCharacteristics = this.notifyingCharacteristics.filter(  
          uuid => uuid !== characteristic.uuid  
        )  
        this.addDebugLog('info', `关闭通知成功: ${characteristic.uuid}`)  
        uni.showToast({  
          title: '已关闭通知',  
          icon: 'success'  
        })  
      }  
    },  
    fail: (res) => {  
      this.addDebugLog('error', `失败: ${characteristic.uuid}`)  
      this.addDebugLog('error', `${enable ? '开启' : '关闭'}1通知失败: ${res.errMsg}`)  
      uni.showToast({  
        title: (enable ? '开启' : '关闭') + '1通知失败: ' + res.errMsg,  
        icon: 'error'  
      })  
    }  
  })  
}

操作步骤:

蓝牙ble demo

预期结果:

正常开启

实际结果:

失败

bug描述:

【报Bug】uni.notifyBLECharacteristicValueChange(OBJECT) 在android下无法正常开启通知,但是在微信版可以正常开启


更多关于uni-app uni.notifyBLECharacteristicValueChange(OBJECT) 在android下无法正常开启通知,但是在微信版可以的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

我用ios试了 notifyBLECharacteristicValueChange 是可以正常订阅的。
android上不成功的原因是 { “errMsg”: “notifyBLECharacteristicValueChange:fail no characteristic”, “code”: 10005 }

更多关于uni-app uni.notifyBLECharacteristicValueChange(OBJECT) 在android下无法正常开启通知,但是在微信版可以的实战教程也可以访问 https://www.itying.com/category-93-b0.html


根据描述,这是一个典型的Android平台下BLE通知开启失败的问题。以下是可能的原因和解决方案:

  1. Android权限问题

    • 确保在manifest.json中已添加蓝牙相关权限:
    "android": {
      "permissions": [
        "android.permission.BLUETOOTH",
        "android.permission.BLUETOOTH_ADMIN",
        "android.permission.ACCESS_FINE_LOCATION"
      ]
    }
    
  2. 时序问题

    • Android平台需要确保在成功建立连接并发现服务后再开启通知
    • 建议在uni.getBLEDeviceServicesuni.getBLEDeviceCharacteristics回调成功后再调用通知
  3. 特征值属性检查

    • 使用uni.getBLEDeviceCharacteristics检查目标特征值是否支持NOTIFY属性
    • 示例代码:
    uni.getBLEDeviceCharacteristics({
      deviceId,
      serviceId,
      success: (res) => {
        const char = res.characteristics.find(c => c.uuid === characteristicId);
        if(char && char.properties.notify) {
          // 可以开启通知
        }
      }
    })
回到顶部