Dostawcy lokalizacji dla Androida - dostawca GPS czy sieci?

129

W mojej aplikacji chciałbym określić aktualną lokalizację użytkownika. Mam jednak kilka pytań w tym zakresie:

  1. Są różni dostawcy lokalizacji, który z nich jest najdokładniejszy? Provider GPS lub operator sieci ?

  2. Jak bardzo różnią się dostępni dostawcy? Jak one funkcjonują?

  3. Czy mógłbyś podać mi fragmenty kodu lub samouczki, jak rozpocząć wdrażanie funkcji GPS w mojej aplikacji?

Noman
źródło
18
Głosuj na ponowne otwarcie - pytanie jest dobre, a podana odpowiedź jest przydatna. Odpowiedź jest również nieaktualna, ponieważ istnieje teraz dostawca lokalizacji połączonych - otwarcie pytania umożliwiłoby aktualizację.
Richard Le Mesurier,

Odpowiedzi:

282

W systemie Android są 3 dostawcy lokalizacji.

Oni są:

gps -> (GPS, AGPS): nazwa dostawcy lokalizacji GPS. Ten dostawca określa lokalizację za pomocą satelitów. W zależności od warunków ten dostawca może trochę potrwać, aby zwrócić poprawkę lokalizacji. Wymaga uprawnienia android.permission.ACCESS_FINE_LOCATION.

sieć -> (AGPS, CellID, WiFi MACID): nazwa dostawcy lokalizacji sieciowej. Ten dostawca określa lokalizację na podstawie dostępności wieży komórkowej i punktów dostępu Wi-Fi. Wyniki są pobierane za pomocą wyszukiwania sieciowego. Wymaga jednego z uprawnień android.permission.ACCESS_COARSE_LOCATION lub android.permission.ACCESS_FINE_LOCATION.

pasywne -> (CellID, WiFi MACID): Specjalny dostawca lokalizacji do odbierania lokalizacji bez inicjowania poprawki lokalizacji. Ten dostawca może być używany do pasywnego otrzymywania aktualizacji lokalizacji, gdy inne aplikacje lub usługi o nie żądają, bez konieczności samodzielnego żądania lokalizacji. Ten dostawca zwróci lokalizacje wygenerowane przez innych dostawców. Wymaga uprawnienia android.permission.ACCESS_FINE_LOCATION, chociaż jeśli GPS nie jest włączony, ten dostawca może zwracać tylko zgrubne poprawki. Oto, co Android nazywa tymi dostawcami lokalizacji, jednak podstawowe technologie, które sprawiają, że te rzeczy działają, są mapowane na określony zestaw sprzętu i możliwości oferowanych przez telekomunikację (usługa sieciowa).

Najlepszym sposobem jest skorzystanie najpierw z dostawcy „sieciowego” lub „pasywnego”, a następnie awaryjne połączenie z „gps” i, w zależności od zadania, przełączanie się między dostawcami. Obejmuje to wszystkie przypadki i zapewnia usługę najniższego wspólnego mianownika (w najgorszym przypadku) i doskonałą obsługę (w najlepszym przypadku).

wprowadź opis obrazu tutaj

Odniesienie do artykułu: Dostawcy lokalizacji dla Androida - GPS, sieć, pasywne Nazmul Idris

Odniesienie do kodu: https://stackoverflow.com/a/3145655/28557

-----------------------Aktualizacja-----------------------

Teraz Android ma dostawcę lokalizacji Fused

Dostawca lokalizacji Fused Location inteligentnie zarządza podstawową technologią lokalizacji i zapewnia najlepszą lokalizację zgodnie z Twoimi potrzebami. Upraszcza sposoby uzyskiwania przez aplikacje aktualnej lokalizacji użytkownika z większą dokładnością i mniejszym zużyciem energii

Dostawca lokalizacji Fused zapewnia trzy sposoby pobierania lokalizacji

  1. Ostatnia lokalizacja: użyj, jeśli chcesz raz poznać bieżącą lokalizację.
  2. Żądaj lokalizacji za pomocą nasłuchiwania: użyj, gdy aplikacja jest na ekranie / interfejsie i wymaga ciągłej lokalizacji.
  3. Żądaj lokalizacji przy użyciu oczekujących zamiarów: użyj, gdy aplikacja działa w tle i wymaga ciągłej lokalizacji.

Bibliografia :

Oficjalna strona: http://developer.android.com/google/play-services/location.html

Przykład dostawcy lokalizacji połączonej: GIT: https://github.com/kpbird/fused-location-provider-example

http://blog.lemberg.co.uk/fused-location-provider

-------------------------------------------------- ------

Vinayak Bevinakatti
źródło
2
Zauważ, że istnieje również dostawca Google Play Services Fused Locator, z którego można skorzystać.
Richard Le Mesurier,
Czy można stworzyć własnego niestandardowego dostawcę lokalizacji? android.permission.INSTALL_LOCATION_PROVIDER jest podpisany lub systemowy, co oznacza, że ​​powinienem mieć możliwość zainstalowania go na zrootowanym urządzeniu, nie?
JohnyTex
1
Dostawca lokalizacji połączonych jest dostępny tylko dla API> = 19. Musimy nadal postępować zgodnie ze starą procedurą dla urządzeń ze starszymi wersjami, prawda?
Shobhit Puri
czy istnieje przykładowy kod / istniejący interfejs API, który szuka lokalizacji GPS i po pewnym czasie zwraca się do dostawcy sieci, jeśli GPS nie może pobrać lokalizacji? czy powinno być obsługiwane w kodzie przez jakąś logikę timera?
jrhamza
Dostawca pasywny "" "Ten dostawca może być używany do pasywnego otrzymywania aktualizacji lokalizacji, gdy inne aplikacje lub usługi żądają ich bez konieczności samodzielnego żądania lokalizacji." ""
nurisezgin
7

GPS jest generalnie dokładniejszy niż sieć, ale czasami GPS nie jest dostępny, dlatego może być konieczne przełączanie się między nimi.

Na dobry początek może zajrzeć na stronę dla programistów Androida. Mieli sekcję poświęconą określaniu lokalizacji użytkownika i zawierała wszystkie potrzebne przykłady kodu.

http://developer.android.com/guide/topics/location/obtaining-user-location.html

Otra
źródło
@Noman, czy chcesz poznać długość i szerokość geograficzną swojej lokalizacji?
Nikunj Patel
@Scorpio Właściwie chciałem wiedzieć, która opcja jest lepsza wśród DOSTAWCY SIECI i DOSTAWCY GPS. . .Otra wyślij mi link jako odpowiedź na moje pytanie, które ahs bardzo mi pomogło ... teraz używam NETWORK PROVIDER w mojej aplikacji :-)
Noman
3

Jest tu kilka świetnych odpowiedzi. Innym podejściem, które możesz zastosować, byłoby użycie bezpłatnych SDK dostępnych online, takich jak Atooma, tranql i Neura, które można zintegrować z aplikacją na Androida (integracja zajmuje mniej niż 20 minut). Oprócz podania dokładnej lokalizacji użytkownika, może również zapewnić dobry wgląd w działania użytkownika. Ponadto niektóre z nich zużywają mniej niż 1% baterii

johndaly
źródło
1
czy mogę uzyskać odniesienia do wspomnianego zestawu SDK?
Kishore Relangi