如果 gps 暂时不可用,Cordova 地理定位插件将无法正常工作
Cordova geolocation plugin not working correctly if gps not available for a moment
在我的 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 is 运行ning 也有同样的问题。
保持跟踪服务有效的唯一方法是留在 gps 信号良好的区域,这不是一个好的解决方案。
那我错过了什么?
感谢您的帮助
传递给 on_error
的错误对象中应该有错误代码 and/or 消息。这应该告诉您发生了什么类型的错误(我假设它是超时)。错误码值对应的是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();
};
在我的 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 is 运行ning 也有同样的问题。
保持跟踪服务有效的唯一方法是留在 gps 信号良好的区域,这不是一个好的解决方案。
那我错过了什么?
感谢您的帮助
传递给 on_error
的错误对象中应该有错误代码 and/or 消息。这应该告诉您发生了什么类型的错误(我假设它是超时)。错误码值对应的是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();
};