uni-app 获取蓝牙name都为空(尝试多个设备)

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

uni-app 获取蓝牙name都为空(尝试多个设备)

开发环境 版本号 项目创建方式
Mac 14.0 HBuilderX

操作步骤:

openBluetoothAdapter startBluetoothDevicesDiscovery getBluetoothDevices 打印返回结果


### 预期结果:

name或者localName有值

实际结果:

name和localName都没有值


### bug描述:

标准基座运行,使用蓝牙设备,获取到的列表namelocalName都是空,
{
"deviceId": "67:6F:2C:83:8A:C6",
"name": "",
"RSSI": -65,
"localName": "",
"advertisServiceUUIDs": [],
"advertisData": {}
},

1 回复

在使用 uni-app 开发蓝牙功能时,如果获取到的蓝牙设备名称(name)为空,可能是由于以下原因导致的。以下是一些可能的原因和解决方案:

1. 蓝牙设备本身未广播名称

有些蓝牙设备在广播时可能不会包含设备名称(name),或者设备名称可能被设置为空。你可以尝试使用其他设备进行测试,或者检查蓝牙设备的广播数据。

2. 获取设备信息的时机问题

在 uni-app 中,uni.getBluetoothDevicesuni.onBluetoothDeviceFound 获取到的设备信息可能不完整。你可以尝试在 onBluetoothDeviceFound 回调中获取设备名称,或者在 uni.getBluetoothDevices 之后再次检查设备信息。

uni.onBluetoothDeviceFound(function(devices) {
  devices.forEach(device => {
    console.log('Found device:', device.name, device.deviceId);
  });
});

uni.startBluetoothDevicesDiscovery({
  success(res) {
    console.log('Start discovery success:', res);
  }
});

3. 权限问题

确保你的应用已经获取了蓝牙相关的权限。在 Android 上,你需要在 manifest.json 中添加以下权限:

{
  "permission": {
    "scope.userLocation": {
      "desc": "你的位置信息将用于蓝牙设备扫描"
    }
  }
}

在 iOS 上,你需要在 Info.plist 中添加 NSBluetoothAlwaysUsageDescriptionNSBluetoothPeripheralUsageDescription 的描述。

4. 平台差异

不同平台(iOS 和 Android)对蓝牙设备的处理方式可能不同。你可以尝试在不同的平台上进行测试,看看是否在某个平台上可以正常获取到设备名称。

5. 设备未正确连接

如果你在设备未连接的情况下尝试获取设备名称,可能会导致获取到的名称为空。你可以尝试先连接设备,然后再获取设备信息。

uni.createBLEConnection({
  deviceId: deviceId,
  success(res) {
    console.log('Connection success:', res);
    uni.getBLEDeviceServices({
      deviceId: deviceId,
      success(res) {
        console.log('Get services success:', res);
      }
    });
  }
});

6. 使用 localName 替代 name

有些蓝牙设备可能使用 localName 而不是 name 来广播设备名称。你可以尝试获取 localName 来替代 name

uni.onBluetoothDeviceFound(function(devices) {
  devices.forEach(device => {
    console.log('Found device:', device.localName, device.deviceId);
  });
});

7. 检查蓝牙设备的广播数据

你可以使用一些蓝牙调试工具(如 nRF Connect)来检查蓝牙设备的广播数据,看看是否包含设备名称。

8. 更新 uni-app 版本

确保你使用的是最新版本的 uni-app,因为旧版本可能存在一些蓝牙相关的 bug。

9. 检查设备是否支持

确保你使用的设备支持蓝牙功能,并且蓝牙功能已经开启。

10. 调试和日志

在开发过程中,建议多使用 console.log 来输出调试信息,帮助你定位问题。

uni.onBluetoothDeviceFound(function(devices) {
  console.log('Found devices:', devices);
  devices.forEach(device => {
    console.log('Device info:', device);
  });
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!