LocationManager ruft onLocationChanged zu oft auf?

8

Ich habe den LocationManager so eingerichtet, dass der aktuelle Standort alle zwei Minuten abgerufen wird:

%Vor%

Dies funktioniert einwandfrei und onLocationChanged wird wie erwartet alle zwei Minuten aufgerufen. Es scheint jedoch, dass es mehrmals über eine 10-40 (eine zufällige Menge) zweite Spanne alle 2 Minuten aufgerufen wird. Ich logge jeden Ort ein, der in onLocationChanged empfangen wurde. Hier einige Beispiele, um eine Vorstellung davon zu bekommen, was vor sich geht:

Um 17:30

%Vor%

Dann bekomme ich für 2 Minuten keine Updates mehr.

Um 17:32

%Vor%

Und so weiter ... dann noch zwei Minuten später um 17:35 Uhr.

Ist das das Standardverhalten? Ich hatte erwartet, nur alle zwei Minuten einen one Standort zu bekommen, und die Zeitspanne, in der ich Updates für den Standort bekomme, scheint eher zufällig zu sein. Idealerweise würde ich es vorziehen, nur einen Ort zu bekommen ... gibt es einen Weg, dies zu tun?

    
migueljuan 10.08.2010, 13:54
quelle

3 Antworten

13

Aus der Dokumentation von requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener) mit dem Parameter minTime :

"Das Mindestzeitintervall für Benachrichtigungen in Millisekunden. Dieses Feld dient nur als Hinweis, um Energie zu sparen, und die tatsächliche Zeit zwischen Standortaktualisierungen kann größer oder kleiner als dieser Wert sein."

Also die Antwort auf Ihre Fragen, ja das ist Standardverhalten und nein, das können Sie nicht ändern.

Wenn dies ein Problem für Sie ist, könnten Sie Aufrufe der Callback-Methode ignorieren, wenn eine bestimmte Zeit nicht verstrichen ist.

    
Key 10.08.2010, 14:03
quelle
7

Ich habe diese Frage gefunden, weil ich das gleiche Problem hatte.

Ich glaube, ich habe die Antwort. Die Schnellupdates werden ausgelöst, weil der Meter-Parameter auf 0 gesetzt ist.

Ändern Sie den Meter-Parameter auf etwa 10, und das LocationChanged-Ereignis wird nur alle 2 Minuten ausgelöst, wenn sich Ihr Standort um 10 oder mehr geändert hat.

Bevor ich diese Änderung vorgenommen habe, hat LocationChanged mehrmals pro Sekunde ausgelöst. Jetzt feuert es einmal. Dann wird alle 2 Minuten das GPS-Symbol in der Statusleiste angezeigt. Wenn sich Ihr Standort jedoch nicht geändert hat, wird das Ereignis nicht ausgelöst.

Ich hoffe, das hilft. Das hat es für mich behoben. Es musste keine zusätzliche Logik hinzugefügt werden, um falsche Brände zu vermeiden.

    
Kevin 17.03.2012 04:39
quelle
1

Dies ist meine LocationListener-Implementierung, um unnötige onLocationChanged () -Ereignisse herauszufiltern:

HINWEIS Ich verwende Nachrichten in meinem Dienst.

%Vor%

Dies ist in Ihrem Hauptcode wie folgt implementiert:

%Vor%     
Someone Somewhere 13.02.2011 00:30
quelle

Tags und Links