【问题标题】:Detect beacons uuid and name with react native使用 react native 检测信标 uuid 和名称
【发布时间】:2021-11-26 08:47:42
【问题描述】:

我已经从计算机模拟了一个信标,我正在尝试从我的 react 本机应用程序中读取信标信息(uuid、标识符等)。

我决定使用这个库 https://github.com/dotintent/react-native-ble-plx 作为图书馆。

我面临的问题是虽然它在我扫描时显示了一些设备,但名称、uuid 和其他信息显示为空。

例如:

'device', { serviceUUIDs: null,
      isConnectable: null,
      overflowServiceUUIDs: null,
      txPowerLevel: null,
      serviceData: null,
      manufacturerData: 'TEACFCd6h5jcoxKqh9ACQqwTAAOBqZYcxQ==',
      name: null,
      mtu: 23,
      rssi: -47,
      solicitedServiceUUIDs: null,
      localName: null,
      id: '32:BD:32:6C:E9:C2',

这是我的代码

const bluetoothInstance = new BleManager();

  const scanAndConnect = () => {
    bluetoothInstance.startDeviceScan(null, { allowDuplicates: true }, (error, device) => {
      console.log('device', device);
      console.log('error', error);
      if (error) {
        // Handle error (scanning will be stopped automatically)
        return;
      }

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

  useEffect(() => {
    bluetoothInstance.onStateChange((state) => {
      console.log('state', state);
      if (state === 'PoweredOn') {
        scanAndConnect();
      }
    }, true);
  }, []);

如何读取信标 uuid 和名称?有没有其他的图书馆可以推荐?还是代码中缺少某些内容?任何帮助将不胜感激。

【问题讨论】:

  • 您能否使用诸如nRF Connect 之类的通用 BLE 扫描仪检查它们是否确实具有名称和服务 uuid?
  • 我从另一个信标扫描仪检查过,它显示了我的模拟信标

标签: react-native bluetooth-lowenergy ibeacon beacon react-native-ble-plx


【解决方案1】:

扫描代码可能工作正常。您要查找的信息要么并不总是存在,要么存在于不同的字段中。

iBeacon Proximity UUID 实际上嵌入在manufacturerData 字段中。但是,在 iOS 设备上,作为 Apple 的安全机制,操作系统会删除所有 iBeacon 数据包的该字段。 Apple 禁止使用 CoreBluetooth 框架(由 react-react-native-ble-plx 在后台使用)来检测 iBeacon。在 iOS 上,您必须使用 CoreLocation。为此,您可以尝试 react-native-beacons-manager。对于 Android,react-native-ble-plx 可以很好地检测 iBeacon,但您必须自己从 manyfacturerData 字段中解析出信标字段。

只有在主广播数据包之前最近收到包含名称的扫描响应数据包时,才会填充蓝牙名称(在名称字段中)。目前尚不清楚 iOS 将如何处理禁止 iBeacon 广告的这一过程,但它可能适用于非 iBeacon 广告。在 Android 上它也可以正常工作。只是不要期望它在任一平台上都 100% 填充。

【讨论】:

  • 感谢您的解释。知道如何使用manufacturerData解析信标字段吗?
  • 我有另一个关于如何解析信标字段 here 的 StackOverflow 答案。请注意react-native-ble-plx 中的manufacturerData 字段是Base64 编码的,因此您需要对该字符串进行Base64 解码以获取制造商广告的原始字节,然后按照我上面的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多