更频繁 Windows 10 UWP 后台 GPS 跟踪
More frequent Windows 10 UWP background GPS tracking
我正在创建一个 UWP 来跟踪 GPS 位置,目前我的想法是利用 IBackgroundTask
,因为我不能依赖用户一直打开屏幕。
而且我想我需要使用 TimeTrigger
在一定的时间间隔内唤醒,然后获取当前的 GPS 位置数据。但是根据TimeTrigger
的文档,我可以设置的最小间隔是15分钟,这给我带来了两个问题:
- 15 分钟对于走路的人来说可能还可以,但对于骑自行车的人来说就很糟糕了。我需要更频繁的内部。
- 对于使用我的 phone 进行的真实世界测试,我必须到外面走 30 分钟才能获得 2 个数据?这听起来有点可笑,而且效率很低。
知道吗,什么是更好的选择?
我在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 的授权。因为这个特性是一种受限的能力。
我没有尝试过授权,所以我不能告诉你这很难。
我正在创建一个 UWP 来跟踪 GPS 位置,目前我的想法是利用 IBackgroundTask
,因为我不能依赖用户一直打开屏幕。
而且我想我需要使用 TimeTrigger
在一定的时间间隔内唤醒,然后获取当前的 GPS 位置数据。但是根据TimeTrigger
的文档,我可以设置的最小间隔是15分钟,这给我带来了两个问题:
- 15 分钟对于走路的人来说可能还可以,但对于骑自行车的人来说就很糟糕了。我需要更频繁的内部。
- 对于使用我的 phone 进行的真实世界测试,我必须到外面走 30 分钟才能获得 2 个数据?这听起来有点可笑,而且效率很低。
知道吗,什么是更好的选择?
我在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 的授权。因为这个特性是一种受限的能力。 我没有尝试过授权,所以我不能告诉你这很难。