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
我用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通知开启失败的问题。以下是可能的原因和解决方案:
-
Android权限问题:
- 确保在manifest.json中已添加蓝牙相关权限:
"android": { "permissions": [ "android.permission.BLUETOOTH", "android.permission.BLUETOOTH_ADMIN", "android.permission.ACCESS_FINE_LOCATION" ] }
-
时序问题:
- Android平台需要确保在成功建立连接并发现服务后再开启通知
- 建议在
uni.getBLEDeviceServices
和uni.getBLEDeviceCharacteristics
回调成功后再调用通知
-
特征值属性检查:
- 使用
uni.getBLEDeviceCharacteristics
检查目标特征值是否支持NOTIFY属性 - 示例代码:
uni.getBLEDeviceCharacteristics({ deviceId, serviceId, success: (res) => { const char = res.characteristics.find(c => c.uuid === characteristicId); if(char && char.properties.notify) { // 可以开启通知 } } })
- 使用