2

我正在开发一个 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 网络来测试应用程序。

4

0 回答 0