SlideShare una empresa de Scribd logo
1 de 14
Descargar para leer sin conexión
Servicio de localización

 El servicio de localización en WP7 obtiene los datos
  de posicionamiento de:
   GPS
   WIFI
   Radio GSM
 El sistema busca el equilibrio entre consumo de
  batería y rendimiento, en función de las necesidades
  de la aplicación
 Interfaz de código orientado a eventos administrados
Arquitectura

 Tres capas
  Hardware (GPS, WIFI, Radio GSM)
    Distintos niveles de precisión y consumo energético
    No accesible para el desarrollador
  Código nativo
    Se comunica directamente con la capa Hardware
    Decide qué fuentes utilizar basándose en disponibilidad de datos y los
     requisitos de rendimiento de la aplicación
    También se comunica a través de Internet con un servicio web de Microsoft
  Interfaz manejada
    DLL incluida con las Windows Phone Developer Tools (System.Device.dll)
    Espacio de nombres System.Device.Location
    Permite iniciar y parar el servicio, configurar el nivel de precisión y recibir
     los datos de la capa nativa*
Buenas prácticas

 Balance entre la exactitud de los datos de localización
  y el consumo de batería
 Relación inversa entre exactitud y consumo de
  batería
 Hardware que proporciona datos menos precisos
  consume menos (WiFi y radiotelefonía)
 GPS proporciona mayor exactitud a costa de mayor
  consumo
 Reglas básicas
   Utilizar menor precisión siempre que sea posible
   Activar el servicio de localización sólo cuando sea necesario y
    detenerlo después
Acceso al servicio de localización

 GeoCoordinateWatcher es la clase principal de
  System.Device.Location
 Métodos
  Start()  inicia la adquisición de datos del servicio de
   localización (asíncrono)
  TryStart()  intenta iniciar el servicio durante un intervalo de
   tiempo determinado (síncrono)
  Stop()  detiene la adquisición de datos
 Propiedades
  MovementThreshold  umbral del cambio de posición que
   debe tener lugar para que se lance el evento PositionChanged
   (valor recomendado: 20 metros)
 Eventos
  StatusChanged  cambio de estado
  PositionChanged  cambio de posición
Servicio de localización

 Estados del servicio de localización
     Recogidos en la enumeración GeoPositionStatus
       Disabled  servicio deshabilitado por el
        usuario o no soportado por el dispositivo
       Initializing  el servicio se está inicializando
       NoData  servicio en funcionamiento pero no
        recibe datos de localización
       Ready  servicio en ejecución y recibiendo
        datos
Servicio de localización

 Nivel de exactitud
   El servicio de localización utiliza varias fuentes para
    obtener los datos
   Es posible que en determinados momentos algunas
    de las fuentes no estén disponibles
   La capa de código nativo seleccionará la fuente
    más adecuada en función de los datos disponibles
   Nuestra aplicación únicamente deberá seleccionar
    el nivel de precisión de los datos de localización
             GeoPositionAccuracy.High
             GeoPositionAccuracy.Low
 GeocordinateWatcher watcher = new
 GeocordinateWatcher(GeoPositionAccuracy.Low);
Utilizar el servicio de localización
1. Agregar referencia:
      System.Device.dll
                        Declarar GeoCoordinateWatcher de forma
                         global para que esté en memoria todo el
2. Directiva Using:          tiempo que se muestre la página
      using System.Device.Location

3. Añadir objeto GeoCoordinateWatcher
      public partial class MainPage : PhoneApplicationPage
      {
           GeoCoordinateWatcher watcher;
      }
Aplicación con localización opcional

private void btnIniciar_Click(object sender, RoutedEventArgs e)             watcher.Stop();
{                                                                       }
    if (watcher == null)                                                void watcher_StatusChanged(object sender,
    {                                                                         GeoPositionStatusChangedEventArgs e)
        watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);   {
        watcher.MovementThreshold = 20;                                     switch (e.Status)
        watcher.StatusChanged += new                                        {
        EventHandler<GeoPositionStatusChangedEventArgs>(watcher_Statu
                                                                                case GeoPositionStatus.Disabled:
        sChanged);
                                                                                  if (watcher.Permission == GeoPositionPermission.Denied)
        watcher.PositionChanged += new
        EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watc                txtEstado.Text = “Debe habilitar la localización”
        her_PositionChanged);                                                     else
    }                                                                                txtEstado.Text = “Servicio no disponible.";
    watcher.Start();                                                              break;
}                                                                               case GeoPositionStatus.Initializing:
                                                                                  btnIniciar.IsEnabled = false;
void watcher_PositionChanged(object sender,                                       break;
      GeoPositionChangedEventArgs<GeoCoordinate> e)
                                                                                case GeoPositionStatus.NoData:
{
                                                                                  txtEstado.Text = “Sin señal";
    txtLatitud.Text =
       e.Position.Location.Latitude.ToString("0.000");                            btnPararServicioLocalizacion.IsEnabled = true;
    txtLongitud.Text =                                                            break;
       e.Position.Location.Longitude.ToString("0.000");                         case GeoPositionStatus.Ready:
}                                                                                 txtEstado.Text = “Localización preparada";
                                                                                  btnPararServicioLocalizacion.IsEnabled = true;
private void btnPararServicioLocalizacion_Click(object sender,                    break;
      RoutedEventArgs e)
                                                                            }
{
                                                                        }
Control BingMaps

1. Crear una cuenta de desarrollador
  https://www.bingmapsportal.com/


2. Creamos una nueva Key
  Nombre aplicación, URL, tipo de aplicación…..


3. Agregamos la referencia
  xmlns:map="clr-namespace:Microsoft.Phone.Controls.
     Maps;assembly=Microsoft.Phone.Controls.Maps“


4. Insertamos el control
  <map:Map Name="miMapa" CredentialsProvider="AwQh_41-o1y-
     v1GpwaI3IG7ryv7eAlbWjsZFxJbYJVr_7GzHg2Rze"></map:Map>
Control BingMaps

 Cambiar el tipo de vista:
     miMapa.Mode = new RoadMode();
     miMapa.Mode = new AerialMode();
 Cambiar el zoom:
     if (miMapa.ZoomLevel < 20)
               miMapa.ZoomLevel++;
     if (miMapa.ZoomLevel > 1)
            miMapa.ZoomLevel--;
 Añadir Pushpin:
     Pushpin pin = new Pushpin();
     pin.Content = "Aquí";
     pin.Background = new SolidColorBrush(Colors.Orange);
     pin.Location = coord;
     miMapa.SetView(coord, 14);//indico las coordenadas y el zoom
     miMapa.Children.Add(pin);
Control BingMaps
Recursos

 Centro de desarrollo de WP7 en MSDN
http://msdn.microsoft.com/es-es/windowsphone/default.aspx

 AppHub
http://create.msdn.com/

 Windows Phone Developer Blog
http://windowsteamblog.com/windows_phone/b/wpdev
 MobileNUG
http://www.mobilenug.es

 Forums
http://forums.create.msdn.com/forums/
Modulo19 Localización

Más contenido relacionado

Más de Eduardo (7)

Modulo8 Servicio De Notificaciones
Modulo8 Servicio De NotificacionesModulo8 Servicio De Notificaciones
Modulo8 Servicio De Notificaciones
 
Modulo7 Bases de Datos
Modulo7 Bases de DatosModulo7 Bases de Datos
Modulo7 Bases de Datos
 
Modulo5 Trucos Web Browser
Modulo5 Trucos Web BrowserModulo5 Trucos Web Browser
Modulo5 Trucos Web Browser
 
Modulo4 Indicadores De Progreso
Modulo4 Indicadores De ProgresoModulo4 Indicadores De Progreso
Modulo4 Indicadores De Progreso
 
Modulo3 Launchers&amp;Choosers
Modulo3 Launchers&amp;ChoosersModulo3 Launchers&amp;Choosers
Modulo3 Launchers&amp;Choosers
 
Modulo 2 Modelo Ejecucion
Modulo 2 Modelo EjecucionModulo 2 Modelo Ejecucion
Modulo 2 Modelo Ejecucion
 
Modulo1 Herramientas De Desarrollo Wp7 1
Modulo1 Herramientas De Desarrollo Wp7 1Modulo1 Herramientas De Desarrollo Wp7 1
Modulo1 Herramientas De Desarrollo Wp7 1
 

Modulo19 Localización

  • 1.
  • 2. Servicio de localización  El servicio de localización en WP7 obtiene los datos de posicionamiento de:  GPS  WIFI  Radio GSM  El sistema busca el equilibrio entre consumo de batería y rendimiento, en función de las necesidades de la aplicación  Interfaz de código orientado a eventos administrados
  • 3. Arquitectura  Tres capas  Hardware (GPS, WIFI, Radio GSM)  Distintos niveles de precisión y consumo energético  No accesible para el desarrollador  Código nativo  Se comunica directamente con la capa Hardware  Decide qué fuentes utilizar basándose en disponibilidad de datos y los requisitos de rendimiento de la aplicación  También se comunica a través de Internet con un servicio web de Microsoft  Interfaz manejada  DLL incluida con las Windows Phone Developer Tools (System.Device.dll)  Espacio de nombres System.Device.Location  Permite iniciar y parar el servicio, configurar el nivel de precisión y recibir los datos de la capa nativa*
  • 4. Buenas prácticas  Balance entre la exactitud de los datos de localización y el consumo de batería  Relación inversa entre exactitud y consumo de batería  Hardware que proporciona datos menos precisos consume menos (WiFi y radiotelefonía)  GPS proporciona mayor exactitud a costa de mayor consumo  Reglas básicas  Utilizar menor precisión siempre que sea posible  Activar el servicio de localización sólo cuando sea necesario y detenerlo después
  • 5. Acceso al servicio de localización  GeoCoordinateWatcher es la clase principal de System.Device.Location  Métodos  Start()  inicia la adquisición de datos del servicio de localización (asíncrono)  TryStart()  intenta iniciar el servicio durante un intervalo de tiempo determinado (síncrono)  Stop()  detiene la adquisición de datos  Propiedades  MovementThreshold  umbral del cambio de posición que debe tener lugar para que se lance el evento PositionChanged (valor recomendado: 20 metros)  Eventos  StatusChanged  cambio de estado  PositionChanged  cambio de posición
  • 6. Servicio de localización  Estados del servicio de localización  Recogidos en la enumeración GeoPositionStatus  Disabled  servicio deshabilitado por el usuario o no soportado por el dispositivo  Initializing  el servicio se está inicializando  NoData  servicio en funcionamiento pero no recibe datos de localización  Ready  servicio en ejecución y recibiendo datos
  • 7. Servicio de localización  Nivel de exactitud  El servicio de localización utiliza varias fuentes para obtener los datos  Es posible que en determinados momentos algunas de las fuentes no estén disponibles  La capa de código nativo seleccionará la fuente más adecuada en función de los datos disponibles  Nuestra aplicación únicamente deberá seleccionar el nivel de precisión de los datos de localización GeoPositionAccuracy.High GeoPositionAccuracy.Low GeocordinateWatcher watcher = new GeocordinateWatcher(GeoPositionAccuracy.Low);
  • 8. Utilizar el servicio de localización 1. Agregar referencia: System.Device.dll Declarar GeoCoordinateWatcher de forma global para que esté en memoria todo el 2. Directiva Using: tiempo que se muestre la página using System.Device.Location 3. Añadir objeto GeoCoordinateWatcher public partial class MainPage : PhoneApplicationPage { GeoCoordinateWatcher watcher; }
  • 9. Aplicación con localización opcional private void btnIniciar_Click(object sender, RoutedEventArgs e) watcher.Stop(); { } if (watcher == null) void watcher_StatusChanged(object sender, { GeoPositionStatusChangedEventArgs e) watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High); { watcher.MovementThreshold = 20; switch (e.Status) watcher.StatusChanged += new { EventHandler<GeoPositionStatusChangedEventArgs>(watcher_Statu case GeoPositionStatus.Disabled: sChanged); if (watcher.Permission == GeoPositionPermission.Denied) watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watc txtEstado.Text = “Debe habilitar la localización” her_PositionChanged); else } txtEstado.Text = “Servicio no disponible."; watcher.Start(); break; } case GeoPositionStatus.Initializing: btnIniciar.IsEnabled = false; void watcher_PositionChanged(object sender, break; GeoPositionChangedEventArgs<GeoCoordinate> e) case GeoPositionStatus.NoData: { txtEstado.Text = “Sin señal"; txtLatitud.Text = e.Position.Location.Latitude.ToString("0.000"); btnPararServicioLocalizacion.IsEnabled = true; txtLongitud.Text = break; e.Position.Location.Longitude.ToString("0.000"); case GeoPositionStatus.Ready: } txtEstado.Text = “Localización preparada"; btnPararServicioLocalizacion.IsEnabled = true; private void btnPararServicioLocalizacion_Click(object sender, break; RoutedEventArgs e) } { }
  • 10. Control BingMaps 1. Crear una cuenta de desarrollador https://www.bingmapsportal.com/ 2. Creamos una nueva Key Nombre aplicación, URL, tipo de aplicación….. 3. Agregamos la referencia xmlns:map="clr-namespace:Microsoft.Phone.Controls. Maps;assembly=Microsoft.Phone.Controls.Maps“ 4. Insertamos el control <map:Map Name="miMapa" CredentialsProvider="AwQh_41-o1y- v1GpwaI3IG7ryv7eAlbWjsZFxJbYJVr_7GzHg2Rze"></map:Map>
  • 11. Control BingMaps  Cambiar el tipo de vista: miMapa.Mode = new RoadMode(); miMapa.Mode = new AerialMode();  Cambiar el zoom: if (miMapa.ZoomLevel < 20) miMapa.ZoomLevel++; if (miMapa.ZoomLevel > 1) miMapa.ZoomLevel--;  Añadir Pushpin: Pushpin pin = new Pushpin(); pin.Content = "Aquí"; pin.Background = new SolidColorBrush(Colors.Orange); pin.Location = coord; miMapa.SetView(coord, 14);//indico las coordenadas y el zoom miMapa.Children.Add(pin);
  • 13. Recursos  Centro de desarrollo de WP7 en MSDN http://msdn.microsoft.com/es-es/windowsphone/default.aspx  AppHub http://create.msdn.com/  Windows Phone Developer Blog http://windowsteamblog.com/windows_phone/b/wpdev  MobileNUG http://www.mobilenug.es  Forums http://forums.create.msdn.com/forums/