I want to know that react-native beacon uuid

34 views Asked by At

I want to create a code that detects beacons using react native. react-native-beacon-manager library is old and doesn't work well. So I used react-native-ble-plx library, but I want to know information such as uuid, major, minor, etc. It doesn't work with my code. If there are any other good libraries, please let me know.

This is my code.

import React, {useState, useEffect} from 'react';
import {View, Text, Button, FlatList} from 'react-native';
import { BleManager } from 'react-native-ble-plx';

const TAG = '[BeaconScanView]';
const BeaconScanView = () => {
  const [beacons, setBeacons] = useState([]);
  const [scanning, setScanning] = useState(false);

  const bleManager = new BleManager();


  useEffect(() => {
    return () => {
      bleManager.destroy();
    };
  }, []);

  const startScanning = async () => {
    if (scanning) return;

    setScanning(true);
    setBeacons([]);

    try {
      await bleManager.startDeviceScan(null, null, (error, device) => {
        if (error) {
          console.error('scan error:', error);
          return;
        }

        if (device) {
          const {
            name,
            id,
            serviceUUIDs,
            serviceData,
            solicitedServiceUUIDs,
            rssi,
          } = device;
          const beacon = {
            name,
            id,
            serviceUUIDs,
            serviceData,
            solicitedServiceUUIDs,
            distance: calculateDistance(rssi),
          };

          if (device?.id == "51:07:B1:59:89:98") {
            console.log('iBeacon !!!!!!!===>', device);
          }
          console.log(TAG, 'beacon====>', beacon.serviceUUIDs);
          console.log(TAG, 'beacon====>', beacon);

          setBeacons((prevBeacons: any) => {
            if (!prevBeacons.find((b: any) => b.id === beacon.id)) {
              return [...prevBeacons, beacon];
            }
            return prevBeacons;
          });
        }
      });

    } catch (error) {
      console.error('iBeacon error:', error);
    }
  };

  const stopScanning = () => {
    bleManager.stopDeviceScan();
    setScanning(false);
  };

  const calculateDistance = (rssi: any) => {
    return Math.abs(rssi);
  };

  return (
    <View style={{flex: 1, justifyContent: 'center', alignItems: 'center'}}>
      <Button
        title={scanning ? 'stop' : 'start'}
        onPress={scanning ? stopScanning : startScanning}
      />

      {beacons.length > 0 && (
        <FlatList
          data={beacons}
          keyExtractor={(item: any) => item.id}
          renderItem={({item}) => (
            <View>
              <Text>id: {item.id}</Text>
              {/* <Text>serviceData: {item.serviceData}</Text> */}
              {/* <Text>solicitedServiceUUIDs: {item.solicitedServiceUUIDs}</Text> */}
              <Text>DISTANCE: {item.distance}</Text>
            </View>
          )}
        />
      )}
    </View>
  );
};

export default BeaconScanView;

0

There are 0 answers