Aby chronić prywatność użytkowników, zachęcamy deweloperów aplikacji do żądania tylko uprawnień do lokalizacji przybliżonej. Aplikacje, które potrzebują przybliżonej lokalizacji, zwykle korzystają z lokalizacji sieciowej (FLP), ponieważ jest ona szybka i zużywa mniej energii.
W porównaniu z urządzeniami mobilnymi z Androidem lokalizacja sieciowa w aplikacjach samochodowych może być trudniejsza do uzyskania. Możesz użyć 2 interfejsów API Androida:
Interfejs API LocationManager (LM) wymaga wyraźnego określenia preferowanego dostawcy lokalizacji.
Interfejs API usług Google Play oferuje uproszczony sposób pracy z lokalizacją dzięki wprowadzeniu dostawcy uśrednionej lokalizacji (FLP).
Wiele aplikacji samochodowych używa FLP z interfejsu API usług Google Play (GPS) zamiast LM. FLP wybiera optymalnego dostawcę lokalizacji na podstawie kryteriów i zasad dotyczących żądania lokalizacji (zużycie energii i dokładność) wymaganych przez pojazd.
Zamiast tego możesz wyraźnie poprosić o użycie
NETWORK_PROVIDER w LM, a także
GPS_PROVIDER w przypadku dokładnych pozycji, które korzystają z uprawnień
android.permission.ACCESS_FINE_LOCATION. W interfejsie API 31 FUSED_PROVIDER,
który był wcześniej dostępny tylko przez interfejs GPS API, jest teraz
dostępny jako dostawca lokalizacji dla LM. Prostszą implementację FLP możesz zobaczyć w
FusedLocationProvider.java.
Chociaż można używać GPS_PROVIDER tylko z uprawnieniami do lokalizacji przybliżonej, framework sztucznie obniża dokładność, aby dostosować się do oczekiwań. Nie ma to jednak sensu w przypadku deweloperów tworzących aplikacje na telefony z Androidem, ponieważ ogólna dostępność jest niska, a uzyskanie przybliżonej lokalizacji często trwa dłużej.
Lokalizacja sieciowa w samochodzie
NETWORK_PROVIDER używany na telefonach z Androidem (z usługami mobilnymi Google) zmienił się z określania lokalizacji na podstawie wyłącznie pobliskich stacji bazowych na korzystanie również z punktów dostępu Wi-Fi, a nawet beaconów Bluetooth (BT). Użycie NETWORK_PROVIDER może wymagać połączenia z internetem.
W przypadku aplikacji samochodowych ograniczenia dotyczące urządzeń są inne. Ponieważ GNSS jest zwykle włączony, nie ma kar za zwiększone zużycie energii i wykorzystanie baterii. Dzięki temu czas działania IVI nie jest ograniczony. Staramy się minimalizować ilość danych wymienianych z naszymi serwerami.
Wiele aplikacji używa więc FLP z interfejsu Play API zamiast bezpośrednio LM, ponieważ FLP automatycznie wykonuje inteligentne działanie, korzystając z dostawcy lokalizacji, który najlepiej spełnia kryteria/zasady dotyczące żądania lokalizacji (czyli zużycie energii i dokładność).
W przeciwieństwie do urządzeń mobilnych pojazdy rzadko przeskakują z jednego miejsca do drugiego. Pozycja pojazdu jest przez większość czasu znana.
Dostawca lokalizacji sieciowej
Większość pojazdów nie implementuje wymaganych interfejsów API telefonii, aby uzyskać potrzebne informacje o identyfikatorze komórki (i sile sygnału). W związku z tym i dlatego, że minimalizujemy zużycie danych, nie udostępniamy dodatkowej implementacji funkcjonalnej NLP.
Dostawca uśrednionej lokalizacji
Mobilny FLP oprócz inteligentnego korzystania z dostawców sieci i GPS łączy informacje z innych czujników, aby jeszcze bardziej poprawić jakość lokalizacji. Z kolei obecna implementacja FLP w samochodach wykorzystuje wspomniane założenia i cały czas używa GPS_PROVIDER jako źródła. W razie potrzeby zniekształca pozycje z GNSS, dodając pewne błędy, aby były mniej dokładne. Na przykład gdy klientowi są udostępniane lokalizacje przybliżone.
W związku z tym w bardzo rzadkich przypadkach pierwsza pozycja może być dostępna dłużej niż zwykle. Na przykład gdy pojazd lub, dokładniej, jego podsystem lokalizacji jest używany po raz pierwszy albo po odholowaniu.
Projektowanie aplikacji na urządzenia mobilne i samochodowe
Zalecamy, aby aplikacje na urządzenia mobilne i Automotive, które nie wymagają większej precyzji, żądały android.permission.ACCESS_COARSE_LOCATION
tylko uprawnienia `android.permission.ACCESS_COARSE_LOCATION` i w razie potrzeby korzystały z FLP gdy jest dostępne. Ewentualnie, jako ostatnią deskę ratunku, użyj bezpośrednio GPS_PROVIDER z tymi samymi uprawnieniami. Framework obniża dokładność pozycji GNSS, aby dostosować się do oczekiwań interfejsu API. Więcej informacji znajdziesz w artykule Dokładność.
Ponadto te aplikacje muszą wyraźnie zadeklarować w manifeście, że funkcja
android.hardware.location.network
jest opcjonalna.
Przykład:
<uses-feature android:name="android.hardware.location.network" android:required="false" />
Takie podejście zapewnia maksymalną zgodność z urządzeniami w różnych branżach, a tym samym maksymalną dostępność aplikacji bez różnic w kodzie w przypadku uzyskiwania pozycji w razie potrzeby.