getLastKnownLocation renvoie null

J’ai lu quelques questions à ce sujet, mais je n’ai pas trouvé de réponse appropriée.

Donc, le cas est que j’ai ma carte configurée, et je veux saisir mon emplacement GPS actuel. J’ai vérifié que mes variables ne sont pas NULL mais que mon résultat provient de:

getLastKnownLocation(provider, false); 

Cela me rend nul, donc c’est là que j’ai besoin d’aide. J’ai ajouté des permissions pour l’emplacement COARSE + FINE. Mais, en général, toutes sortes de données réseau sont désactivées pour mon téléphone, car je ne suis pas très satisfait des dépenses de stream de données imprévisibles dans ma facture de téléphone. Je n’ai donc que le WiFi activé et connecté pour ce test.

Y a-t-il autre chose que je DOIS activer pour que cela soit possible? Je pense que le WiFi devrait être suffisant?

Utilisez cette méthode pour obtenir le dernier emplacement connu:

 LocationManager mLocationManager; Location myLocation = getLastKnownLocation(); private Location getLastKnownLocation() { mLocationManager = (LocationManager)getApplicationContext().getSystemService(LOCATION_SERVICE); List providers = mLocationManager.getProviders(true); Location bestLocation = null; for (Ssortingng 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; } 

vous mélangez la nouvelle et l’ancienne API d’emplacement lorsque vous ne le souhaitez pas.

pour obtenir le dernier emplacement connu, il vous suffit d’appeler

 comstack "com.google.android.gms:play-services-location:11.0.1" mLocationClient.getLastLocation(); 

une fois le service de localisation connecté.

lire comment utiliser la nouvelle API de localisation

http://developer.android.com/training/location/resortingeve-current.html#GetLocation

  private void getLastLocationNewMethod(){ FusedLocationProviderClient mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this); mFusedLocationClient.getLastLocation() .addOnSuccessListener(new OnSuccessListener() { @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(); } }); } 

Vous essayez d’obtenir l’emplacement en cache du fournisseur de réseau. Vous devez attendre quelques minutes pour obtenir un correctif valide. Comme le cache du fournisseur de réseau est vide, vous obtenez évidemment une valeur nulle.

Ajouter ce code

 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } 

avant la fonction:

locationManagerObject.requestLocationUpdates(LocationManager.GPS_PROVIDER, MINIMUM_TIME_BETWEEN_UPDATES, MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, new LocationListener()) ainsi que la fonction: locationManagerObject.getLastKnownLocation(LocationManager.GPS_PROVIDER)

Remplacez votre ligne par

 Location location = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);