android - google - getLastKnownLocation devuelve null
get my location google maps android studio (5)
He leído algunas preguntas sobre esto, pero no encontré la respuesta que necesitaba.
Entonces, el caso es que tengo mi mapa configurado, y quiero tomar mi ubicación GPS actual. He comprobado que mis variables no son NULL, pero mi resultado es:
getLastKnownLocation(provider, false);
Me da nulo, así que aquí es donde necesito ayuda. He agregado permisos para la ubicación COARSE + FINE. Pero generalmente tengo todo tipo de datos de red deshabilitados para mi teléfono, porque no estoy muy contento con los gastos de flujo de datos impredecibles en mi factura de teléfono. Así que solo tengo WiFi habilitado y conectado para esta prueba.
¿Hay algo más que NECESITO habilitar para que esto sea posible? Yo pensaría que WiFi debería ser suficiente?
Agrega este código
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
antes de la función:
locationManagerObject.requestLocationUpdates(LocationManager.GPS_PROVIDER, MINIMUM_TIME_BETWEEN_UPDATES, MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, new LocationListener())
así como la función: locationManagerObject.getLastKnownLocation(LocationManager.GPS_PROVIDER)
Está intentando obtener la ubicación almacenada en caché del Proveedor de red. Tienes que esperar unos minutos hasta que obtengas una solución válida. Como la memoria caché del proveedor de red está vacía, obviamente obtienes un nulo allí.
Reemplaza tu línea con
Location location = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
Use este método para obtener la última ubicación conocida:
LocationManager mLocationManager;
Location myLocation = getLastKnownLocation();
private Location getLastKnownLocation() {
mLocationManager = (LocationManager)getApplicationContext().getSystemService(LOCATION_SERVICE);
List<String> providers = mLocationManager.getProviders(true);
Location bestLocation = null;
for (String provider : providers) {
Location l = mLocationManager.getLastKnownLocation(provider);
if (l == null) {
continue;
}
if (bestLocation == null || l.getAccuracy() < bestLocation.getAccuracy()) {
// Found best last known location: %s", l);
bestLocation = l;
}
}
return bestLocation;
}
estás mezclando las nuevas y antiguas API de ubicación juntas cuando no deberías.
para obtener la última ubicación conocida todo lo que tiene que hacer es llamar
compile "com.google.android.gms:play-services-location:11.0.1"
mLocationClient.getLastLocation();
una vez que el servicio de ubicación estuvo conectado.
lee cómo usar la nueva API de ubicación
http://developer.android.com/training/location/retrieve-current.html#GetLocation
private void getLastLocationNewMethod(){
FusedLocationProviderClient mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
mFusedLocationClient.getLastLocation()
.addOnSuccessListener(new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
// GPS location can be null if GPS is switched off
if (location != null) {
getAddress(location);
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d("MapDemoActivity", "Error trying to get last GPS location");
e.printStackTrace();
}
});
}