93 lines
3.2 KiB
TypeScript
93 lines
3.2 KiB
TypeScript
import { BackgroundGeolocationPlugin } from '@capacitor-community/background-geolocation';
|
|
import { registerPlugin } from '@capacitor/core';
|
|
|
|
const BackgroundGeolocation = registerPlugin<BackgroundGeolocationPlugin>(
|
|
'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,
|
|
});
|
|
};
|