Android LocationManager.getLastKnownLocation () devuelve null

Así que estoy tratando de 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 pasar a otra tarea.

Aquí hay 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 tu ayuda.

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 la configuración en ella deshabilita el proveedor gps? luego envía geo fix.

Sin embargo, utilizaría el Escuchador de ubicación, sería ideal en su caso, ya que necesita una configuración geográfica para continuar. El oyente 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 algo de tiempo en el dispositivo obtener la ubicación actual, e incluso en el dispositivo esto puede devolver nulo.

Intente utilizar MyLocationOverlay , cree un ejecutable que haga lo que necesita hacer con esa ubicación de GPS y páselo a

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

y luego deshabilite las actualizaciones de ubicación para MyLocationOverlay.

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