Otrzymuję okresowe aktualizacje lokalizacji za pośrednictwem GPS, problemem jest czas do pojawienia się pierwszej aktualizacji lokalizacji - to tylko na długo. Kiedy użytkownik znajduje się w budynku, ten czas staje się jeszcze gorszy.Rozpocznij strategię lokalizacji
W związku z tym szukam niektórych strategii, aby poprawić czas uruchamiania (w tej chwili nie używam getLastKnownLocation
, ale będę). Zacząłem czytać A Deep Dive Into Location, aby uzyskać kilka pomysłów i mam teraz kilka myśli, które chciałbym omówić z tobą.
Na początku wymieniony wyżej wpis z blogu dotyczy każdego dostawcy lokalizacji na urządzeniu i zapytań o numer getLastKnownLocation
, ale uwzględnia je tylko wtedy, gdy nie są one stare i mieszczą się w dozwolonej dokładności.
Oto moje pierwsze pytanie: spodziewałbym się, że lokalizacja oparta na sieci stanie się natychmiast dostępna, więc chciałbym poprosić o nową lokalizację sieciową, wtedy dostałbym getLastKnownLocation
od dostawcy GPS i jeśli ostatnia lokalizacja GPS jest w obrębie okręgu utworzonego przez lokalizację w oparciu o punkt i dokładność promienia, wybrałbym lokalizację GPS, bez względu na to, ile ma lat. Co myślisz?
Po sprawdzeniu ostatnią znaną lokalizację zacznę śledzenie pozycji GPS i dlatego, że tylko trzeba go co 2 sekundy i zmianę 10m, użyłbym lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2 * 1000, 10, this);
Jednak znalazłem wzór (wewnątrz prezentacji Being Epic: Best Practices for Android Development na slajd 95 i 96, który początkowo włącza grube i drobne lokalizacje (z 0,0 dla zmiany czasu i odległości), a następnie, po odebraniu pierwszego zdarzenia, przełącza się na naprawdę potrzebną częstotliwość aktualizacji. Aktualizacja jest szybsza, gdy interwał ustawiony jest na 0?
W opozycji Zgodnie z tym wzorem zachowałbym aktualizację zgrubną do czasu otrzymania pierwszej aktualizacji GPS. Co myślisz?
Mam nadzieję, że otrzymam kilka interesujących odpowiedzi!
---------------- Aktualizacja ----------------
zrobiłem kilka badań: Włączyłem GPS i czekał na naprawę. Potem wyłączyłem GPS i przejechałem 50 km (31 mil). Następnie użyłem kodu z A Deep Dive Into Location, aby uzyskać wszystkie getLastKnownLocation
. Próbowałem go dwukrotnie, najpierw z GPS wyłączony, a drugi z GPS włączone, ale bez Fix:
1) z GPS wyłączony mam
- Provider: sieć, poprawną lokalizację z dokładnością do 680m
- Provider : pasywne (mProvider = sieciowa), to samo miejsce jak wyżej, w tym samym czasie jak wyżej
- Właściciele: GPS, położenie zerowej
Więc kiedy dowiedziałem się, że GPS jest wyłączony nie dostaniesz getLastKnownLocation
.
2) z GPS włączone mam
- Provider: sieć, poprawną lokalizację z dokładnością do 652 mln
- Właściciele: pasywne (mProvider = network), tym samym miejscu jak wyżej, ten sam czas jak powyżej
- Provider: GPS, lokalizacja, jak było 2 godziny wcześniej z dokładnością 12 m, czas był również 2 godziny wcześniej
Tutaj dowiedziałem się, że stare wiadomości nie są unieważniane, nawet jeśli jest oczywiste, że są one złe.
W takim przypadku algorytm działa poprawnie, ponieważ przeniosłem się w czasie, gdy wyłączyłem GPS. Ale co jeśli wejdę do domu? W takim przypadku 2-godzinny wynik GPS byłby bardzo dobry, nawet jeśli jest nieaktualny.
Dobry link do rysowania pozycji na mapach Google, w tym promieniu (dokładność): [freemaptools] (http://www.freemaptools.com/radius-around-point.htm) – ChrLipp