Android LocationClient.getLastLocation () gibt den alten und ungenauen Standort mit einem neuen Zeitstempel zurück

Ich benutze den Fused Location Provider seit seiner Veröffentlichung und bin ziemlich zufrieden damit (viel besser als das alte System). Bei der Verwendung von Geofencing in Kombination mit LocationClient.lastKnownLocation () trat jedoch ein besonderes Problem auf. Das Setup ist wie folgt:

Ich lasse mehrere Geofences um einen Heimstandort herum fallen (mit zunehmender Reichweite). Wenn ich die Absicht habe, dass ein Zaun überschritten wird, rufe ich den letzten bekannten Standort von LocationClient ab und arbeite damit. Abgesehen davon habe ich mich auch für regelmäßige Standortaktualisierungen im Aktualisierungsmodus PRIORITY_BALANCED_POWER_ACCURACY registriert.

Meistens funktioniert das einwandfrei, aber manchmal passiert Folgendes:

Zeit 000 s - (Lat, Lon, Genauigkeit) = (48.127316,11.5855167,683.0)

Zeit 120 s - (Lat, Lon, Genauigkeit) = (48.1260497,11.5731745,31.823)

Zeit 300 s - (Lat, Lon, Genauigkeit) = (48.1217455,11.5641666,143.81)

Zeit 420 s - (Lat, Lon, Genauigkeit) = (48.1189942,11.559061,36.0)

Zeit 600s - (Lat, Lon, Genauigkeit) = (48.127316,11.5855167,683.0)

Beachten Sie, dass alle diese Speicherorte von abgerufen werdengetLastKnownLocation (). Was hier faul erscheint, ist, dass der erste und der letzte Ort identisch sind (auch in den anderen Attributen), um genau zu sein:

* intent at time 0: *

component: ComponentInfo{package.Class}
key [location]: Location[mProvider=fused,mTime=1373524391934,mLatitude=48.127316,mLongitude=11.5855167,mHasAltitude=false,mAltitude=0.0,mHasSpeed=false,mSpeed=0.0,mHasBearing=false,mBearing=0.0,mHasAccuracy=true,mAccuracy=683.0,mExtras=Bundle[mParcelledData.dataSize=352]]

* intent at time 600: *

component: ComponentInfo{package.Class}
key [location]: Location[mProvider=fused,mTime=1373524994871,mLatitude=48.127316,mLongitude=11.5855167,mHasAltitude=false,mAltitude=0.0,mHasSpeed=false,mSpeed=0.0,mHasBearing=false,mBearing=0.0,mHasAccuracy=true,mAccuracy=683.0,mExtras=Bundle[mParcelledData.dataSize=352]]

* note the ~600 s difference in the timestamp * 

Ich verstehe nicht, wie das passieren kann, da es Orte dazwischen gab, die sowohl aktueller als auch genauer waren. Auch der neue Zeitstempel an einem alten Ort macht mich neugierig ... anscheinend geschahen ähnliche Dinge bei der Verwendung desalte API, aber dieser neue Standortanbieter heißt ebenfusedIch kann also kein GPS von GPS unterscheidenWPS von Sensoren ... Wenn es sich um das Problem des Schaltens des Zellturms handelt (wie in der verknüpften Frage zur alten API beschrieben), warum sollte das Telefon dann eine Verbindung zu einem "weit entfernten" Turm herstellen, wenn es nähere Türme gesehen hat?

Warum passiert dies?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage