Rastreamento de local do Windows Phone 8.1
Quero realizar um aplicativo que envie continuamente a posição do dispositivo para um serviço da web. Procurando na documentação, encontrei a classe Geolocation e alguns artigos nos quais o rastreamento de posição é discutido:
Como rastrear continuamente a localização do telefone no Windows Phone 8Como executar aplicativos de rastreamento de localização em segundo plano no Windows Phone 8Implementando os dois exemplos de projetos discutidos nesses artigos, notei que o evento geolocator_PositionChanged () não é acionado a cada atualização de posição. Há um atraso (cerca de 10/15 minutos) entre duas execuções do evento. O estranho é que isso acontece mesmo quando o aplicativo é executado em primeiro plano (não apenas em segundo plano). Estou usando o emulador do Windows Phone.
No meu aplicativo, tenho um controle de mapa onde preciso mostrar a posição do usuário e, portanto, preciso que o evento geolocator_PositionChanged () seja acionado corretamente para cada atualização de posição, sem atrasos.
1) Como rastrear (sem atrasos) a posição do dispositivo usando a classe Geolocator?
Pesquisando pela rede, encontrei a classe GeoCoordinateWatcher, que fornece rastreamento de posição continuamente do dispositivo. Este é o código:
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);
}
Funciona: o evento watcher_PositionChanged () é disparado sem atrasos.
2) Por que o GeoCoordinateWatcher não possui atrasos? Qual é a diferença entre a classe GeoCoordinateWatcher e a classe Geolocator?
Por fim, o aplicativo deve enviar a posição do dispositivo ao serviço da web, mesmo quando não estiver ativo. Então, eu preciso de uma tarefa em segundo plano. Como propostoaqui por Romasz, posso usar a classe Geolocator com algumas limitações.
3) Posso usar o GeoCoordinateWhatcher em segundo plano? Se sim, como?
Meu objetivo é criar um aplicativo de rastreamento de posição sem atrasos, que até funcione em segundo plano. Qual é a melhor maneira de fazer isso? O aplicativo deve rastrear a posição do dispositivo e atualizar continuamente o serviço da web (mesmo quando em segundo plano). Como posso fazer isso? Qual é a melhor abordagem? Conheço o ciclo de vida do Windows Phone Apps e posso aceitar algumas limitações para a execução em segundo plano. Quais são os limites de segundo plano?