私は、定期的にユーザーの最後の場所を検出する必要があるアプリケーションに取り組んでいます。Google で見つけたいくつかのチュートリアルを使用しましたが、どれも機能せず、助けが必要です。これが私のコードのサンプルです。
app.xaml.cs 内に schdeuledactionservice を作成しました。そして、WMAppManifest.xml 内に拡張タスクを追加しました。
WMAppManifest.xml から
<ExtendedTask Name="BackgroundTask">
<BackgroundServiceAgent Specifier="ScheduledTaskAgent" Name="ToDoSchedulerAgent" Source="ToDoSchedulerAgent" Type="ToDoSchedulerAgent.TaskScheduler" />
</ExtendedTask>
スケジューラ エージェント コード:
public class TaskScheduler : ScheduledTaskAgent
{
public const string Name = "ToDoLocator";
public static Location location;
protected override void OnInvoke(ScheduledTask task)
{
if (task is PeriodicTask)
{
GeoCoordinateWatcher watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High)
{
MovementThreshold = 10
};
watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);
watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged);
ScheduledActionService.LaunchForTest(task.Name, TimeSpan.FromSeconds(3));
watcher.Start();
}
NotifyComplete();
}
void watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e)
{
throw new NotImplementedException();
}
void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
{
Deployment.Current.Dispatcher.BeginInvoke(() => PositionChanged(e));
}
void PositionChanged(GeoPositionChangedEventArgs<GeoCoordinate> e)
{
location = new Location();
location.Latitude = e.Position.Location.Latitude;
location.Longitude = e.Position.Location.Longitude;
}
}