modulo19 localización
Post on 24-May-2015
2.130 Views
Preview:
DESCRIPTION
TRANSCRIPT
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
2. Directiva Using:
using System.Device.Location
3. Añadir objeto GeoCoordinateWatcher
public partial class MainPage : PhoneApplicationPage
{
GeoCoordinateWatcher watcher;
}
Declarar GeoCoordinateWatcher de forma
global para que esté en memoria todo el
tiempo que se muestre la página
Aplicación con localización opcional
private void btnIniciar_Click(object sender, RoutedEventArgs e)
{
if (watcher == null)
{
watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
watcher.MovementThreshold = 20;
watcher.StatusChanged += new
EventHandler<GeoPositionStatusChangedEventArgs>(watcher_Statu
sChanged);
watcher.PositionChanged += new
EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watc
her_PositionChanged);
}
watcher.Start();
}
void watcher_PositionChanged(object sender,
GeoPositionChangedEventArgs<GeoCoordinate> e)
{
txtLatitud.Text =
e.Position.Location.Latitude.ToString("0.000");
txtLongitud.Text =
e.Position.Location.Longitude.ToString("0.000");
}
private void btnPararServicioLocalizacion_Click(object sender,
RoutedEventArgs e)
{
watcher.Stop();
}
void watcher_StatusChanged(object sender,
GeoPositionStatusChangedEventArgs e)
{
switch (e.Status)
{
case GeoPositionStatus.Disabled:
if (watcher.Permission == GeoPositionPermission.Denied)
txtEstado.Text = “Debe habilitar la localización”
else
txtEstado.Text = “Servicio no disponible.";
break;
case GeoPositionStatus.Initializing:
btnIniciar.IsEnabled = false;
break;
case GeoPositionStatus.NoData:
txtEstado.Text = “Sin señal";
btnPararServicioLocalizacion.IsEnabled = true;
break;
case GeoPositionStatus.Ready:
txtEstado.Text = “Localización preparada";
btnPararServicioLocalizacion.IsEnabled = true;
break;
}
}
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/
top related