【发布时间】:2015-09-03 15:08:39
【问题描述】:
在我的 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 跟踪。我在安卓和IOS上测试过,安卓运行也出现同样的问题。
保持跟踪服务正常运行的唯一方法是留在 GPS 信号良好的区域,这不是一个好的解决方案。
那么我错过了什么?
感谢您的帮助
【问题讨论】:
-
当您说“应用程序无法获取任何 gps 信号”时,这是否意味着
on_error函数被调用(如果是这样,错误代码是什么)或者on_success或on_error再次被调用? -
是的,on_success 或 on_error 都不会再次被调用。如果我将超时更改为一个小值,就会调用 on_error 函数。
-
60*60*1000 的超时时间太长 - 1 小时后才会调用 on_error;允许 GPS 获取的实际值更像是 30000(30 秒)。传递给 on_error() 的错误代码是什么?
-
您还说“我正在将跟踪服务作为后台服务运行”。您是在使用background geolocation plugin 还是在 Android 上实现了自定义 Java 服务并在 iOS 上手动将后台模式注册为位置?
-
不,我使用github.com/katzer/cordova-plugin-background-mode 作为后台服务,但我编写了自己的跟踪服务来处理 watch 和 getposition 事件。在我的 on_error 函数中,我尝试再次启动手表,但如果它运行一次进入错误函数,它不会退出,这就是为什么我使用 1 小时作为错误函数。
标签: angularjs cordova gps geolocation