更频繁 Windows 10 UWP 后台 GPS 跟踪

More frequent Windows 10 UWP background GPS tracking

我正在创建一个 UWP 来跟踪 GPS 位置,目前我的想法是利用 IBackgroundTask,因为我不能依赖用户一直打开屏幕。

而且我想我需要使用 TimeTrigger 在一定的时间间隔内唤醒,然后获取当前的 GPS 位置数据。但是根据TimeTrigger的文档,我可以设置的最小间隔是15分钟,这给我带来了两个问题:

知道吗,什么是更好的选择?

我在2016年有做位置历史UWP app的经验,分享一下我的想法。我希望这可以帮助你。

1) 后台任务

基本上,我认为这种方式不利于位置跟踪。原因是 .. 1) 是的,15 分钟的间隔对于位置跟踪来说太长了,并且 2) OS 可以在通知或不通知应用程序的情况下撤销和抑制后台任务的运行。从应用程序管理这种情况太难了。

2) 扩展执行

使用此功能,您可以防止应用在后台或最小化时进入挂起状态。 App keep 运行 - 这意味着您可以使用顺序调度计时器解决方案以您喜欢的间隔(如 1 分钟、45 秒等)获取位置。并且,扩展执行可以选择使用 "ExtendedExecutionReason.LocationTracking" 枚举.

但是这个功能也有一个考虑点。 OS 可以撤销 - 随时终止您的会话 - 电池电量不足,CPU 时间不足,应用耗尽资源等。 当会话被撤销时,我们无能为力——我们不能重新启动会话,因为撤销情况没有解决——立即再次撤销。这意味着位置数据丢失。 就我而言,这 - 位置数据丢失 - 对于我的应用场景来说是不可接受的。我意识到扩展执行不适合我的应用程序。

但是,如果可以接受 - 比如作为健身应用或爱好应用 - ,扩展执行是不错的选择。

备注

  • 如果你有交流电源,撤销将很少见。扩展执行是不错的选择。
  • 您可以使用限制能力来防止撤销扩展执行。但是,如果使用此功能,您将无法使用商店来部署您的应用程序。

3) GetGeopositionHistoryAsync

我认为这最适合 UWP 应用方案 - 不依赖于 BackgroundTask 或扩展执行。 OS 本身保留位置历史 - 我们可以用这个 API 检索它。我们不必自己定期获取位置数据。

但是有一个障碍 - 要使用此 API,您需要获得 Microsoft 的授权。因为这个特性是一种受限的能力。 我没有尝试过授权,所以我不能告诉你这很难。

App capability declarations