2

私は、10秒ごとにユーザーの現在の場所をサーバーに送信する必要があるCordovaアプリケーションに取り組んでいます。そのために、Geolocation pluginを使用しています。ここに私のコードスニペットがあります:

$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 秒ごとに呼び出されるのではなく、1 分ごとに呼び出され、時にはさらに悪化するという意味で奇妙です。スリープ モードで 10 秒が 1 分と解釈される仕組みがわかりません。このような遅延の考えられる理由を知りたいですか? 私のアプリケーションは主にタクシー運転手向けで、常に追跡したいと考えています。クライアントのビジネス全体は、これに依存しており、成功するか失敗するかはそのようなものです。あなたの提案をお願いします。

編集: 私のクライアントは 3G および 4G ネットワークを使用してアプリをテストしています。

4

0 に答える 0