MapTracker/Tracker/App.js

66 lines
2.2 KiB
JavaScript

import { StatusBar } from 'expo-status-bar';
import { StyleSheet, Text, View } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import MapScreen from './src/screens/MapScreen';
import ListScreen from './src/screens/ListScreen';
import * as Location from "expo-location";
import { useEffect, useRef } from 'react';
import Storage from './src/system/database/storage';
const Stack = createStackNavigator();
const storage = Storage.getInstance(); // Criando apenas uma instância de Storage
export default function App() {
const locationInterval = useRef(null); // UseRef para armazenar o intervalo
useEffect(() => {
const getLocation = async () => {
const { status } = await Location.requestForegroundPermissionsAsync();
if (status !== "granted") {
console.error("Permissão negada para localização.");
return;
}
// Obtém a localização inicial
const location = await Location.getCurrentPositionAsync({});
global.userLocation = location.coords;
await storage.saveData(new Date().valueOf(), location.coords);
console.log("Localização inicial salva:", location.coords);
// Atualiza a localização a cada 5 segundos
locationInterval.current = setInterval(async () => {
try {
const updatedLocation = await Location.getCurrentPositionAsync({});
global.userLocation = updatedLocation.coords;
await storage.saveData(new Date().valueOf(), updatedLocation.coords);
console.log("Nova localização salva:", updatedLocation.coords);
} catch (error) {
console.error("Erro ao obter localização:", error);
}
}, 30000);
};
getLocation();
return () => {
if (locationInterval.current) {
clearInterval(locationInterval.current);
console.log("Intervalo de localização parado.");
}
};
}, []);
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen name="MapScreen" component={MapScreen} />
<Stack.Screen name="ListScreen" component={ListScreen} />
</Stack.Navigator>
</NavigationContainer>
);
}