Ich versuche den aktuellen Standort zu finden. Dazu implementiere ich einen LocationListener und registriere ihn sowohl für das Netzwerk als auch für den GPS-Provider:
%Vor%Ich blockiere dann für 30 Sekunden und verwende den ersten Ort, der an den Hörer des
weitergeleitet wird %Vor%Methode mit einer Genauigkeit von 100 Metern oder besser.
Meistens funktioniert das gut. Wenn das Telefon mit einem Wifi-Netzwerk verbunden ist, dauert es nur eine Sekunde, bis ein korrekter Standort mit einer Genauigkeit von ca. 50 Metern erreicht wird. Wenn es kein Wifi gibt, aber GPS aktiviert ist, kann es natürlich eine Weile dauern, bis ein Standort gefunden wird.
Manchmal wird jedoch, wenn eine Verbindung zu einem Wifi besteht und der aktuelle Standort abgerufen wird, ein alter (im Cache?) früherer "Wifi" -Standort bereitgestellt - er könnte 15 Minuten alt und 15 Kilometer vom aktuellen Standort entfernt sein. Das Problem ist, dass
%Vor%gibt die aktuelle Zeit zurück - es ist also unmöglich zu wissen, dass der Ort alt ist.
Ich denke, ich muss eine ausgefeiltere Lösung implementieren - ich möchte nur wissen, warum diese alten "Wifi" -Standorte einen aktuellen Zeitstempel haben, anstatt der Zeit, als sie ursprünglich abgerufen wurde.
Dies ist hilfreich:
Ein tiefer Tauchgang in den Ort
und schließlich der Quellcode für dieses Gespräch:
Dies ist ein bekanntes Problem, dem ich begegnet bin und habe einige Nachforschungen darüber angestellt, warum dies geschieht.
Hier sind meine Beobachtungen:
Verstehen Sie zuerst, wie der Netzwerkstandort funktioniert: Android hat die cellId des Turms, mit dem es momentan verbunden ist, und diese ID wird dann von Google verwendet, um Nachschlagevorgänge durchzuführen und ungefähre Ortsinformationen abzurufen, deren Genauigkeit von 50 Metern (eine der besten) bis zu einigen tausend Metern reichen kann . Wenn die cellId falsch ist, wie im obigen Beispiel gezeigt, erhalten Sie einen falschen Ort.
Es gibt nicht viel, was Sie tun können, um dies zu vermeiden, außer dass Sie einen benutzerdefinierten Algorithmus haben, der dieses Rauschen ausmerzen kann. Etwas wie
%Vor%Ich habe die gleichen Probleme gehabt, bis ich einige Änderungen an meinem Code vorgenommen habe.
Was passierte, ist, dass ich den gleichen LocationListener anschlug, wenn ich sowohl GPS- als auch Netzwerk-Standort-Updates anforderte, und ich bekam "seltsame" Probleme, einschließlich alter WIFI-Standort-Updates mit der aktuellen Zeit.
Hier ist mein alter Code:
%Vor%Scheinbar ist das eine ziemlich "unsichere" Sache zu tun (Entschuldigung, Android-Neuling hier) und so änderte ich es zu:
%Vor%Natürlich musste ich zwei separate onLocationChanged-Codeblöcke definieren, um die 2 Listener zu behandeln.
Nun, es hat mein Problem gelöst. Ich habe das auf Gingerbread getestet (API Level: 8). Nicht sicher, ob es für dich funktioniert.