Отслеживание местоположения в фоновом режиме с PhoneGap - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь создать очень простое приложение, которое будет получать текущее местоположение устройства и отправлять его на сервер каждые 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
    });

1 Ответ

0 голосов
/ 25 марта 2019

Мне кажется, проблема в том, что пользователь должен физически принимать сервисы гео-локации, чтобы его можно было получить

...