如果gps暂时不可用,Cordova地理定位插件无法正常工作

时间:2015-09-03 15:08:39

标签: angularjs cordova gps geolocation

在我的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信号良好的区域,这不是一个好的解决方案。

那么我错过了什么?

感谢您提供任何帮助

1 个答案:

答案 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();
};