2009-12-16 3 views
5

Tengo un problema relacionado con la API de ubicación.Obteniendo null de 'getLastKnownLocation' en SDK

He probado el siguiente código:

LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
Location loc = getLastKnownLocation(LocationManager.GPS_PROVIDER); 

loc es siempre null, cuando getLastKnownLocation() se llama.

¿Qué pasa?

Respuesta

6

Junto con los permisos en su archivo AndroidManifest.xml, ¿ha registrado un oyente de ubicación?

LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
Location loc = getLastKnownLocation(LocationManager.GPS_PROVIDER); 
lm.requestLocationUpdates(LocationManager.GPS, 100, 1, locationListener); 

Entonces tener un método, en este caso locationListener, para completar su tarea

private final LocationListener locationListener = new LocationListener() { 
public void onLocationChanged(Location location) { 
    latitude = location.getLatitude(); 
    longitude = location.getLongitude(); 
} 
1

¿Ha establecido los permisos en su AndroidManifest.xml? Usted necesita estos permisos para acceder a la ubicación del usuario con una aplicación:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> 
+1

En realidad, MOCK_LOCATION no es necesario, es solo para desarrollo/prueba – Ridcully

3

Si se está ejecutando el código en el emulador, todas las llamadas para obtener la ubicación GPS devolverá un valor nulo hasta que se actualice de forma explícita la ubicación (a través de Eclipse o ADB).

2

que tenían el mismo problema que tú, que siempre recibe un Lugar objeto nulo, pero finalmente se resolvió en una manera fácil. Debe tener una ubicación GPS válida, por lo tanto, si el GPS no está habilitado y no tiene suficiente señal, el objeto Ubicación será SIEMPRE nulo.

0

aquí hay algo que puede utilizar:

LocationManager lm = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE); 
Criteria criteria = new Criteria(); 
String bestProvider = lm.getBestProvider(criteria, false); 
Location loc = lm.getLastKnownLocation(bestProvider); 

last_lat = loc.getLatitude(); 
last_lng = loc.getLongitude(); 
0

Se necesita la instancia de LocationManager así:

Primera Instancia:

LocationManager lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 

incorrecto:

Location loc = getLastKnownLocation(LocationManager.GPS_PROVIDER); 

correcta :

Location loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
Cuestiones relacionadas