UNPKG

@indoor-track/ibeacon

Version:

Uma biblioteca React Native que fornece APIs nativas para escanear, detectar e obter informações de dispositivos iBeacon via Bluetooth Low Energy...

55 lines (54 loc) 1.98 kB
"use strict"; import { useEffect, useState } from 'react'; import { Platform } from 'react-native'; import { IbeaconEventEmitter } from './NativeIbeacon'; import { check, requestMultiple, PERMISSIONS, RESULTS } from 'react-native-permissions'; export const useIbeaconScan = () => { const [results, setResults] = useState([]); const [error, setError] = useState(null); const [initialized, setInitialized] = useState(false); useEffect(() => { async function requestBluetoothPermissions() { if (Platform.OS === 'android') { const permissionsToRequest = []; const bluetoothScan = PERMISSIONS.ANDROID.BLUETOOTH_SCAN; const bluetoothConnect = PERMISSIONS.ANDROID.BLUETOOTH_CONNECT; const scanStatus = await check(bluetoothScan); const connectStatus = await check(bluetoothConnect); if (scanStatus !== RESULTS.GRANTED) { permissionsToRequest.push(bluetoothScan); } if (connectStatus !== RESULTS.GRANTED) { permissionsToRequest.push(bluetoothConnect); } if (permissionsToRequest.length > 0) { const statuses = await requestMultiple(permissionsToRequest); if (statuses[PERMISSIONS.ANDROID.BLUETOOTH_SCAN] !== RESULTS.GRANTED || statuses[PERMISSIONS.ANDROID.BLUETOOTH_CONNECT] !== RESULTS.GRANTED) { requestBluetoothPermissions(); } } } setInitialized(true); } requestBluetoothPermissions(); }, []); useEffect(() => { if (!initialized) return; const resultListener = IbeaconEventEmitter.addListener('ScanResult', data => { setResults(prev => [...prev, data]); }); const errorListener = IbeaconEventEmitter.addListener('ScanError', err => { setError(err); }); return () => { resultListener.remove(); errorListener.remove(); }; }, [initialized]); return { results, error, initialized }; }; //# sourceMappingURL=useIbeaconScan.js.map