0

我已经从计算机模拟了一个信标,我正在尝试从我的 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 和名称?有没有其他的图书馆可以推荐?还是代码中缺少某些内容?任何帮助,将不胜感激。

4

1 回答 1

2

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

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% 地填充。

于 2021-10-06T12:55:27.033 回答