HarmonyOS鸿蒙Next中Freebuds Pro4在订阅特定UUID服务的特征值变化通知后BLE连接断开
HarmonyOS鸿蒙Next中Freebuds Pro4在订阅特定UUID服务的特征值变化通知后BLE连接断开
楼主在鸿蒙Next 5.0的手机上开发了一款蓝牙APP,目前可以成功用BLE连接Freebuds Pro4蓝牙耳机,并发现其所有服务的UUID。楼主进而订阅每个UUID的特征值变化通知,大部分UUID都能够成功订阅,但是有两个服务在订阅后耳机连接会断开,且不会报错。这两个服务的UUID特征值如下:
服务1:
{
"characteristicUuid": "02000200-0000-2000-8000-009E78563412",
"serviceUuid": "0000FD21-0000-1000-8000-00805F9B34FB",
"characteristicValue": {},
"properties": {
"write": false,
"writeNoResponse": false,
"read": false,
"notify": true,
"indicate": false
},
"descriptors": [
{
"descriptorUuid": "00002902-0000-1000-8000-00805F9B34FB",
"characteristicUuid": "02000200-0000-2000-8000-009E78563412",
"serviceUuid": "0000FD21-0000-1000-8000-00805F9B34FB",
"descriptorValue": {}
},
{
"descriptorUuid": "00002901-0000-1000-8000-00805F9B34FB",
"characteristicUuid": "02000200-0000-2000-8000-009E78563412",
"serviceUuid": "0000FD21-0000-1000-8000-00805F9B34FB",
"descriptorValue": {}
}
]
}
服务2:
{
"characteristicUuid": "0F9F8002-2AB2-45FB-82DB-BA8EFCEAE4B6",
"serviceUuid": "C574EDB3-6551-473B-BAD8-65035F07E4A8",
"characteristicValue": {},
"properties": {
"write": false,
"writeNoResponse": false,
"read": false,
"notify": true,
"indicate": true
},
"descriptors": [
{
"descriptorUuid": "00002902-0000-1000-8000-00805F9B34FB",
"characteristicUuid": "0F9F8002-2AB2-45FB-82DB-BA8EFCEAE4B6",
"serviceUuid": "C574EDB3-6551-473B-BAD8-65035F07E4A8",
"descriptorValue": {}
}
]
}
楼主对蓝牙知之甚少,只查到服务1中的0000FD21开头的serviceUuid是华为公司自己服务的代码,对服务2则完全没有头绪。请教各位大神,为何这两个服务订阅通知后会与耳机断连,如能解惑不甚感谢!另外附上订阅特征值变化通知的代码段。
this.gattClient!.setCharacteristicChangeNotification(characteristic, true, err => {
if (err) {
console.info(TAG,'notifyCharacteristicChanged callback failed');
} else {
console.info(TAG,'notifyCharacteristicChanged callback successful');
this.gattClient!.on('BLECharacteristicChange', (characteristicChangeReq: ble.BLECharacteristic)=>{
let serviceUuid: string = characteristicChangeReq.serviceUuid;
let characteristicUuid: string = characteristicChangeReq.characteristicUuid;
let value: Uint8Array = new Uint8Array(characteristicChangeReq.characteristicValue);
console.info(TAG,'BLECharacteristicChange serviceUuid ',serviceUuid);
console.info(TAG,'BLECharacteristicChange characteristicUuid',characteristicUuid);
console.info(TAG,'BLECharacteristicChange value',value);
});
}
});
更多关于HarmonyOS鸿蒙Next中Freebuds Pro4在订阅特定UUID服务的特征值变化通知后BLE连接断开的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,Freebuds Pro4在订阅特定UUID服务的特征值变化通知后BLE连接断开,可能是由于以下原因:
-
设备或服务端在处理通知时出现异常,导致连接中断。
-
蓝牙协议栈在处理通知时发生错误,触发了连接断开机制。
-
设备资源不足,无法维持多个通知订阅,导致连接断开。
-
服务端的特征值配置或权限设置不当,导致连接不稳定。
建议检查设备和服务端的日志,确认具体原因。
更多关于HarmonyOS鸿蒙Next中Freebuds Pro4在订阅特定UUID服务的特征值变化通知后BLE连接断开的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
这个问题可能是由于订阅了Freebuds Pro4的私有服务导致的。从您提供的UUID来看:
- 服务1(0000FD21-…)是华为的私有服务,通常用于设备内部通信
- 服务2(C574EDB3-…)看起来也是私有服务
这些私有服务可能:
- 需要特定的认证或密钥才能访问
- 设计上不允许外部设备订阅通知
- 订阅后会触发设备的保护机制导致断开
建议:
- 避免订阅这些私有服务的通知
- 只订阅标准BLE服务(如电池、设备信息服务)
- 检查Freebuds的官方文档看是否有公开的API
您的代码实现本身没有问题,问题在于订阅了设备不允许外部访问的服务。