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

Posted

技术标签:

【中文标题】如果应用程序发送到后台,地理定位会失败【英文标题】:Geolocation fails if app sent to background 【发布时间】:2017-09-13 13:38:27 【问题描述】:

我正在开发一个带有 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 从 htmljavascript 编译应用程序。 我该怎么办?

【问题讨论】:

这应该可以解决您的问题。 github.com/pmwisdom/cordova-background-geolocation-services 【参考方案1】:

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

根据我的经验,最具弹性的解决方案是cordova-background-geolocation-lt。我已经在多个操作系统版本上进行了测试,包括 android 8 和 ios 11,并且在所有版本上都可以正常运行。

【讨论】:

js 代码 execute.ajax 调用或其他东西有效。只是地理定位不起作用。我尝试其他背景地理定位但不起作用...geolacation-lt 不是免费的我无法尝试 js code execute.ajax call or other things works:是的,但是您的应用程序进程可以随时被 Android 操作系统终止:即不可靠。 .geolacation-lt is not free I can not try iy:cordova-background-geolocation-lt 对于调试版本是免费的,所以你可以试试。它只需要发布版本的许可证。 所以你建议我使用背景地理位置而不是自定义地理位置来提高性能和可靠性...谢谢@daveAlden ....我将删除自定义地理位置,我将使用后台地理位置进行测试 @DaveAlden "你需要一个原生的后台地理定位解决方案" 你认为为什么 W3C 没有提供像 github.com/RichardMaher/Brotkrumen 这样的 Service Worker 解决方案? (除了 Transistor Software 会破产,Google 的 Flutter 会被抛弃)【参考方案2】:

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

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

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

请要求 W3C/IETF 对此进行标准化,并要求您的 UA 供应商实施它!

【讨论】:

以上是关于如果应用程序发送到后台,地理定位会失败的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序被杀死时反应原生背景地理定位

带有地理围栏的 html5 地理定位 API

Geolocation地理定位

科尔多瓦后台地理定位支持,一段时间后没有应用程序终止

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

组合地理定位框架