@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
JavaScript
;
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