Windows Phone 7 – Tutorial XXXIV – Localización Tutorial I

En esta serie de artículos trataremos de aprender como utilizar el GPS de nuestro Windows Phone además de aprovecharnos del control Bing Maps. En este primer articulo trataremos el objeto GeoCoordinateWatcher, este objeto es el que nos proporcionará el acceso al GPS del teléfono.Esta clase se encuentra en la dll System.Device.dll que tendremos que hacer referencia en nuestros proyectos.

Lo primero que tenemos que saber es que este objeto nos proporciona el estado del GPS del teléfono a través de la enumeración GeoPositionStatus, para detectar los cambios de estado de nuestro GPS y actuar en consecuencia en nuestra aplicación utilizaremos el evento StatusChanged.

Cuando instanciamos el objeto su estado siempre será NoData, hasta que no arranquemos el servicio con Start no cambiara de estado comprobando si el GPS esta disponible o no indicándolo en el estado. En este sencillo código podemos probar la aplicación.

 

1 GeoCoordinateWatcher geowatcher; 2 private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e){ 3 geowatcher = new GeoCoordinateWatcher(); 4 geowatcher.StatusChanged += geowatcher_StatusChanged; 5 } 6 private void StartButton_Click(object sender, RoutedEventArgs e){ 7 geowatcher.Start(); 8 } 9 private void StopButton_Click(object sender, RoutedEventArgs e){ 10 geowatcher.Stop(); 11 } 12 private void geowatcher_StatusChanged(object sender, 13 GeoPositionStatusChangedEventArgs e){ 14 this.Dispatcher.BeginInvoke(() = > { 15 this.StatusText.Text = e.Status.ToString(); 16 }); 17 } 18

Si se nos muestra el estado Disabled debemos de chequear la propiedad Permission de la instancia de nuestro objeto GeoCoordinateWatcher, esta propiedad devolverá Granted, Denied, o Unknown, valores de la enumeración GeoPositionPermission , dependiendo de estos valores deberemos de solicitar al usuario permiso para que nuestra aplicación acceda a al GPS y recoger la posición.

Al código anterior en el evento Status_Changed podemos actuar antes los diferentes estados

1 if (geowatcher.Status == GeoPositionStatus.Disabled) 2 { 3 if (geowatcher.Permission == GeoPositionPermission.Denied) 4 { 5 MessageBox.Show("El servicio de localización esta deshabilitado."); 6 } 7 else 8 { 9 MessageBox.Show("El servicio de localización no esta funcionando."); 10 } 11 geowatcher.StatusChanged -= new EventHandler<GeoPositionStatusChangedEventArgs>(geowatcher_StatusChanged); 12 geowatcher.Stop(); 13 } 14 else if (geowatcher.Status == GeoPositionStatus.Initializing) 15 { 16 userMessage.Text = "Inicializando localización"; 17 } 18 else if (geowatcher.Status == GeoPositionStatus.NoData) 19 { 20 MessageBox.Show("Los datos de localización no esta disponible"); 21 } 22 else if (geowatcher.Status == GeoPositionStatus.Ready) 23 { 24 25 }

A la hora de utilizar el GPS tendremos que tener en cuenta si queremos que recoja la posición del GPS, de la Wifi o de la red de móvil, dependiendo de la aplicación y sus necesidades será necesario una alta precisión o no. Esto es importante para que gestionemos bien el gasto de batería. Este valor lo podemos indicar a partir de la propiedad DesiredAccuracy  y se lo indicaremos con la enumeración GeoPositionAccuracy que contiene los valores High y Low, por defecto es Low con lo que utilizará la red de móvil o wifi para coger la posición, si queremos que tire del GPS le tendremos que indicar el valor High.

En el siguiente articulo veremos como coger la posición del GPS una vez que lo tenemos en estado Ready.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *