Android 位置 GPS 轨迹

Android Location GPS Track

我有一个带有 Android GPS API 地图片段的小型测试应用程序。我使用 FusedLocationProvider。 TarketSDK=29。使用 Java.

只要应用程序处于活动状态,它就可以完美运行。在 locationUpdates 上,我向轨道添加了一个新点,一切看起来都很棒并且保持准确。目标是跟踪我的徒步旅行、总距离和跟踪并将其显示在地图上。效果很好。

一旦我锁定 phone 或失去焦点,更新就会停止,我将不再获得位置更新。

解决方案似乎是:

我已经遍历了文档、Whosebug、我能找到的所有 examples/tutorials、developer.android.com 等。我已经从 GitHub 下载了后两者的示例;他们看起来非常迟钝(可能只有我)。

  1. ForegroundService 与 PendingIntent 的 dis/advantages 是什么?
  2. 当您的 phone 被锁在口袋里或其他某个应用程序处于活动状态时,如何通过一个简单的示例来说明每个应用程序实现位置更新的最小功能?只是最小模板。
  3. 我需要保存在我的应用未激活或 phone 被锁定时发生的位置更新;以便在 activity 恢复到应用程序时填写 Track。

从我的工作应用程序到维护位置更新和保存数据的东西的一些简单的端到端指导会很棒。

好的 - 我已经以迂回的方式回答了我的问题。

我一直在搜索“应用未激活时检索位置更新”。这就引出了后台服务、前台服务、pendingIntents等各种解决方案

我最终发现,如果您只是启动带有通知的前台服务,即使您的 phone 被锁定或您切换活动应用程序,您的应用程序仍会继续接收 LocationUpdates;因为前台服务在同一线程中运行,因此会激活您的应用程序代码(如果我理解正确的原因)。

所以,我开始搜索如何启动前台服务。众所周知,最近有人试图解决这个问题,这在最近的版本中已经发生了多次变化。 developer.android.com 上的在线文档不是最新的。你会花很多时间想知道为什么按照这些文档做事不起作用。

最终,通过搜索如何启动前台服务,我发现了这个简单明了的(非 YouTube 视频 - 你不就是讨厌那些东西吗)教程。 https://androidwave.com/foreground-service-android-example/

我刚刚将此代码添加到我现有的映射代码中,该代码在应用程序处于活动状态时有效,并通过锁定 phone 并将其放入我的口袋并切换应用程序并执行相同的操作进行了测试。看来问题解决了。

更新:添加了代码以计算位置更新的次数和每次更新的平均准确度,将 phone 手持、屏幕开启和应用程序激活作为基准。 Phone 已锁定,或应用未激活在更新次数和准确性方面没有差异。 Phone 锁在口袋里,更新次数没有区别,但精度从平均10m到平均13m;我认为在口袋里是可以预料的。