-
Notifications
You must be signed in to change notification settings - Fork 441
Open
Description
Required Reading
- Confirmed
Plugin Version
4.16.5
Mobile operating-system(s)
- iOS
- Android
Device Manufacturer(s) and Model(s)
iPhone 16 Pro
Device operating-systems(s)
iOS 18.6
React Native / Expo version
0.79.6, Expo 53
What do you require assistance about?
Having this config, it let during vehicle ride trigger my location detection even I excluded it from list.
Also would like to know if there is any way to make this config better, or what settings are not necessary
I just need to:
- Locate user every 15m
- When user is not moving, last time save his location, and when he moves again, start location again
- When user is in car, dont track him (Bcs it triggers too many calls to DB too quickly with DistanceFilter set to 15m).
Thanks for help!
[Optional] Plugin Code and/or Config
useEffect(() => {
if (!userId) {
console.log('[useLocation] Waiting for userId...', { userId });
return;
}
let onLocationSubscription: { remove: () => void } | null = null;
let onHttpSubscription: { remove: () => void } | null = null;
let onMotionChangeSubscription: { remove: () => void } | null = null;
let onProviderChangeSubscription: { remove: () => void } | null = null;
const setupBackgroundLocation = async () => {
console.log(
'[useLocation] Setting up BackgroundGeolocation with userId:',
userId
);
// Get access token for HTTP requests
const accessToken = await tokenManager.getAccessToken();
const locationUrl = `${API_CONFIG.BASE_URL}${ENDPOINTS.USERS.LOCATION(userId)}`;
console.log('[useLocation] Location URL:', locationUrl);
console.log('[useLocation] Access token available:', !!accessToken);
// Location event listener
onLocationSubscription = BackgroundGeolocation.onLocation(event => {
if (!event.coords?.latitude || !event.coords?.longitude) return;
const currentLocation: LocationType = {
latitude: event.coords.latitude,
longitude: event.coords.longitude,
};
console.log('[useLocation] 📍 onLocation:', {
lat: currentLocation.latitude.toFixed(6),
lng: currentLocation.longitude.toFixed(6),
activity: event.activity?.type,
isMoving: event.is_moving,
odometer: Math.round(event.odometer || 0),
});
locationRef.current = currentLocation;
setLocation(currentLocation);
});
onMotionChangeSubscription = BackgroundGeolocation.onMotionChange(
event => {
console.log('[useLocation] 🚶 onMotionChange:', {
isMoving: event.isMoving,
location: event.location?.coords
? `${event.location.coords.latitude.toFixed(6)}, ${event.location.coords.longitude.toFixed(6)}`
: 'N/A',
});
}
);
onProviderChangeSubscription = BackgroundGeolocation.onProviderChange(
event => {
console.log('[useLocation] ⚙️ onProviderChange:', {
enabled: event.enabled,
status: event.status,
gps: event.gps,
network: event.network,
});
}
);
onHttpSubscription = BackgroundGeolocation.onHttp(event => {
console.log('[useLocation] 🌐 HTTP Response:', {
success: event.success,
status: event.status,
responseText: event.responseText?.substring(0, 200),
});
});
const state = await BackgroundGeolocation.ready({
url: locationUrl,
method: 'PATCH' as any,
headers: accessToken
? {
Authorization: `Bearer ${accessToken}`,
'Content-Type': 'application/json',
}
: {
'Content-Type': 'application/json',
},
locationTemplate:
'{"latitude":<%= latitude %>,"longitude":<%= longitude %>}',
httpRootProperty: '.', // Place data in root of JSON
autoSync: true,
autoSyncThreshold: 0,
batchSync: false,
httpTimeout: 30000,
maxRecordsToPersist: 100,
locationsOrderDirection: 'ASC',
disableLocationAuthorizationAlert: true,
locationAuthorizationRequest: 'Always',
desiredAccuracy: BackgroundGeolocation.DESIRED_ACCURACY_NAVIGATION,
distanceFilter: 15,
debug: __DEV__,
logLevel: __DEV__
? BackgroundGeolocation.LOG_LEVEL_VERBOSE
: BackgroundGeolocation.LOG_LEVEL_OFF,
stopOnTerminate: false,
startOnBoot: true,
showsBackgroundLocationIndicator: false,
triggerActivities: 'on_foot, walking, running',
// Stop detection - go to STATIONARY after stopTimeout
disableStopDetection: false, // Enable stop detection
stopTimeout: 5, // 5 minutes without movement -> STATIONARY
disableMotionActivityUpdates: false,
stationaryRadius: 5,
heartbeatInterval: 60,
locationUpdateInterval: 10000,
fastestLocationUpdateInterval: 5000,
locationTimeout: 60,
deferTime: 0,
pausesLocationUpdatesAutomatically: false,
isMoving: true,
});
setIsPluginReady(true);
};
setupBackgroundLocation();
return () => {
onLocationSubscription?.remove();
onHttpSubscription?.remove();
onMotionChangeSubscription?.remove();
onProviderChangeSubscription?.remove();
};
}, [userId, setLocation]);[Optional] Relevant log output
Metadata
Metadata
Assignees
Labels
No labels