Я пытаюсь создать очень простое приложение, которое будет получать текущее местоположение устройства и отправлять его на сервер каждые 15 минут или около того.Я использую cordova-plugin-background-fetch (https://github.com/transistorsoft/cordova-plugin-background-fetch), и он прекрасно работает, пробуждая приложение примерно на 15 минут (или около того), но проблема, с которой я сталкиваюсь, заключается в получении координат GPS.
Я пытаюсь получить его с помощью navigator.geolocation.getCurrentPosition и, прежде чем запустить BackgroundFetch, я делаю один тестовый вызов с navigator.geolocation.getCurrentPosition, чтобы проверить, работает ли он, и имеют все разрешения.Это тот же код, что и в примере функции обратного вызова, и он отлично работает при первом тестовом вызове.
Проблема, с которой я сталкиваюсь, заключается в том, что, как только BackgroundFetch пробуждает приложение, в функции обратного вызова navigator.geolocation.getCurrentPosition всегдаошибка (код ошибки 3 - истекло время ожидания).
Я даже пытался заставить его работать с navigator.geolocation.watchPosition, но та же проблема.Первый раз, когда я запускаю это, это работает.Как только обратный вызов запускает его в фоновом режиме, происходит сбой (снова истек тайм-аут).
Я не хочу постоянно наблюдать за положением и разряжать батарею, он мне действительно нужен только один раз каждые 15-30 минут.
Вот код, который я использую, и любая помощь и предложение приветствуются!
Спасибо!
BackgroundFetch.configure(function() {
console.log('[js] BackgroundFetch event received');
navigator.geolocation.getCurrentPosition(function(position){
console.log('we have location now');
$.post('https://www.example.com/api/location/', {
Lat: position.coords.latitude,
Lon: position.coords.longitude
}, function(data){
window.BackgroundFetch.finish();
}, 'json').fail(function(){
window.BackgroundFetch.finish();
});
}, function(error){
console.log('Error code: ' + error.code);
console.log('Error message: ' + error.message);
window.BackgroundFetch.finish();
}, {
enableHighAccuracy: false,
timeout: 20000,
maximumAge: 0
});
}, function(error) {
console.log('- BackgroundFetch failed', error);
}, {
minimumFetchInterval: 15
});