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 funkcję
NavigationApi#clearForegroundServiceManager
przed wywołaniem funkcji
NavigationApi#initForegroundServiceManagerProvider
, a jeśli ForegroundServiceManager
została już zainicjowana, wywołaj funkcję
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) wprowadzono 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 wywołasz
startGuidance()
w aplikacji, usługa na pierwszym planie zacznie 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 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 scalanie Gradle. Jeśli jednak powiadomienie nie zostanie wyświetlone użytkownikowi, zanim aplikacja przejdzie w tło, pakiet SDK Navigation 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ć deweloperzy 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”.