Aby chronić prywatność użytkowników, zalecamy deweloperom aplikacji proszenie tylko o uprawnienia dotyczące przybliżonej lokalizacji. Aplikacje, które potrzebują przybliżonej lokalizacji ogólnej, zwykle korzystają z lokalizacji sieci (FLP), ponieważ jest ona szybka i wymaga mniej energii.
W przypadku aplikacji samochodowych lokalizacja sieci w urządzeniach mobilnych z Androidem może być trudniejsza do określenia niż w urządzeniach mobilnych z Androidem. Możesz użyć 2 interfejsów API Androida:
Interfejs LocationManager API wymaga, aby wyraźnie wskazać preferowanego dostawcę lokalizacji.
Interfejs API Usług Google Play oferuje uproszczony sposób obsługi lokalizacji dzięki wprowadzeniu usługi FLP (Fused Location Provider).
Wiele aplikacji samochodowych zamiast LM używa FLP z interfejsu API Usług Google Play (GPS). FLP wybiera optymalnego dostawcę lokalizacji na podstawie kryteriów żądania lokalizacji i wymagań (mocy i dokładności) potrzebnych pojazdowi.
Możesz zamiast tego poprosić o uprawnienia NETWORK_PROVIDER
w ramach LM i użyć ich, a także użyć uprawnień GPS_PROVIDER
do dokładnych pozycji.android.permission.ACCESS_FINE_LOCATION
W interfejsie API 31 usługa FUSED_PROVIDER
, która wcześniej była dostępna tylko przez interfejs GPS API, jest teraz dostępna jako dostawca lokalizacji dla LM. Prostszą implementację FLP znajdziesz w artykule FusedLocationProvider.java
.
Chociaż można używać GPS_PROVIDER
tylko z uprawnieniami o niskiej dokładności, framework sztucznie obniża dokładność, aby dopasować ją do oczekiwań. Nie ma to większego sensu dla deweloperów tworzących aplikacje na telefony z Androidem, ponieważ ogólna dostępność jest niska, a uzyskiwanie pozycji z niską dokładnością jest często wolniejsze.
Lokalizacja sieciowa w samochodach
NETWORK_PROVIDER
używana na telefonach z Androidem (z usługami mobilnymi Google) zmieniła się z określania lokalizacji na podstawie wyłącznie pobliskich wież komórkowych na korzystanie również z punktów dostępu Wi-Fi lub nawet znaczników Bluetooth (BT). Korzystanie z NETWORK_PROVIDER
może wymagać połączenia danych.
W przypadku aplikacji samochodowych ograniczenia dotyczące urządzeń są inne. Ponieważ GNSS jest zwykle włączone, nie ma żadnych kar za zwiększone zużycie energii i baterii. W efekcie nie ma to wpływu na czas działania IVI. Staramy się minimalizować ilość danych wymienianych z naszym serwerem.
Dlatego wiele aplikacji korzysta z FLP z Play API zamiast z LM bezpośrednio, ponieważ FLP automatycznie działa sprytnie, korzystając z dostawcy lokalizacji, który najlepiej spełnia kryteria/zasady dotyczące żądania lokalizacji (czyli jest wydajny i dokładny).
W przeciwieństwie do urządzeń mobilnych pojazdy rzadko przeskakują z jednego miejsca do drugiego. Pozycja pojazdu jest zwykle znana w większości przypadków.
Dostawca lokalizacji sieciowej
Większość pojazdów nie implementuje wymaganych interfejsów API telefonu, aby uzyskać potrzebne informacje o identyfikatorze komórki (i sile sygnału). W efekcie, ponieważ minimalizujemy użycie danych, nie udostępniamy żadnej dodatkowej implementacji NLP.
dostawca uśrednionej lokalizacji,
Mobilny FLP oprócz inteligentnego korzystania z dostawców sieci i GPS-a w odpowiednich przypadkach łączy informacje z innych czujników, aby jeszcze bardziej poprawić jakość lokalizacji. Obecna implementacja FLP w Automotive korzysta z powyższych założeń i cały czas używa źródłaGPS_PROVIDER
jako źródła podstawowego. Podaje ona pozycje z GNSS, dodając w razie potrzeby pewne błędy, aby zwiększyć niedokładność. Na przykład, gdy klientom udostępniane są przybliżone lokalizacje.
W niektórych przypadkach może to potrwać dłużej niż zwykle. Na przykład podczas pierwszego użycia pojazdu lub, mówiąc dokładniej, jego podsystemu lokalizacji lub po jego holowaniu.
Projektowanie aplikacji pod kątem użycia na urządzeniach mobilnych i w samochodach
Zalecamy, aby aplikacje kierowane na urządzenia mobilne i samochodowe, które nie wymagają wyższej jakości dokładności żądania, korzystały android.permission.ACCESS_COARSE_LOCATION
tylko z FLP, gdy jest to możliwe. Jako ostateczne rozwiązanie możesz użyć bezpośrednio GPS_PROVIDER
z tymi samymi uprawnieniami. System ten obniża dokładność pozycji GNSS, aby dostosować ją do wymagań interfejsu API. Więcej informacji znajdziesz w artykule Dokładność.
Dodatkowo w pliku manifestu aplikacji należy wyraźnie zadeklarować funkcję android.hardware.location.network
opcjonalną.
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 co za tym idzie, maksymalną dostępność aplikacji bez różnic w kodzie, które mogłyby być potrzebne do uzyskania pozycji.