uni-app 蓝牙在设备多服务的情况下获取特征值失败10005

发布于 1周前 作者 nodeper 来自 Uni-App

uni-app 蓝牙在设备多服务的情况下获取特征值失败10005

信息类别 详情
产品分类 uniapp/App
PC开发环境操作系统 Mac
PC开发环境操作系统版本号 14.0 (23A344)
HBuilderX类型 正式
HBuilderX版本号 3.98
手机系统 iOS
手机系统版本号 iOS 16
手机厂商 苹果
手机机型 iphone xr
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

如题

预期结果:

如题

实际结果:

如题

bug描述:

【报Bug】我的蓝牙设备有3个主服务,在已连接的情况下,拿着deviceId和主服务serviceId去拿特征值,3个服务里只有第一个服务能正常获取到特征值,其他2个服务就失败报错10005,我用微信官方写法,Taro,包括uniapp打包成小程序都是正常,唯独uniapp打包成app就无法获取
代码见附件


3 回复

这个绝对是bug,希望官方能重视,如果用button来触发获取特征值的函数,就可以拿到第二个服务的特征值!!!!


麻烦问一下,这个问题目前你解决了吗

在使用 uni-app 进行蓝牙开发时,如果在设备多服务的情况下获取特征值失败,错误码为 10005,通常表示在蓝牙操作过程中出现了某种错误。以下是一些可能的原因和解决方法:

1. 蓝牙连接问题

  • 原因: 设备可能没有正确连接,或者连接不稳定。
  • 解决: 确保设备已成功连接,并且连接状态稳定。可以尝试重新连接设备。

2. 服务或特征值未找到

  • 原因: 你可能尝试获取的特征值在设备服务中不存在,或者服务本身未被正确发现。
  • 解决: 确保你正在访问正确的服务和特征值。可以通过 getBLEDeviceServicesgetBLEDeviceCharacteristics 方法分别获取设备的服务和特征值列表,确认你要访问的特征值是否存在。

3. 权限问题

  • 原因: 应用可能没有获取蓝牙权限,或者权限被拒绝。
  • 解决: 确保在 manifest.json 中正确配置了蓝牙权限,并且在运行时向用户请求了必要的权限。
{
  "permissions": {
    "bluetooth": {
      "description": "用于蓝牙设备连接"
    }
  }
}

4. 蓝牙设备不支持

  • 原因: 目标设备可能不支持你尝试访问的特定服务或特征值。
  • 解决: 确认设备的蓝牙协议和服务支持情况,确保设备支持你需要的服务或特征值。

5. 异步操作问题

  • 原因: 可能在获取特征值的操作还未完成时,尝试了其他操作,导致冲突。
  • 解决: 确保在获取特征值的操作完成后,再进行其他操作。可以使用 Promise 或 async/await 来确保操作顺序。

6. 代码问题

  • 原因: 代码中可能存在逻辑错误,导致获取特征值失败。
  • 解决: 检查代码逻辑,确保在获取特征值之前,设备和服务的发现过程已经完成。以下是一个示例代码片段:
uni.getBLEDeviceServices({
  deviceId: deviceId,
  success: (res) => {
    console.log('Services:', res.services);
    uni.getBLEDeviceCharacteristics({
      deviceId: deviceId,
      serviceId: serviceId,
      success: (res) => {
        console.log('Characteristics:', res.characteristics);
        // 在这里进行特征值操作
      },
      fail: (err) => {
        console.error('Failed to get characteristics:', err);
      }
    });
  },
  fail: (err) => {
    console.error('Failed to get services:', err);
  }
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!