import { Dispatch, useEffect, useState } from 'react' import { DarkTheme, DefaultTheme, ThemeProvider } from '@react-navigation/native' import { Stack } from "expo-router" import { useColorScheme } from '@/hooks/useColorScheme' import { StatusBar } from 'expo-status-bar' import * as Location from 'expo-location' import * as TaskManager from 'expo-task-manager' import { Platform } from 'react-native' TaskManager.defineTask("fetch-geolocation", async ({ data, error }: any) => { if (error) { console.error(error) return } const { locations } = data for (let location of locations) { console.log(location) } }) async function manageGelocation(setLocation: Dispatch) { await Location.enableNetworkProviderAsync().catch(error => alert(error)) const { status: foregroundStatus } = await Location.requestForegroundPermissionsAsync() if (foregroundStatus === 'granted') { setLocation(await Location.getLastKnownPositionAsync()) const { status: backgroundStatus } = await Location.requestBackgroundPermissionsAsync() if (backgroundStatus === 'granted') { if (Platform.OS !== "web") { if (!await Location.hasStartedLocationUpdatesAsync("fetch-geolocation")) { await Location.startLocationUpdatesAsync("fetch-geolocation", { accuracy: Location.Accuracy.BestForNavigation, activityType: Location.ActivityType.OtherNavigation, deferredUpdatesInterval: 100, foregroundService: { killServiceOnDestroy: false, notificationBody: "Géolocalisation activée pour « Traintrape-moi »", notificationTitle: "Traintrape-moi", notificationColor: "#FFFF00", } }) } } else { await Location.watchPositionAsync({accuracy: Location.Accuracy.BestForNavigation}, location_nouveau => setLocation(location_nouveau)) } } else { alert("Vous devez activer votre géolocalisation en arrière-plan pour utiliser l'application.") } } else { alert("Vous devez activer votre géolocalisation pour utiliser l'application.") } } export default function RootLayout() { const [location, setLocation] = useState(null) useEffect(() => { manageGelocation(setLocation) return () => { Location.stopLocationUpdatesAsync("fetch-geolocation") } }, []) const colorScheme = useColorScheme() return }