Приложение Cordova в фоновом режиме ведет себя странно на Android

Я работаю над приложением Cordova, которое должно отправлять текущее местоположение пользователя на сервер через каждые 10 секунд. Для этого я использую плагин Geolocation. Вот мои фрагменты кода:

$rootScope.startListeningForLocation = function() {
            $rootScope.locationListenerId = setInterval(function() {

              navigator.geolocation.getCurrentPosition(
                  $rootScope.onSuccessForLocation,
                  $rootScope.onErrorForLocation_High,
                  {maximumAge:600000, timeout:7000, enableHighAccuracy: true}
                  );
            }, 5000);

        };

$rootScope.onSuccessForLocation = function(position) {
            var lat = position.coords.latitude, lng=position.coords.longitude;
            gLat = lat;
            gLng = lng; 
}

function startLocationRefreshLoop() {
    if(locationReloadInterval) clearInterval(locationReloadInterval);
    var locationReloadInterval = setInterval(function() {
       $('#btn-location').trigger('click');
    }, LOCATION_UPDATE_INTERVAL);   
}
...

<div id='btn-location' ng-show="false" ng-click='updateLocationToServer()'></div>
...
    $rootScope.updateLocationToServer = function() {
        if(!isConnected()) {
            dbService.logLocation();
        } else {
            var prom = Api.post(apiURL+'/employee/'+$rootScope.user.id+'/current_location', {location:{latitude: gLat, longitude: gLng}});
            prom.then(function(data) {
                console.log('updateLocation::> ' + JSON.stringify(data) + 'gLat:' + gLat + ', gLng' + gLng);
            });
        }

    };

Все работает очень хорошо, когда приложение находится на переднем плане, т.е. приложение получает местоположение, сохраненное в переменных gLat и gLng, и отправляет его на сервер каждые 10 секунд. Но когда он переходит в фоновый режим и телефон находится в спящем режиме, он демонстрирует странное поведение. Странно в том смысле, что вместо звонка updateLocationToServer() каждые 10 секунд он вызывается через каждую минуту, а иногда становится еще хуже. Я не знаю, как 10 секунд интерпретируются как одна минута в спящем режиме. Я хочу знать, каковы возможные причины такой задержки? Мое приложение предназначено в основном для таксистов, которые хотят постоянно следить за ними. Весь бизнес клиента зависит от этой вещи, и все равно, как сделать это или сломать. Ваши предложения, пожалуйста.

Изменить: И мой клиент использует сети 3G и 4G для тестирования приложения.

0 ответов

Другие вопросы по тегам