2011-10-04 7 views
5

Mamy aplikację, która po akcji użytkownika próbuje uzyskać poprawkę lokalizacji. Słucha zarówno w systemie GPS, jak i w sieci i ma macierz decyzyjną opartą na czasie/dokładności, aby określić, kiedy przestać słuchać i jaką poprawkę powrócić.Dlaczego lokalizator zwraca stare poprawki lokalizacji za pomocą nowego gettime-timestamp?

Zauważyliśmy, czasami, bardzo dziwne zachowanie. Używamy klasyczny sposób, aby zobaczyć, jak stary poprawka jest tak:

long age = now - newLocation.getTime(); 
if(age >= prefs.getLocationMaxAge()){ 
    Log.d(TAG, "location too old."); 
    return; 
} 

Ale Czasami location.getTime wrócił z OS ma wiek być może 15-20 sekund, w zależności od zwracanej datownik, chociaż możemy stwierdzić z całą pewnością, że jest bardzo stary. Na przykład, jeśli zmiana długości/szerokości geograficznej jest z pozycji, w której telefon był włączony 30 minut temu!

Wydaje się, że dzieje się to zarówno z Wi-Fi, jak iz sieci, ale nie z GPS. Dla mnie jest to całkowicie szalone. Czy ktokolwiek widział to i czy jest na to sposób?

Dostaliśmy go na kilka różnych telefonów, z których najnowszym jest Samsung Galaxy S II.

Pomoc byłaby niezwykle pożądana.

EDIT: Aby być naprawdę jasne, problemem jest to, że „onlocationchanged” zwrotna jest wywoływana przez system operacyjny z lokalizacji z wiekiem datownika z być może kilka sekund, kiedy wiem na pewno, że długość/szerokość geograficzna w "nowej" poprawce to miejsce, w którym telefon nie jest dostępny przez co najmniej 30 minut.

To sprawia, że ​​nieco trudno dokładnie określić, gdzie słuchawka to ...

Odpowiedz

0

Wydaje się zdarzyć zarówno z Wi-Fi i sieci, ale nie GPS

To wydaje się sprawiedliwe , ponieważ w triangulacji opartej na sieci Wi-Fi i sieciowej, dokładność jest bardzo zła. Prawdopodobnie używają zapisanych w pamięci podręcznej lokalizacji, które pochodzą z 30 minut wcześniej. Dopóki nie zmienisz swojej komórki lub nie przeprowadzisz się do innego budynku, aby można było odkryć nowe APs, obawiam się, że dostaniesz tylko lokalizacje w pamięci podręcznej. Jeśli chcesz nowe lokalizacje, skorzystaj z dostawcy GPS.

+1

Myślę, że brakuje wam mojego punktu. Lokalizacje w pamięci podręcznej byłyby w porządku, gdyby znacznik czasowy lokalizacji odzwierciedlał to. Ale zrobienie buforowanej, starej poprawki i zastosowanie aktualnego znacznika czasu jest szalone. zaktualizuję moje pytanie, aby było jeszcze jaśniejsze. – Mathias

+0

Dzięki za wyczyszczenie; Znalazłem [winowajcę] (http://www.netmite.com/android/mydroid/frameworks/base/location/java/com/android/internal/location/LocationCollector.java) – Reno

+0

HI guyz, w stosunku do tego Mam właściwą lokalizację, ale kiedy staram się ustalić, ile lat ma ta lokalizacja, używając - >> long age = System.currentTimeMillis() -location.getTime(); i zależy od tej wartości i obliczyć, jak moja lokalizacja jest, ale problem jest czasami mam ujemną wartość (wiek). nie jest w stanie zrozumieć, dlaczego, ponieważ ten wiek nigdy nie będzie negatywny – Anjan