Você está na página 1de 14

Servicio de localizacin

El servicio de localizacin en WP7 obtiene los datos


de posicionamiento de:
GPS
WIFI
Radio GSM

El sistema busca el equilibrio entre consumo de


batera y rendimiento, en funcin de las necesidades
de la aplicacin
Interfaz de cdigo orientado a eventos administrados

Arquitectura
Tres capas
Hardware (GPS, WIFI, Radio GSM)
Distintos niveles de precisin y consumo energtico
No accesible para el desarrollador

Cdigo nativo
Se comunica directamente con la capa Hardware
Decide qu fuentes utilizar basndose en disponibilidad de datos y los
requisitos de rendimiento de la aplicacin
Tambin se comunica a travs 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 precisin y recibir
los datos de la capa nativa*

Buenas prcticas
Balance entre la exactitud de los datos de localizacin
y el consumo de batera
Relacin inversa entre exactitud y consumo de
batera
Hardware que proporciona datos menos precisos
consume menos (WiFi y radiotelefona)
GPS proporciona mayor exactitud a costa de mayor
consumo
Reglas bsicas
Utilizar menor precisin siempre que sea posible
Activar el servicio de localizacin slo cuando sea necesario y
detenerlo despus

Acceso al servicio de localizacin


GeoCoordinateWatcher es la clase principal de
System.Device.Location
Mtodos
Start() inicia la adquisicin de datos del servicio de
localizacin (asncrono)
TryStart() intenta iniciar el servicio durante un intervalo de
tiempo determinado (sncrono)
Stop() detiene la adquisicin de datos

Propiedades
MovementThreshold umbral del cambio de posicin que
debe tener lugar para que se lance el evento PositionChanged
(valor recomendado: 20 metros)

Eventos
StatusChanged cambio de estado
PositionChanged cambio de posicin

Servicio de localizacin
Estados del servicio de localizacin

Recogidos en la enumeracin 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 localizacin
Ready servicio en ejecucin y recibiendo
datos

Servicio de localizacin
Nivel de exactitud
El servicio de localizacin utiliza varias fuentes para
obtener los datos
Es posible que en determinados momentos algunas
de las fuentes no estn disponibles
La capa de cdigo nativo seleccionar la fuente
ms adecuada en funcin de los datos disponibles
Nuestra aplicacin nicamente deber seleccionar
el nivel de precisin de los datos de localizacin
GeoPositionAccuracy.High
GeoPositionAccuracy.Low
GeocordinateWatcher watcher = new
GeocordinateWatcher(GeoPositionAccuracy.Low);

Utilizar el servicio de localizacin


1. Agregar referencia:
System.Device.dll
Declarar GeoCoordinateWatcher de forma
global para que est en memoria todo el
tiempo que se muestre la pgina

2. Directiva Using:
using System.Device.Location

3. Aadir objeto GeoCoordinateWatcher


public partial class MainPage : PhoneApplicationPage
{
GeoCoordinateWatcher watcher;
}

Aplicacin con localizacin opcional


private void btnIniciar_Click(object sender, RoutedEventArgs e)
{

watcher.Stop();
}

if (watcher == null)
{
watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);

void watcher_StatusChanged(object sender,


GeoPositionStatusChangedEventArgs e)
{

watcher.MovementThreshold = 20;

switch (e.Status)

watcher.StatusChanged += new
EventHandler<GeoPositionStatusChangedEventArgs>(watcher_Statu
sChanged);

{
case GeoPositionStatus.Disabled:

if (watcher.Permission == GeoPositionPermission.Denied)

watcher.PositionChanged += new
EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watc
her_PositionChanged);

txtEstado.Text = Debe habilitar la localizacin


else
txtEstado.Text = Servicio no disponible.";

}
watcher.Start();

break;

case GeoPositionStatus.Initializing:
btnIniciar.IsEnabled = false;

void watcher_PositionChanged(object sender,


GeoPositionChangedEventArgs<GeoCoordinate> e)

break;

case GeoPositionStatus.NoData:

txtEstado.Text = Sin seal";

txtLatitud.Text =
e.Position.Location.Latitude.ToString("0.000");

btnPararServicioLocalizacion.IsEnabled = true;
break;

txtLongitud.Text =
e.Position.Location.Longitude.ToString("0.000");

case GeoPositionStatus.Ready:

txtEstado.Text = Localizacin preparada";


btnPararServicioLocalizacion.IsEnabled = true;

private void btnPararServicioLocalizacion_Click(object sender,


RoutedEventArgs e)
{

break;

}
}

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

2. Creamos una nueva Key


Nombre aplicacin, URL, tipo de aplicacin..

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-o1yv1GpwaI3IG7ryv7eAlbWjsZFxJbYJVr_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--;

Aadir 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/

Você também pode gostar