Я хочу реализовать приложение, которое постоянно отправляет позицию устройства в веб-службу. В документации я нашел класс Geolocation и некоторые статьи, где обсуждалось отслеживание местоположения:
- Как отслеживать местоположение телефона для Windows Phone 8
- Как запустить приложения для отслеживания местоположения в фоновом режиме для Windows Phone 8
Реализация обоих примерных проектов, обсуждаемых в этих статьях, я заметил, что событие geolocator_PositionChanged() не запускается при каждом обновлении позиции. Задержка (около 10/15 минут) между двумя исполнением события. Странно, что это происходит даже тогда, когда приложение выполняется на переднем плане (не только в фоновом режиме). Я использую эмулятор Windows Phone.
В моем приложении у меня есть элемент управления картой, где мне нужно показать позицию пользователя, и поэтому мне нужно, чтобы событие geolocator_PositionChanged() было правильно запущено для каждого обновления позиции без задержек.
1) Как я могу отслеживать (без задержек) позицию устройства с использованием класса Geolocator?
Поиск по сети, я нашел класс GeoCoordinateWatcher, который обеспечивает непрерывное отслеживание местоположения устройства. Это код:
public MainPage()
{
InitializeComponent();
this.GetCoordinate();
}
private void GetCoordinate()
{
var watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High)
{
MovementThreshold = 1
};
watcher.PositionChanged += this.watcher_PositionChanged;
watcher.Start();
}
private void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
{
//Get position data
var pos = e.Position.Location;
//Update mypos object
mypos.update(pos.Latitude, pos.Longitude);
//Update data on the main interface
MainMap.SetView(mypos.getCoordinate(), MainMap.ZoomLevel, MapAnimationKind.Parabolic);
}
Он работает: событие watcher_PositionChanged() запускается без задержек.
2) Почему у GeoCoordinateWatcher нет задержек? В чем разница между классом GeoCoordinateWatcher и классом Geolocator?
Наконец, приложение должно отправить позицию устройства в веб-службу, даже если она не активна. Итак, мне нужна фоновая задача. Как предложил здесь Romasz, я могу использовать класс Geolocator с некоторыми ограничениями.
3) Могу ли я использовать GeoCoordinateWhatcher в фоновом режиме? Если да, то как?
Моя цель - реализовать приложение отслеживания местоположений без задержек, которое даже работает в фоновом режиме. Каков наилучший способ сделать это? Приложение должно отслеживать позицию устройства и постоянно обновлять веб-службу (даже в фоновом режиме). Как я могу это сделать? Каков наилучший подход? Я знаю о жизненном цикле Windows Phone Apps, и я могу принять некоторые ограничения для выполнения фона. Каковы пределы фона?