uni-app startBluetoothDevicesDiscovery方法,services参数长度大于1时无法搜索到任何设备

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

uni-app startBluetoothDevicesDiscovery方法,services参数长度大于1时无法搜索到任何设备

示例代码:

// services参数传入数组长度为1时,正常  
uni.startBluetoothDevicesDiscovery({  
    services: [  
        "0000FFF0-0000-1000-8000-00805F9B34FB",  
    ],  
    success(res) {  
        uni.onBluetoothDeviceFound(res => {  
                // 可以获取到设备列表  
        })  
    }  
})  

// services参数传入数组长度大于1时,无法搜索到任何设备  
uni.startBluetoothDevicesDiscovery({  
    services: [  
        "0000FFF0-0000-1000-8000-00805F9B34FB",  
        "000068B0-0000-1000-8000-00805F9B34FB"  
    ],  
    success(res) {  
        uni.onBluetoothDeviceFound(res => {  
                // 无法获取到设备列表 onBluetoothDeviceFound没有执行  
        })  
    }  
})

操作步骤:

uni.startBluetoothDevicesDiscovery({  
    services: [  
        "0000FFF0-0000-1000-8000-00805F9B34FB",  
        "000068B0-0000-1000-8000-00805F9B34FB"  
    ],  
    success(res) {  
        uni.onBluetoothDeviceFound(res => {  
                // 无法获取到设备列表 onBluetoothDeviceFound没有执行  
        })  
    }  
})

预期结果:

  • onBluetoothDeviceFound方法被执行且返回services列表中的设备

实际结果:

  • onBluetoothDeviceFound没有执行,无法搜索到设备

bug描述:

  • HarmonyOS 3.0.0
    1. services参数传入数组长度为1时,可以搜索并过滤到设备。
    2. services参数传入数组长度大于1时,无法搜索到任何设备。

1 回复

uni-app 中使用 startBluetoothDevicesDiscovery 方法时,如果 services 参数的长度大于 1,可能会导致无法搜索到任何设备。这个问题通常与蓝牙设备的广播数据或平台限制有关。

可能的原因和解决方案:

  1. 平台限制

    • 某些平台(如 iOS 或 Android)可能对 services 参数的长度有限制。如果 services 参数的长度超过平台允许的最大值,可能会导致搜索失败。
    • 解决方案:尝试减少 services 参数的长度,或者分多次调用 startBluetoothDevicesDiscovery,每次使用不同的 services 参数。
  2. 蓝牙设备广播数据

    • 蓝牙设备在广播时可能只包含部分服务 UUID,如果 services 参数中的 UUID 与设备广播的 UUID 不匹配,可能会导致搜索不到设备。
    • 解决方案:确保 services 参数中的 UUID 与设备广播的 UUID 匹配。可以通过先不指定 services 参数,搜索到设备后再获取设备的服务列表。
  3. API 实现问题

    • uni-appstartBluetoothDevicesDiscovery 方法可能在某些平台上对 services 参数的处理存在问题。
    • 解决方案:检查 uni-app 的文档或社区,看看是否有相关的已知问题或更新。如果有,尝试更新 uni-app 版本。
  4. 调试和日志

    • 在调用 startBluetoothDevicesDiscovery 方法时,添加调试日志,检查 services 参数是否正确传递,以及是否有错误信息返回。
    • 解决方案:使用 console.loguni.showModal 输出调试信息,帮助定位问题。

示例代码:

uni.startBluetoothDevicesDiscovery({
  services: ['serviceUUID1', 'serviceUUID2'], // 确保这些 UUID 与设备广播的 UUID 匹配
  success: (res) => {
    console.log('开始搜索蓝牙设备', res);
  },
  fail: (err) => {
    console.error('搜索蓝牙设备失败', err);
  }
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!