在华为mate 70 pro上运行uni-app生成的安卓包搜索蓝牙连接后不能获取到服务UUID和特征值UUID
在华为mate 70 pro上运行uni-app生成的安卓包搜索蓝牙连接后不能获取到服务UUID和特征值UUID
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Mac | mac os 14.0 | HBuilderX |
示例代码:
// Promise 包装 uni.getBLEDeviceServices
getBLEDeviceServicesPromise(deviceId) {
return new Promise((resolve, reject) => {
uni.getBLEDeviceServices({
deviceId,
success: resolve,
fail: reject,
});
});
}
// Promise 包装 uni.getBLEDeviceCharacteristics
getBLEDeviceCharacteristicsPromise(deviceId, serviceId) {
return new Promise((resolve, reject) => {
uni.getBLEDeviceCharacteristics({
deviceId,
serviceId: serviceId,
success: resolve,
fail: reject,
});
});
}
调用方法
// 获取设备服务
const servicesRes = await this.getBLEDeviceServicesPromise(deviceId);
console.log("servicesRes: ", servicesRes);
// 获取设备特征值
const characteristicsRes = await this.getBLEDeviceCharacteristicsPromise(
deviceId,
this.targetServiceId
);
console.log("characteristicsRes: ", characteristicsRes);
操作步骤:
使用mate 70 pro,将uniapp运行到真机mate 70 pro上,扫描蓝牙设备,点击连接, 能连接上,但是获取不到服务UUID和特征值UUID
预期结果:
扫描蓝牙设备,点击连接,期望获取不到服务UUID和特征值UUID
实际结果:
扫描蓝牙设备,点击连接,服务UUID和特征值UUID都为空
bug描述:
手机:Mate 70 Pro
操作系统: 鸿蒙系统4.3
使用uniapp框架API
// Promise 包装 uni.getBLEDeviceServices
getBLEDeviceServicesPromise(deviceId) {
return new Promise((resolve, reject) => {
uni.getBLEDeviceServices({
deviceId,
success: resolve,
fail: reject,
});
});
}
// Promise 包装 uni.getBLEDeviceCharacteristics
getBLEDeviceCharacteristicsPromise(deviceId, serviceId) {
return new Promise((resolve, reject) => {
uni.getBLEDeviceCharacteristics({
deviceId,
serviceId: serviceId,
success: resolve,
fail: reject,
});
});
}
调用方法
// 获取设备服务
const servicesRes = await this.getBLEDeviceServicesPromise(deviceId);
console.log("servicesRes: ", servicesRes);
// 获取设备特征值
const characteristicsRes = await this.getBLEDeviceCharacteristicsPromise(
deviceId,
this.targetServiceId
);
console.log("characteristicsRes: ", characteristicsRes);
更多关于在华为mate 70 pro上运行uni-app生成的安卓包搜索蓝牙连接后不能获取到服务UUID和特征值UUID的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于在华为mate 70 pro上运行uni-app生成的安卓包搜索蓝牙连接后不能获取到服务UUID和特征值UUID的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这个问题可能是由于华为鸿蒙系统4.3对蓝牙API的特殊处理导致的。建议从以下几个方面排查:
-
检查蓝牙设备是否确实提供了服务UUID和特征值UUID。有些设备需要先配对才能获取这些信息。
-
在调用getBLEDeviceServices之前,确保已经成功建立了蓝牙连接。可以尝试在uni.createBLEConnection成功后加个延时(500ms左右)再获取服务。
-
检查权限是否完整,鸿蒙系统可能需要额外声明蓝牙权限。确保manifest.json中已配置:
"permission": {
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.ACCESS_FINE_LOCATION"
}
- 尝试在真机调试模式下查看详细错误日志,可以在fail回调中打印完整错误信息:
fail: (err) => {
console.error('获取服务失败:', err);
reject(err);
}