15

Wcześniej, aby uzyskać aktualną lokalizację użytkownika użyłem LocationManager:Czy są jakieś zalety używania FusedLocationProviderApi przez Menedżer położenia?

LocationManager locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); 

if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
    location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

} else if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { 
    location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
} 

łatwo jest odczytać kod i bardzo proste.

Ale zauważyłem, że Google niedawno wydany New Client API Model in Google Play Services i sugeruje użycie FusedLocationProviderApi która wygląda o wiele bardziej skomplikowane, to jest asynchroniczny, nie wymaga do obsługi wywołań zwrotnych itp

Czy są jakieś zalety korzystania FusedLocationProviderApi nad LocationManager?

+0

Zapewnia większą dokładność przy mniejszym zużyciu baterii, ponieważ przełącza się między GPS i lokalizacją opartą na Wi-Fi. Aby uniknąć komplikacji, zalecamy korzystanie z tej biblioteki: https://github.com/mcharmas/Android-ReactiveLocation – cYrixmorten

Odpowiedz

15

FusedLocationProvider wykorzystuje mieszankę sprzętu do określenia położenia w oparciu o kontekst żądania, co oznacza, że ​​jest zoptymalizowany w sposób optymalny dla użytkownika. Będzie również cache przechwytywał przechwycone lokalizacje między aplikacjami, aby uniknąć niepotrzebnej pracy w celu ustalenia informacji o lokalizacji. Jeśli więc użytkownik ma różne aplikacje obsługujące lokalizację, potencjalnie unika opodatkowania urządzenia (i czekania) na przechwytywanie lokalizacji, jako że mogło już być buforowane.

Podczas gdy menedżer LocationManager wystarczy w małych, jednorazowych sytuacjach, zdecydowanie powinieneś rozważyć nowszą opcję, ponieważ korzyści mogą być wspaniałe, a praca łatwa do wdrożenia.

Możesz równie dobrze z niego korzystać, ponieważ Usługi Google Play są regularnie aktualizowane na różnych urządzeniach i stale obejmują ulepszenia funkcji związanych z lokalizacją (i nie tylko).

Link do wyjaśnienia FusedLocationProvider chwili premiery: https://www.youtube.com/watch?v=Bte_GHuxUGc

2

W niektórych sytuacjach FusedLocationProvider wykonuje strasznie. Jeśli chcesz na przykład śledzić trasę na mapie, może zdecydować się na przełączanie między danymi GPS a danymi Wi-Fi. Aby obliczyć dokładną przebytą odległość, znacznie lepiej wymusić odczyty GPS za pomocą LocationManager, szczególnie jeśli chcesz również śledzić wysokość, której nie zapewnia Wi-Fi.

+0

W jednym z moich projektów muszę przechwytywać lokalizację użytkownika co 10 sekund. Użyłem GPS i operatora sieci. Moja ścieżka to droga nad rzeką. Kiedy wykreślam przechwycone długie lata na mapie google, pokazuje mi to 5-6m długości, o wiele więcej niż długości lat i która spada w rzece. Zgodnie z tymi testami, ostatecznym wnioskiem senario jest, że ścieżka użytkownika znajduje się na rzece, która jest błędna pod względem względności. Więc mogę użyć zespolonego w mojej sytuacji. W tej chwili wszystko działa dobrze przy użyciu fused, ale jak na twój komentarz mam wątpliwości, więc proszę zasugeruj mi. W moim przypadku wymagałem odpowiedniego długiego czasu. –

+0

Podczas testowania i po przeczytaniu uważam, że jeśli chcesz dokładnie śledzić ścieżkę, lepiej wymusić GPS z menedżerem lokalizacji. Jeśli żywotność baterii nie jest wielkim problemem, to jest najlepsza.Zauważyłem, że inne aplikacje wysokiej jakości, takie jak S-Health czy MapMyRun, wydają się używać menedżera lokalizacji, ponieważ ich utwory wyglądają bardzo podobnie do moich, gdy uruchamiam te aplikacje w tym samym czasie co mój. –

+0

Użyłem tego również, ale moja ścieżka jest nie jest to dokładne. Spędzam wiele godzin w testach i wypróbowałem także inne urządzenia. –

0

Pamiętaj, że FusedLocationProvider używa pod pokrywą LocationManager, aby uzyskać co najmniej punkty GPS. Może to być przeprowadzanie skanowania Wi-Fi i sprawdzanie wyników w celu określenia lokalizacji, zamiast korzystania z operatora sieci, ale nie ma żadnej dokumentacji na ten temat, o którym jestem świadomy.

Jeśli nie możesz lub nie chcesz używać FusedLocationProvider, polecam go używać.