UWP位置跟踪,即使应用程序已暂停

本文关键字:应用程序 暂停 位置 跟踪 UWP | 更新日期: 2023-09-27 18:20:52

我正在开发一个运行UWP的应用程序,我想实时记录用户的位置。我在谷歌上读过很多线程,得到了一些解决方案:ExtendedExecutionSession,应用程序服务。但这两种解决方案有一个相同的问题:当应用程序挂起时,无法记录位置。我知道uwp中的后台任务,它似乎需要一个触发器(例如SystemTrigger)来启动。当应用程序被挂起以跟踪/记录位置时,是否可以启动(不要使用触发器,而是直接调用)自定义后台任务?

UWP位置跟踪,即使应用程序已暂停

首先我想回答您的问题:

是否可以启动(不要使用触发器,而是直接调用)当应用程序被挂起以跟踪/记录位置时的自定义后台任务?

是的,您可以使用ApplicationTrigger类来完成此操作。看见https://msdn.microsoft.com/en-us/library/windows/apps/windows.applicationmodel.background.applicationtrigger(它仍然是一个触发器,因为API需要它,但它基本上直接从应用程序调用后台任务)

但这里有一些用于进行位置跟踪和诸如此类的事情的示例:https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/Geolocation

我认为您正在寻找的是LocationTrigger(请参阅:https://msdn.microsoft.com/en-us/library/windows/apps/windows.applicationmodel.background.locationtrigger)它用于Geofence样本(Scenario5_GeofenceBackgroundTask.xaml.cs)

基本上你是这样注册的:(它来自样本代码)

BackgroundTaskBuilder geofenceTaskBuilder = new BackgroundTaskBuilder();
geofenceTaskBuilder.Name = SampleBackgroundTaskName;
geofenceTaskBuilder.TaskEntryPoint = SampleBackgroundTaskEntryPoint;
var trigger = new LocationTrigger(LocationTriggerType.Geofence);
geofenceTaskBuilder.SetTrigger(trigger);

_geofenceTask = geofenceTaskBuilder.Register();
//...and do the rest (but look into the sample..everything is from there...)