You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native使用react-native-ble-plx扫描Beacon时UUID、名称为空如何解决

问题根因

Beacon的UUID、标识符等信息不会直接暴露在react-native-ble-plx返回的设备顶层字段中,这类自定义广播数据全部封装在manufacturerData字段内,你返回结果中的base64编码值就是存储Beacon信息的载体。如果你的模拟Beacon没有在广播包中配置携带设备名称字段,返回的name和localName为null属于正常现象。

解决步骤

1. 手动解析manufacturerData获取Beacon信息

iBeacon类广播帧有固定结构,你可以把base64格式的厂商数据转成字节数组后按结构提取信息:
首先安装buffer库做编码转换:
npm install buffer

然后修改你的扫描回调逻辑:

import { Buffer } from 'buffer';

const scanAndConnect = () => {
  bluetoothInstance.startDeviceScan(null, { allowDuplicates: true }, (error, device) => {
    console.log('device', device);
    console.log('error', error);
    if (error) {
      return;
    }

    // 新增解析Beacon数据逻辑
    if (device.manufacturerData) {
      const data = Buffer.from(device.manufacturerData, 'base64');
      // 校验是否为标准iBeacon帧
      if (data.length >= 25 && data[0] === 0x4c && data[1] === 0x00 && data[2] === 0x02 && data[3] === 0x15) {
        // 提取16位UUID
        const uuidBytes = data.slice(4, 20);
        const uuid = uuidBytes.toString('hex').match(/(.{8})(.{4})(.{4})(.{4})(.{12})/).slice(1).join('-');
        // 提取Major、Minor
        const major = data.readUInt16BE(20);
        const minor = data.readUInt16BE(22);
        // 提取校准功率
        const txPower = data.readInt8(24);
        console.log('解析到Beacon信息:', { uuid, major, minor, txPower, rssi: device.rssi, mac: device.id });
      }
    }

    if (device?.name === 'MyProjectName') {
      bluetoothInstance.stopDeviceScan();
    }
  });
};

如果需要通过名称识别设备,你可以在电脑端的Beacon模拟工具中,配置广播包携带Complete Local Name字段,扫描时就能拿到非空的name值。

2. 检查权限配置

字段为空大概率和权限不足有关:

  • Android 12及以上需要申请BLUETOOTH_SCAN、BLUETOOTH_CONNECT、ACCESS_FINE_LOCATION权限,低版本Android需要申请定位权限和蓝牙权限,没有权限时系统会自动把扫描到的设备敏感字段置空。
  • iOS需要在Info.plist中添加NSBluetoothAlwaysUsageDescription、NSLocationWhenInUseUsageDescription权限声明,否则扫描结果会出现字段缺失。

替代开发库推荐

如果你只需要做Beacon扫描,不需要复杂的BLE连接操作,可以选择专门的Beacon处理库,不需要手动解析广播包:

  • 专门的Beacon管理库:直接封装了iBeacon、Eddystone等协议的解析逻辑,扫描后直接返回解析好的UUID、Major、Minor等字段,使用更简单。
  • 通用BLE管理库:对广播数据的封装更友好,内置了基础的Beacon数据解析能力,比react-native-ble-plx上手门槛更低。

内容的提问来源于stack exchange,提问作者CraZyDroiD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:45:03