import { BackgroundGeolocationPlugin } from '@capacitor-community/background-geolocation'; import { registerPlugin } from '@capacitor/core'; const BackgroundGeolocation = registerPlugin( 'BackgroundGeolocation' ); const backgroundGeolocationConfig = { // If the "backgroundMessage" option is defined, the watcher will // provide location updates whether the app is in the background or the // foreground. If it is not defined, location updates are only // guaranteed in the foreground. This is true on both platforms. // On Android, a notification must be shown to continue receiving // location updates in the background. This option specifies the text of // that notification. backgroundMessage: 'Cancel to prevent battery drain.', // The title of the notification mentioned above. Defaults to "Using // your location". backgroundTitle: 'Tracking You.', // Whether permissions should be requested from the user automatically, // if they are not already granted. Defaults to "true". requestPermissions: true, // If "true", stale locations may be delivered while the device // obtains a GPS fix. You are responsible for checking the "time" // property. If "false", locations are guaranteed to be up to date. // Defaults to "false". stale: false, // The minimum number of metres between subsequent locations. Defaults // to 0. distanceFilter: 5, }; export const startBackgroundGeolocation = async (newLocationHandler: any) => { const locationHandler = (location: any, error: any) => { console.log('com.dyomedea.dyomedea LOG', ' - Callback'); if (error) { if (error.code === 'NOT_AUTHORIZED') { if ( window.confirm( 'This app needs your location, ' + 'but does not have permission.\n\n' + 'Open settings now?' ) ) { // It can be useful to direct the user to their device's // settings when location permissions have been denied. The // plugin provides the 'openSettings' method to do exactly // this. BackgroundGeolocation.openSettings(); } } return console.error('com.dyomedea.dyomedea LOG', ' - error: ', error); } console.log(location); if (location !== undefined) { newLocationHandler(location); } return console.log('com.dyomedea.dyomedea LOG', ' - location: ', location); }; var watcher_id; console.log('com.dyomedea.dyomedea LOG', ' - Adding the watcher'); await BackgroundGeolocation.addWatcher( backgroundGeolocationConfig, locationHandler ) .then(function after_the_watcher_has_been_added(id) { // When a watcher is no longer needed, it should be removed by calling // 'removeWatcher' with an object containing its ID. console.log('com.dyomedea.dyomedea LOG', ' - Watcher added'); watcher_id = id; /*BackgroundGeolocation.removeWatcher({ id: watcher_id, }); */ }) .catch((reason) => { console.error('com.dyomedea.dyomedea LOG', ' - reason: ', reason); }); return watcher_id; }; export const stopBackgroundGeolocation = (watcher_id: any) => { BackgroundGeolocation.removeWatcher({ id: watcher_id, }); };