2016-05-07 5 views
0

Ich habe onLocationChanged Methode von LocationListener für die Erkennung der Standortänderung meines Geräts verwendet. In requestLocationUpdates Methode habe ich minimale Zeit = 5 Sekunden und Mindestabstand = 2 Meter, aber requestLocationUpdates Methode gibt mir Updates, auch wenn mein Gerät überhaupt nicht bewegt wird (stationär platziert). Also, bitte, was ist das Problem mit meinem Code?requestLocationUpdates() -Methode gibt Updates ohne Standortänderung - Android

Das ist mein Code:

public class LocationDetector implements LocationListener { 
    @Override 
    public void onLocationChanged(Location location) { 
     Log.d("GPS: ",location.getLatitude()+", "+location.getLongitude()); 
    } 

.

LocationManager manager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 

.

manager.requestLocationUpdates("gps", 5000, 2, new LocationDetector()); 

Antwort

2

Der GPS-Standort kann schwanken. Wenn Sie tatsächlich die Standorte protokollieren, die Sie erhalten, werden Sie wahrscheinlich feststellen, dass sich der Standort bei jeder Standortaktualisierung um mindestens 2 Meter ändert.

Edit: Ideen für die Fluktuation zu tun haben:

Wie mit GPS-Fluktuation zu bewältigen, hängt von den Anforderungen Ihrer Anwendung. Einige mögliche Ideen sind:

Wenn Sie keine wirklich genaue Position benötigen, verwenden Sie ein höheres Distanzlimit im requestLocationUpdates()-Aufruf, um keine Updates für sehr kleine Standortänderungen zu erhalten. Sie können sich überlegen, welche Genauigkeit für Ihren Anwendungsfall unbedingt erforderlich ist, und dann die höchstmögliche Entfernungsgrenze verwenden.

Wenn Sie nicht erwarten, dass sich der Standort sehr schnell ändert oder Sie nicht sehr schnell auf Standortänderungen reagieren müssen, verwenden Sie ein höheres Zeitlimit unter requestLocationUpdates(). Dies ist auch sinnvoll, wenn Sie einen sehr schweren Code haben, der von onLocationChanged() ausgelöst wird, wie wenn Sie immer einige Daten über das Netzwerk abrufen (Reverse Geocoding etc.).

Das Zeitlimit wirkt sich auch stärker auf die Batterie aus. Android documentation sagt:

... es schwieriger für Standort-Anbieter ist Macht mit den MinDistance Parametern zu speichern, so MINTIME das wichtigste Werkzeug zum Erhaltung Akkulaufzeit sein sollte.

Wenn Sie wirklich einen genauen Standort benötigen, gibt es einige Möglichkeiten, die Fluktuation zu verringern.

Zuallererst hat das Location Objekt, das in onLocationChanged() empfangen wird, normalerweise eine geschätzte Genauigkeit, die verfügbar ist, indem die Location.getAccuracy() Methode aufruft. Sie können alle Standortaktualisierungen ignorieren, die eine sehr geringe Genauigkeit aufweisen (im Vergleich zu den Genauigkeiten früherer Standortaktualisierungen).

Sie können auch filtern, wenn Sie einen kurzen Puffer der letzten Speicherorte haben. Die Berechnung eines Durchschnitts verringert die Anzahl der plötzlichen Änderungen, erhöht aber auch die Reaktionszeit. Das heißt: Eine schnelle Änderung des Ortes wird erst nach einiger Zeit vollständig in den gemittelten Ortsdaten angezeigt. (Die gemittelten Daten beginnen sich natürlich sofort in Richtung des Ortes zu bewegen, aber es dauert eine Weile.) Auch wird es die Spikes "durch die Mulde" lassen.

Wenn eine schnelle Reaktionszeit wichtig ist und größere "Spitzen" in den Daten eliminiert werden sollten, ist die Berechnung des Medians eine bessere Option. Es wird die kleinen Änderungen in den Daten nicht so sehr glätten, aber zufällige Spitzen können herausgefiltert werden. Wenn es eine reale (permanente) plötzliche Änderung der Position gibt, dann reagiert die Median-Filterung darauf mit nur einer sehr kleinen Verzögerung.

(Diese Dinge sind einfach in Ihrem bevorzugten Tabellenkalkulationsprogramm auszuprobieren.)

+0

aber mein Gerät nicht bewegte. Wie kann ich den Standortwechsel feststellen? –

+0

Überprüfen Sie einfach die Höhe der Änderung und entscheiden Sie, ob es ausreicht, um eine Aktion auszulösen oder nicht. Oder ändern Sie das im Aufruf 'requestLocationUpdates()' angegebene Distanzlimit zu einer höheren Nummer. Sie müssen lediglich feststellen, dass der Standort schwanken kann und dies in Ihrem Code auf eine Weise berücksichtigen, die am besten zu Ihrem Anwendungsfall passt. –

Verwandte Themen