LocationManager gibt den alten zwischengespeicherten "Wifi" -Standort mit dem aktuellen Zeitstempel zurück

8

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.

    
Torsten Römer 16.07.2011, 18:02
quelle

3 Antworten

2

Dies ist hilfreich:

Ein tiefer Tauchgang in den Ort

und schließlich der Quellcode für dieses Gespräch:

android-protips-location

    
nickfox 16.07.2011, 20:02
quelle
6

Dies ist ein bekanntes Problem, dem ich begegnet bin und habe einige Nachforschungen darüber angestellt, warum dies geschieht.

Hier sind meine Beobachtungen:

  • Normalerweise geschieht dies, wenn die Handynetz-Übertragung nach dem Verlust der Netzwerkverbindung erfolgt, die für den Benutzer möglicherweise nicht signifikant genug ist.
  • Nehmen wir an, Sie nehmen eine U-Bahn und steigen an Station A ein und steigen an Station B aus. Wenn Sie jetzt an Station B absteigen, kann / darf die Netzwerkzellen-ID nicht immer Station A sein eine Hands-Off und bewegen Sie sich zu Station B.
  • Wenn Sie jedoch anrufen, dass getLocation vor der Übergabe aktiv ist, erhalten Sie Station A, die etwa 10 km und 15 Minuten zurückliegt.

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%     
PravinCG 16.07.2011 18:29
quelle
0

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.

    
Dason Goh 03.12.2013 06:09
quelle

Tags und Links