2011-02-03 28 views

Respuesta

3

Usted puede utilizar el código siguiente para determinar el estado del servicio Lugar:

var watcher = new GeoCoordinateWatcher(); 
if (GeoPositionStatus.Disabled == watcher.Status) 
{ 
    // Watcher is disabled. 
}

más realista, tendrá que prestar más atención a cambiar al estado (sólo porque el servicio no es desactivado no significa que tenga datos de ubicación), por lo que debería echar un vistazo al MSDN Documentation para trabajar con el servicio de Ubicación.

También hay una buena publicación en filtering and emulating location data using the Reactive extensions, que es perfecta para las pruebas previas al dispositivo, aunque para ahorrar tiempo en ese frente, el equipo de Widnows Phone lanzó el Windows Phone GPS Emulator.

+0

Este código no funciona. ¡Siempre muestra "Sin datos"! – user598328

+0

Es posible que necesite llamar 'Start()' primero al observador y ver los cambios de estado (por lo que le di enlaces para leer más). Si está ejecutando en el emulador, casi con certeza tendrá el estado 'NoData' todo el tiempo, que es otra buena razón para usar el Emulador de Windows Phone GPS, que envuelve los servicios de ubicación. –

3

Incluso con el GeoCoordinateWatcher comenzado obtendrá NoData si el sensor está deshabilitado. Lo que usted debe tratar de usar en su lugar es TryStart:

GeoCoordinateWatcher g = new GeoCoordinateWatcher(); 
MessageBox.Show(g.TryStart(false,TimeSpan.FromSeconds(30)).ToString()); 

Si devuelve False, significa que el sensor está desactivado. Si devuelve True, está habilitado. Establezca un período de tiempo de espera adecuado (en el fragmento de arriba, estoy usando 30 segundos) y delegue este proceso a un hilo secundario, para que no cuelgue la IU.

+0

Dato curioso: en mi aplicación, el uso de TryStart con la ubicación desactivada provocó que la aplicación fallara, así que sí ... – Esa

2

Puede agregar un evento StatusChanged a su GeoCoordinateWatcher y probar GeoPositionPermission.Denied en los permisos cuando se activa.

watcher = new GeoCoordinateWatcher(); 
watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged); 
watcher.Start(); 

void watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e) 
{ 

    if (watcher.Permission == GeoPositionPermission.Denied) 
    { 
     // Location services were disabled 
    } 
} 

Espero que ayude.

4
  GeoCoordinateWatcher g = new GeoCoordinateWatcher(); 
      g.Start(); 
      if (g.Permission.Equals(GeoPositionPermission.Granted)) 
      { 
       //Your location services is enabled. Go ahead. 
       //Your codes goes here. 
      } 
      else if (g.Permission.Equals(GeoPositionPermission.Denied) || g.Permission.Equals(GeoPositionPermission.Unknown)) 
      {      
       MessageBox.Show("Location services are disabled. To enable them, Goto Settings - Location - Enable Location Services.", "Location services", MessageBoxButton.OK); 
      } 
+0

respuesta correcta funcionó – LojiSmith

+0

Esto siguió volviendo Desconocido para mí, la respuesta de Chris R proporcionó el estado correcto. – jlunavtgrad

0

Hecho éste basado en TeJ'sanswer.

public override void OnNavigatedTo() 
    {    
     using (var watcher = new GeoCoordinateWatcher()) 
     { 
      try 
      { 
       watcher.Start(); 
      } 
      finally 
      { 
       IsAllowedInSystem = watcher.Permission.Equals(GeoPositionPermission.Granted); 
       watcher.Stop(); 
      } 
     } 
    } 

Y mis aplicaciones ToggleSwitch.IsEnabled binded a IsAllowedInSystem. Cuando cambio a Location Service, lo deshabilito y regreso a la aplicación, mi ToggleSwitch está deshabilitado (también una cadena "Por favor, habilite el servicio de ubicación en la configuración del sistema" en visible). Cuando me cambio al Location Service, lo habilito y regreso a mi aplicación, mi ToggleSwitch está habilitado y el usuario puede configurarlo.

Cuestiones relacionadas