uni-app 蓝牙搜索Api uni.getBluetoothDevices 获取到的deviceId不正确

发布于 1周前 作者 yuanlaile 来自 uni-app

uni-app 蓝牙搜索Api uni.getBluetoothDevices 获取到的deviceId不正确

产品分类

uniapp/App

示例代码:

uni.getBluetoothDevices({  
  success: (res) => {  
    if (res.devices) {  
      res.devices.forEach(item => {  
        console.log(item);  
      });  
    }  
  },  
});

操作步骤:

调用uni.getBluetoothDevices

预期结果:

deviceId正确,正确deviceId: FC:58:FA:65:28:27

实际结果:

deviceId错误,错误的deviceId: FD:58:FA:65:28:27
后几位都正确,开头的FD/FC不对

bug描述:

蓝牙搜索:uni.getBluetoothDevices搜索到的deviceId不正确
正确的mac地址(deviceId):FC:58:FA:65:28:27
uni.getBluetoothDevices获得的deviceId: FD:58:FA:65:28:27

Image Image Image

开发环境信息

项目 信息
PC开发环境操作系统 Mac
PC开发环境操作系统版本号 15.0.1 (24A348)
HBuilderX类型 正式
HBuilderX版本号 4.29
手机系统 Android
手机系统版本号 Android 9.0
手机厂商 小米
手机机型 MIX 2
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

3 回复

我碰到一样的问题了 请问下您最后是怎么解决的呢


请问怎么解决的呢

在处理 uni-app 中的蓝牙搜索 API uni.getBluetoothDevices 时,如果发现获取到的 deviceId 不正确,通常可能涉及到几个潜在的问题:设备兼容性问题、API 使用不当、或者是蓝牙权限及状态管理问题。下面我将提供一个基本的代码案例,帮助你确保 API 使用正确,并添加一些额外的调试信息来帮助定位问题。

基本代码案例

首先,确保你的应用已经请求并获得了蓝牙权限,并且设备蓝牙已开启。以下是一个简化的代码示例,用于展示如何正确使用 uni.getBluetoothDevices

// 检查蓝牙适配器是否可用
uni.openBluetoothAdapter({
  success: function (res) {
    console.log('蓝牙适配器已启用', res);
    // 开始搜索蓝牙设备
    uni.startBluetoothDevicesDiscovery({
      allowDuplicatesKey: false,
      success: function (discoveryRes) {
        console.log('开始搜索蓝牙设备', discoveryRes);
        
        // 设置一个定时器,每隔几秒获取一次搜索结果
        const interval = setInterval(() => {
          uni.getBluetoothDevices({
            success: function (devicesRes) {
              console.log('获取到的蓝牙设备列表:', devicesRes.devices);
              if (devicesRes.devices.length > 0) {
                devicesRes.devices.forEach(device => {
                  console.log('设备ID:', device.deviceId, '设备名称:', device.name);
                });
                // 停止搜索
                clearInterval(interval);
                uni.stopBluetoothDevicesDiscovery({
                  success: function () {
                    console.log('停止搜索蓝牙设备');
                  }
                });
              }
            },
            fail: function (err) {
              console.error('获取蓝牙设备列表失败:', err);
              clearInterval(interval);
            }
          });
        }, 3000); // 每3秒获取一次
      },
      fail: function (err) {
        console.error('搜索蓝牙设备失败:', err);
      }
    });
  },
  fail: function (err) {
    console.error('蓝牙适配器启用失败:', err);
  }
});

调试建议

  1. 日志记录:在每一步操作后都添加日志记录,这有助于你理解 API 调用的顺序和结果。
  2. 设备兼容性:确保在多种设备上测试你的应用,因为不同设备的蓝牙实现可能有所不同。
  3. 权限管理:检查并确保应用具有访问蓝牙的权限,特别是在 Android 上,你可能需要在 manifest.json 中声明相关权限。
  4. 错误处理:在 fail 回调中添加详细的错误处理逻辑,以便更好地了解失败的原因。

通过上述代码和调试建议,你应该能够更有效地诊断和解决 uni.getBluetoothDevices 获取到的 deviceId 不正确的问题。

回到顶部