2010-10-22 11 views
6

staram się uzyskać odpowiednią prędkość w aktualizacjach dla funkcji onLocationChanged, to moja klasa:requestLocationUpdates przerwa w Androidzie

public class LocationService extends Service implements LocationListener { 

Umieszczenie MinTime na 6000 nie pomaga, wil go zatrzymać aktualizację nieustannie, co ja robię źle?

public void requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener, Looper looper) { 

Pozdrowienia

Odpowiedz

4

6000 w milisekundach wynosi 6 sekund, a może wydaje się continiously aktualizacji. z Android przewodniku dev „MinTime pod 60000ms nie są zalecane” Może warto ją zwiększyć do 60000ms

23

MinTime jest tylko wskazówką dla LocationProvider, a to nie znaczy, że lokalizacja słuchacz będzie nazwane raz na 6 sekund. Otrzymasz więcej aktualizacji lokalizacji i do kodu, aby wybrać najbardziej dokładny.

Monitoruj ikonę GPS w telefonie. Wywołanie requestLocationUpdates uruchomi GPS, aby wskazać Twoją lokalizację, i wyśle ​​jedną lub więcej aktualizacji lokalizacji do listy lokalizacji, jeśli jest w stanie uzyskać poprawkę. (W tym momencie ikona GPS powinna być animowana podczas wyszukiwania lokalizacji).

W tym czasie Twoja lista lokalizacji może otrzymać kilka aktualizacji lokalizacji. Twój kod może wybrać najdokładniejszą lokalizację i przetworzyć tylko tę.

Po wysłaniu aktualizacji lokalizacji do odbiornika przez GPS, powinien nastąpić okres bezczynności. (ikona GPS powinna zniknąć na kilka sekund). Ten okres bezczynności powinien odpowiadać twojemu minTime. Status GPS również się zmieni, ponieważ zostanie wprowadzony do TEMPORARILY_UNAVAILABLE.

Później ten sam proces powtarza się. (GPS staje się DOSTĘPNY, a ty ponownie otrzymasz jedną lub więcej aktualizacji lokalizacji).

Weź również pod uwagę, że jeśli GPS nie może uzyskać poprawki lokalizacji, ikona GPS pozostanie aktywna przez ponad 6 sekund, ale nie będziesz otrzymywać aktualizacji lokalizacji.

Można również monitorować stan swojego dostawcy GPS przez słuchacza, poprzez następujący sposób:

public void onStatusChanged(String provider, int status, Bundle extras) {} 

status jest jeden z następujących stałych zdefiniowanych na android.location.LocationProvider

public static final int OUT_OF_SERVICE = 0; 
public static final int TEMPORARILY_UNAVAILABLE = 1; 
public static final int AVAILABLE = 2; 

Zajrzyj na stronę Understanding the LocationListener in Android, gdzie znajdziesz przykład zachowania minTime oraz scenariusz (w tym niektóre rejestrowanie), które pomogą ci zrozumieć, co się dzieje.

Należy pamiętać, że modyfikowanie parametrów minTime i minDistance w menedżerze lokalizacji LocationManager oraz działanie w oparciu o aktualizacje statusu GPS umożliwiają precyzyjne dostosowanie rozwoju lokalizacji użytkownika.

+0

Dzięki za odpowiedź, bardzo mi to pomogło w moim własnym projekcie. Pomyślałem, że mogę po prostu użyć API "tak, jak to zrozumiałem", bez czytania faktycznego odniesienia, i uznałem, że cały proces pobierania dokładnej aktualizacji lokalizacji nastąpi za sceną; i że tylko wtedy mój LocationListener zostanie poinformowany (po określonym czasie lub przebytej odległości).Jestem pewien, że większość ludzi zinterpretowałaby to w ten sposób przy pierwszej próbie, ale teraz widzę, jak to działa, musiałem przerobić trochę mój kod - przynajmniej działa! Jeszcze raz dziękuję za wyraźną odpowiedź! – Warkst