studio google example current android google-maps location

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(); } }); }