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