uni-app 蓝牙notifyBLECharacteristicValueChange无法订阅
uni-app 蓝牙notifyBLECharacteristicValueChange无法订阅
信息项 | 内容 |
---|---|
产品分类 | uniapp/App |
PC开发环境 | Mac |
PC版本号 | M1 |
HBuilderX | 正式 |
版本号 | 4.29 |
手机系统 | Android |
版本号 | Android 10 |
手机厂商 | OPPO |
手机机型 | A72n 5G |
页面类型 | vue |
vue版本 | vue3 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
操作步骤:
<view>
<uni-popup ref="popup" type="dialog">
<uni-popup-dialog mode="input" v-model="bobaoContent" message="成功消息" :duration="2000" :before-close="true" @close="closePopup" @confirm="confirmPopup"></uni-popup-dialog>
</uni-popup>
<button @click="startBluetooth">启动蓝牙</button>
<button @click="closeBluetooth">关闭蓝牙</button>
<button @click="scanBluetooth" :disabled="isScanning">扫描蓝牙设备</button>
<scroll-view scroll-y="true" style="height: 400px;">
<view v-for="device in devices" :key="device.deviceId" class="device-item">
<text>{{ device.name || device.localName || '未知设备' }}</text>
<button @click="connectToDevice(device)">连接</button>
</view>
</scroll-view>
<view v-if="connectedDevice">
<text>已连接到蓝牙设备: {{ connectedDevice }}</text>
<button @click="disconnectDevice">断开连接</button>
</view>
<view v-if="receivedData">
<text>接收到的数据: {{ receivedData }}</text>
</view>
</view>
</template>
预期结果:
1
### 实际结果:
1
bug描述:
{ “errMsg”: “notifyBLECharacteristicValueChange:fail no descriptor”, “code”: 10008 } 报错提示,换了好几个设备都是一样的

更多关于uni-app 蓝牙notifyBLECharacteristicValueChange无法订阅的实战教程也可以访问 https://www.itying.com/category-93-b0.html
查找特定的特征值才可以,通过characteristics[].properties.notify / characteristics[].properties.indicate 属性判断
更多关于uni-app 蓝牙notifyBLECharacteristicValueChange无法订阅的实战教程也可以访问 https://www.itying.com/category-93-b0.html
[ { “uuid”: “00002A05-0000-1000-8000-00805F9B34FB”, “properties”: { “read”: true, “write”: true, “notify”: true, “indicate”: true } } ]都有的哈
在uni-app中,如果你遇到notifyBLECharacteristicValueChange
无法订阅蓝牙特征值变化的问题,可能是由于几个常见的原因:服务或特征值未正确识别、权限问题、或者代码实现有误。以下是一个完整的代码示例,以及可能的解决思路,来帮助你确保蓝牙订阅功能正常工作。
代码示例
// 初始化蓝牙适配器
uni.openBluetoothAdapter({
success: function (res) {
console.log('蓝牙适配器初始化成功', res)
// 开始扫描蓝牙设备
uni.startBluetoothDevicesDiscovery({
allowDuplicatesKey: false,
success: function (devicesRes) {
console.log('开始扫描设备', devicesRes)
// 假设已经找到了目标设备,并且连接成功
const deviceId = '目标设备的ID'; // 替换为实际设备ID
uni.createBLEConnection({
deviceId: deviceId,
success: function (connectRes) {
console.log('连接设备成功', connectRes)
// 获取服务
uni.getBLEDeviceServices({
deviceId: deviceId,
success: function (servicesRes) {
const serviceId = '目标服务的UUID'; // 替换为实际服务UUID
// 获取特征值
uni.getBLEDeviceCharacteristics({
deviceId: deviceId,
serviceId: serviceId,
success: function (charsRes) {
const characteristicId = '目标特征值的UUID'; // 替换为实际特征值UUID
// 启用notify
uni.notifyBLECharacteristicValueChange({
state: true, // 启用通知
deviceId: deviceId,
serviceId: serviceId,
characteristicId: characteristicId,
success: function (notifyRes) {
console.log('启用notify成功', notifyRes)
// 监听特征值变化
uni.onBLECharacteristicValueChange(function (changeRes) {
console.log('特征值变化', changeRes)
// 处理变化的数据
})
},
fail: function (err) {
console.error('启用notify失败', err)
}
})
}
})
}
})
}
})
}
})
},
fail: function (err) {
console.error('蓝牙适配器初始化失败', err)
}
})
可能的解决思路
- 确保UUID正确:确保服务UUID和特征值UUID正确无误,并且设备支持这些UUID。
- 检查设备连接状态:在调用
notifyBLECharacteristicValueChange
之前,确保设备已经成功连接。 - 权限管理:检查应用是否有足够的权限访问蓝牙设备,特别是在Android平台上,需要在
manifest.json
中声明蓝牙权限。 - 设备兼容性:某些设备可能不支持notify功能,或者需要特定的设置才能启用。
通过上述代码和检查点,你应该能够诊断并解决notifyBLECharacteristicValueChange
无法订阅的问题。如果问题仍然存在,建议查看uni-app的官方文档或社区论坛,获取更多帮助。