在华为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

1 回复

更多关于在华为mate 70 pro上运行uni-app生成的安卓包搜索蓝牙连接后不能获取到服务UUID和特征值UUID的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个问题可能是由于华为鸿蒙系统4.3对蓝牙API的特殊处理导致的。建议从以下几个方面排查:

  1. 检查蓝牙设备是否确实提供了服务UUID和特征值UUID。有些设备需要先配对才能获取这些信息。

  2. 在调用getBLEDeviceServices之前,确保已经成功建立了蓝牙连接。可以尝试在uni.createBLEConnection成功后加个延时(500ms左右)再获取服务。

  3. 检查权限是否完整,鸿蒙系统可能需要额外声明蓝牙权限。确保manifest.json中已配置:

"permission": {
  "android.permission.BLUETOOTH",
  "android.permission.BLUETOOTH_ADMIN",
  "android.permission.ACCESS_FINE_LOCATION"
}
  1. 尝试在真机调试模式下查看详细错误日志,可以在fail回调中打印完整错误信息:
fail: (err) => {
  console.error('获取服务失败:', err);
  reject(err);
}
回到顶部