Windows Phone 7: obtendo a localização GPS atual do dispositivo
Como obter a localização GPS atual em um dispositivo Windows Phone 7 usando GeoCoordinateWatcher e o evento PositionChanged.
Obter a localização GPS atual em um dispositivo Windows Phone é bem simples. Para começar, você precisa adicionar uma referência a System.Device no projeto e depois um using na classe em que quiser pegar a geolocalização.
using System.Device.Location;
Em seguida, declaramos um objeto do tipo GeoCoordinateWatcher. Para um acesso melhor, vou declará-lo como membro da classe e não como variável local dentro de algum método.
GeoCoordinateWatcher geoWatcher = null;
O próximo passo: criar uma instância de GeoCoordinateWatcher, criar um event handler para position changed e começar a ler os dados. Para criar a instância, vá ao construtor da classe e copie o seguinte código:
geoWatcher = new GeoCoordinateWatcher();
Isso cria um objeto GeoCoordinateWatcher na variável que declaramos antes. Caso a localização precise ter certa precisão, a classe oferece um overload do construtor que recebe a precisão desejada como parâmetro.
geoWatcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
Agora crie um event handler para o evento PositionChanged. Você pode digitar geoWatcher.PositionChanged += e pressionar TAB duas vezes; isso vai criar o handler automaticamente. Depois disso, basta usar geoWatcher.Start() para começar a ler coordenadas. Seu código deve ficar assim:
GeoCoordinateWatcher geoWatcher = null;
public MainPage()
{
InitializeComponent();
geoWatcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
geoWatcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(geoWatcher_PositionChanged);
geoWatcher.Start();
}
void geoWatcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
{
throw new NotImplementedException();
}
Em seguida queremos obter as coordenadas da nossa localização. É bem simples. Você pode pegá-las em um objeto GeoCoordinate acessando e.Position.Location no handler, ou, se preferir como valores individuais, salvar e.Position.Location.Latitude, e.Position.Location.Longitude e e.Position.Location.Altitude em três variáveis double. Exemplo abaixo:
void geoWatcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
{
GeoCoordinate currentLocation = e.Position.Location;
double currentAltitude = e.Position.Location.Altitude;
double currentLongitude = e.Position.Location.Longitude;
double currentLatitude = e.Position.Location.Latitude;
}
É isso. Agora, se você quiser se livrar do objeto e parar de ler a localização atual depois de obter a primeira leitura, é só adicionar as seguintes linhas no event handler. Caso contrário, crie um método para isso e chame quando quiser.
geoWatcher.Stop();
geoWatcher.Dispose();
geoWatcher = null;
Para testar o código que escrevi, vou adicionar três textboxes na aplicação para exibir os dados. Você pode fazer o mesmo. Enfim, é isso. Se tiver dúvidas, deixe um comentário que respondo o quanto antes.
Você pode pegar o projeto aqui.
Comments
Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.