在我的angularjs / ionic应用程序中,我将跟踪服务作为后台服务运行。
为此我运行地理定位手表。好吧,如果由于某种原因设备(Iphone 5s)没有获得gps信号,应用程序之后无法获得任何gps信号。无论设备在哪里。重新启动跟踪服务的唯一方法是打开默认的地图应用程序。在地图应用程序找到我的位置后,我的应用程序也获得了gps信号。解释问题很复杂,如果我无法解释问题,那就很抱歉。
我的代码如下所示:
var startWatch = function() {
var watchOptions = {
frequency : trackingFrequency*1000,
timeout : 60*60*1000,
maximumAge: 10*1000,
enableHighAccuracy: true // may cause errors if true
};
//watch = $cordovaGeolocation.watchPosition(watchOptions);
watch = navigator.geolocation.watchPosition(on_success,on_error,watchOptions);
};
var on_error = function(err) {
alert("Bitte schalten Sie die Ortungsdienste ein und starten Sie die Applikation neu.");
startWatch();
};
我尝试了两个插件,来自ngcordova的$ cordovaGeolocation插件和默认插件,但两种情况下的行为都是相同的。如果我丢失gps信号,它会完全丢失,直到我使用原生应用程序启动gps跟踪。我在Android和IOS上测试过,Android也在运行同样的问题。
保持跟踪服务活着的唯一方法是留在gps信号良好的区域,这不是一个好的解决方案。
那么我错过了什么?
感谢您提供任何帮助
答案 0 :(得分:2)
传递给on_error
的错误对象中应该有错误代码和/或消息。这应该告诉你发生了什么类型的错误(我认为它是TIMEOUT)。错误代码值对应于PositionError object:
PositionError.PERMISSION_DENIED = 1;
PositionError.POSITION_UNAVAILABLE = 2;
PositionError.TIMEOUT = 3;
此外,在尝试重置观察者时,请确保在添加另一个观察者之前清除现有观察者。所以尝试这样的事情:
var watch = null;
var startWatch = function() {
var watchOptions = {
frequency : trackingFrequency*1000,
timeout : 30*1000,
maximumAge: 10*1000,
enableHighAccuracy: true // may cause errors if true
};
if(watch !== null){
navigator.geolocation.clearWatch(watch);
}
watch = navigator.geolocation.watchPosition(on_success,on_error,watchOptions);
};
var on_error = function(err) {
alert("Bitte schalten Sie die Ortungsdienste ein und starten Sie die Applikation neu." + "\ncode: " + err.code + "\nmessage: " + err.message);
startWatch();
};