Na tej stronie znajdziesz sprawdzone metody dotyczące proszenia użytkowników o uprawnienia do korzystania z lokalizacji w tle i zarządzania nimi.
Proś o dostęp do lokalizacji na poziomie „Zawsze zezwalaj”
Od Androida 14 aplikacje muszą mieć uprawnienie ACCESS_BACKGROUND_LOCATION
, aby uzyskać dostęp do lokalizacji użytkownika.
Pakiet Navigation SDK zawiera te uprawnienia w pliku manifestu, więc nie musisz o nie wyraźnie prosić (jeśli nie są potrzebne do innych celów), ponieważ narzędzie do łączenia plików manifestu Gradle zadba o to, aby zostały połączone z plikiem manifestu aplikacji.
Jednak samo uprawnienie ACCESS_BACKGROUND_LOCATION
nie wystarczy, aby uzyskać dostęp do lokalizacji w tle. Zalecamy, aby prosić użytkowników o przyznanie uprawnień do lokalizacji „Zawsze”. Dzięki temu aplikacja może działać w tle i wyświetlać powiadomienia, co zwiększa dokładność lokalizacji podczas nawigacji.
W prośbie należy wyjaśnić użytkownikom, jak przyznanie uprawnień wpłynie na dokładność lokalizacji i wygodę korzystania z nawigacji, gdy aplikacja działa w tle.
Więcej informacji o wyświetlaniu użytkownikom prośby o dostęp do lokalizacji znajdziesz w artykule Request location permissions | Sensors and location | Android Developers w dokumentacji dla deweloperów aplikacji na Androida.
Zapewnienie prawidłowego czyszczenia powiadomień nawigacyjnych
Aby mieć pewność, że aplikacja nie będzie utrzymywać powiadomień po tym, jak przestaną być potrzebne, wykonaj te czynności:
- Po wywołaniu funkcji
startGuidance()
wywołaj funkcjęstopGuidance()
lubclearDestination()
. - Po zarejestrowaniu urządzenia
ArrivalListener
wyrejestruj je. - Po zarejestrowaniu urządzenia
RoadSnappedLocationProvider
wyrejestruj je.
Wykonanie tych czynności sprawi, że powiadomienia nie będą aktywne, gdy nie będą już potrzebne, co może prowadzić do rozładowania baterii i ewentualnych wycieków pamięci.
Przed ponownym wywołaniem metod NavigationApi#initForegroundServiceManager wywołaj najpierw NavigationApi#clearForegroundServiceManager
Jeśli Twoja aplikacja korzysta z ForegroundServiceManager
, wywołaj
NavigationApi#clearForegroundServiceManager
przed wywołaniem
NavigationApi#initForegroundServiceManagerProvider
, a jeśli ForegroundServiceManager
została już zainicjowana, wywołaj
NavigationApi#initForegroundServiceManagerMessageAndIntent
. Możesz to zrobić, aby zaktualizować identyfikator powiadomienia lub jego treść po zainicjowaniu menedżera usług działających na pierwszym planie.
Nowe ograniczenia wprowadzone w Androidzie 14
W Androidzie 14 (Android U) wprowadziliśmy nowe ograniczenia dotyczące dostępu aplikacji do lokalizacji użytkownika w tle. Aby złagodzić te zmiany, w wersji 5.4.0 pakietu Navigation SDK wprowadziliśmy aktualizację, która lepiej zarządza dostępem do lokalizacji w tle. Zalecamy też zaktualizowanie wdrożenia, aby aplikacja nadal miała dostęp do najbardziej precyzyjnych danych o lokalizacji.
Wpływ zmian w Androidzie 14 na pakiet Navigation SDK
Gdy w aplikacji wywołasz
startGuidance()
usługę na pierwszym planie, zacznie ona wyświetlać użytkownikowi powiadomienia dotyczące nawigacji krok po kroku. Nawigacja zakręt po zakręcie wymaga dostępu do lokalizacji użytkownika, aby można było aktualizować trasę i wyświetlać prawidłowe wskazówki wizualne i dźwiękowe. Od Androida 14 dostęp do dokładnej lokalizacji użytkownika w tle wymaga jego zgody. Domyślnie, jeśli aplikacja nie ma zgody użytkownika na dostęp do lokalizacji w tle i próbuje uruchomić usługę działającą na pierwszym planie w celu uzyskania aktualizacji lokalizacji, system zgłasza wyjątek SecurityException
, co powoduje awarię aplikacji.
Jak pakiet Navigation SDK rozwiązuje ten problem
Od wersji 5.4.0 pakiet Navigation SDK obsługuje tę sytuację SecurityException
bez wpływu na aplikację, dzięki czemu nawigacja może nadal działać w tle. Pakiet Navigation SDK zawiera też uprawnienie
ACCESS_BACKGROUND_LOCATION
w swoim AndroidManifest
. Dzięki temu aplikacja nie musi deklarować uprawnień samodzielnie, ponieważ zrobi to za nią scalanie Gradle. Jeśli jednak powiadomienie nie zostanie wyświetlone użytkownikowi, zanim aplikacja przejdzie w tło, pakiet SDK do nawigacji będzie polegać na systemie w zakresie aktualizacji lokalizacji. Te aktualizacje systemu mogą nie być częste ani dokładne, co może skutkować nieoptymalnym działaniem nawigacji. Z tego powodu zalecamy również wyświetlanie użytkownikom prośby o dostęp do lokalizacji w tle.
Co mogą zrobić programiści aplikacji, aby zwiększyć dokładność lokalizacji na potrzeby nawigacji
Możesz zwiększyć dokładność sygnału lokalizacji używanego przez Navigation SDK, aktualizując aplikację, aby prosiła użytkowników o dostęp do lokalizacji w tle. Więcej informacji znajdziesz w artykule Prośba o zezwolenie na dostęp do lokalizacji na poziomie „Zawsze zezwalaj”.