Oui, getLastKnownLocation()
peut bien retourner null. Le documentation dit:
Renvoie un emplacement indiquant les données de la dernière position connue fix obtenu du fournisseur donné.
Cela peut être fait sans démarrer le fournisseur. Notez que cet emplacement peut être obsolète, par exemple si l'appareil a été désactivé et déplacé vers un autre emplacement.
Si le fournisseur est actuellement désactivé, null est renvoyé.
Un appareil Android ne suit pas automatiquement son emplacement en permanence. Le "dernier emplacement connu" n'est disponible que si une application a demandé l'emplacement. Donc, vous ne devriez pas vous attendre à toujours obtenir un emplacement avec getLastKnownLocation()
. Et même s'il renvoie quelque chose, l'emplacement pourrait ne pas être à jour. L'objet Location
a un horodatage que vous pouvez lire avec la méthode getTime()
et une précision estimée que vous pouvez lire avec la méthode getAccuracy()
. Ceux-ci peuvent être utilisés pour évaluer l'emplacement est utilisable.
Si vous recevez null ou un très ancien emplacement, vous devrez demander un nouvel emplacement. Les options de base ne demandent qu'une mise à jour d'emplacement unique ou des mises à jour continues avec un intervalle de temps que vous pouvez spécifier.
Dans les deux cas votre classe doit implémenter l'interface LocationListener:
public class GpsTracker implements LocationListener {
// ...other code goes here...
@Override
public void onLocationChanged(Location location) {
// Do something with 'location' here.
}
}
Pour un emplacement unique mise à jour vous appelleriez [LocationManager.requestSingleUpdate()] (http://developer.android.com/reference/android/location/LocationManager.html#requestSingleUpdate(java.lang.String, android.location.LocationListener, android.os .Looper)) et pour les mises à jour continues [LocationManager.requestLocationUpdates()] (http://developer.android.com/reference/android/location/LocationManager.html#requestLocationUpdates(java.lang.String, long, float, android.location.LocationListener)). Dans les deux cas, il y aura un petit (ou pas si petit) délai et le rappel LocationListener.onLocationChanged() est appelé lorsqu'un emplacement est disponible.
Par exemple, vous pouvez demander une mise à jour unique du fournisseur de GPS comme ceci:
locationManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, this, null);
Pour les mises à jour continues du fournisseur de GPS max.chaque 1 seconde et que lorsque l'emplacement a changé au moins 1 mètre que vous pourriez appeler:
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, this);
Et puis il y a encore plus de variations de la requestSingleUpdate()
que vous pouvez voir dans la documentation et d'autre part le Google Play API de localisation de services mais n'allons pas là-bas. Votre question portait sur getLastKnownLocation()
retournant null et Stack Overflow a plusieurs exemples de différentes façons de demander un emplacement à jour.
Quelle est la question? –