如果应用程序发送到后台,地理位置将失败

时间:2017-09-13 13:38:27

标签: javascript cordova geolocation gps phonegap

我正在开发一个带有phonegap的简单应用程序,每30秒通过ajax调用将用户当前坐标发送到我的数据库。它工作得很好

$(document).ready(function() {
    setInterval(function() {
            SetLocationUpdates();
        }, 30000);
         });

但是如果用户导航到另一个应用(谷歌地图应用)或者我使用此代码打开谷歌地图应用

<div><a href="geo:41.897096,27.036545">Open maps app</div>

它(通过ajax将坐标发送到我的数据库)失败,因为getCurrentPosition不起作用,也许谷歌地图锁定它我的应用程序仍在工作(我的应用程序和谷歌地图应用程序单独工作。两个应用程序同时工作。也许我的应用程序去背景)

更具体地说,它什么也没做。

 navigator.geolocation.getCurrentPosition(SetLocationUpdates, onError);

此行未执行。  永远不会调用成功或错误回调,设置超时不会影响这一点。我正在使用Phonegap Build从html和javascript编译应用程序。 我该怎么办?

2 个答案:

答案 0 :(得分:2)

您需要一个原生背景地理定位解决方案 - 当您的应用进入后台时,主线程上的JS执行会暂停。

根据我的经验,最具弹性的解决方案是cordova-background-geolocation-lt。我已经在多个操作系统版本上进行了测试,包括Android 8和iOS 11,这在所有版本上都是一致的。

答案 1 :(得分:1)

请注意,当手机处于睡眠状态或应用程序处于后台运行状态时,Firefox目前仍在继续工作。 (我相信这是一个错误)

恕我直言,最合适且电池友好的解决方案依赖于ServiceWorkers从TravelManager接收和操作TravelEvent。

请参阅此Web App,了解后台地理定位与ServiceWorker基础架构的匹配程度。可以找到所有来源here,包括aaa_readme.txt。

请让W3C / IETF标准化这个以及您的UA供应商实施它!