2009-10-22 32 views
17

Por lo tanto, estoy intentando muestrear las coordenadas gps solo una vez en una aplicación. No quiero crear un objeto LocationListener para obtener constantemente actualizaciones gps. Quiero esperar hasta recibir las coordenadas, y luego proceder a otra tarea.Android LocationManager.getLastKnownLocation() devuelve nulo

Aquí es un fragmento de código

LocationManager lm = (LocationManager)act.getSystemService(Context.LOCATION_SERVICE); 
Criteria crit = new Criteria(); 
crit.setAccuracy(Criteria.ACCURACY_FINE); 
String provider = lm.getBestProvider(crit, true); 
Location loc = lm.getLastKnownLocation(provider); 

La variable loc siempre es nula en el emulador. Intenté usar el comando "geo fix latitude longitude" para configurarlo, y también traté de usar la forma DDMS de configurarlo. Ninguno de los métodos tuvo ningún efecto en el código. Además, el fragmento no está causando ninguna excepción.

Gracias por su ayuda.

+1

Aquí hay un buen ejemplo con el código fuente [http://marakana.com/forums/android/android_examples/42.html](http://marakana.com/forums/android/android_examples/42.html) – Fedor

Respuesta

11

La llamada para solicitar la actualización de una ubicación no está bloqueando, por lo tanto, no esperará allí. Además, es posible que el proveedor en el emulador no se haya iniciado.

¿Una posible verificación podría ser ver si las configuraciones en él deshabilitan el proveedor gps? luego envía geo fix.

Sin embargo, utilizaría Location Listener, sería ideal en su caso ya que necesita una configuración geográfica para continuar. El Listener de ubicación se usa para recibir notificaciones del LocationManager cuando la ubicación ha cambiado. Puede anular el registro del oyente después del primer geofix.

Nota: Puede llevar un tiempo en el dispositivo obtener la ubicación actual, e incluso en el dispositivo esto puede devolver nulo.

+0

Sí, hacer un LocationListener y luego esperar hasta tener una solución con la que estés satisfecho es prácticamente tu única opción. Como se mencionó, puede anular el registro de inmediato. –

+8

Resulta que sin ningún LocationListener no funcionará. Incluso si solo agrega un LocationListener falso que no hace nada, el teléfono obtendrá las coordenadas GPS. –

+0

Supongo que LocationListener actualiza algunas ubicaciones en caché, que usa locationManager. Gracias por publicar. – krishc

0

Trate de usar el MyLocationOverlay, crear un ejecutable que hace lo que tiene que ver con esa localización GPS, y pasarlo a

boolean  runOnFirstFix(java.lang.Runnable runnable) 
      Queues a runnable to be executed as soon as we have a location fix. 

y luego desactivar las actualizaciones de ubicación para el MyLocationOverlay.

Editar: El motivo por el que la ubicación es nula se debe a que en el momento en que se ejecuta el código, no se ha recibido ningún geofix.

+0

I obtener un nulo también, pero la aplicación de mapas de Google sabe dónde estoy instantáneamente, por lo que debe haber alguna solución almacenada allí. –

+0

Usar un ejecutable es inteligente, pero no es necesario ingresar la API de Google Maps para este problema. – Dorje

Cuestiones relacionadas