Na tej stronie znajdziesz sprawdzone metody dotyczące żądania uprawnień do korzystania z lokalizacji w tle i zarządzania nimi.
Poproś 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 SDK nawigacji zawiera te uprawnienia w pliku manifestu, więc nie musisz ich wyraźnie żądać (jeśli nie są potrzebne do innych celów), ponieważ narzędzie do łączenia plików manifestu Gradle zadba o to, aby zostały one połączone z pliku manifestu aplikacji.
Jednak uprawnienia ACCESS_BACKGROUND_LOCATION
nie wystarczają do uzyskiwania dostępu do lokalizacji w tle. Zalecamy, aby prosić użytkowników o „Dostęp przez cały czas”. Dzięki temu aplikacja może działać w tle i wyświetlać powiadomienia, co maksymalizuje dokładność lokalizacji podczas nawigacji.
W powiadomieniu należy wyjaśnić użytkownikom, jak przyznanie uprawnienia poprawi dokładność lokalizacji i ułatwi nawigację, gdy aplikacja działa w tle.
Więcej informacji o proszeniu użytkowników o dostęp do lokalizacji znajdziesz w dokumentacji dla deweloperów aplikacji na Androida [Uprawnienia] Wymagaj dostępu do lokalizacji | Czujniki i lokalizacja | Dokumentacja dla deweloperów Androida.
Uporządkowanie powiadomień o nawigacji
Aby mieć pewność, że Twoja aplikacja nie będzie wysyłać powiadomień, gdy nie są już potrzebne, wykonaj te czynności:
- Po wywołaniu
startGuidance()
należy wywołaćstopGuidance()
lubclearDestination()
. - Po zarejestrowaniu domeny
ArrivalListener
pamiętaj, aby ją wyrejestrować. - Po zarejestrowaniu
RoadSnappedLocationProvider
pamiętaj, aby go wyrejestrować.
Dzięki temu powiadomienia nie będą już działać, gdy nie są już potrzebne, co mogłoby spowodować szybsze zużycie baterii i możliwe wycieki pamięci.
Podczas ponownego wywoływania metod NavigationApi#initForegroundServiceManager najpierw wywołaj NavigationApi#clearForegroundServiceManager
Jeśli Twoja aplikacja korzysta z funkcji ForegroundServiceManager
, wywołaj funkcję NavigationApi#clearForegroundServiceManager
przed wywołaniem funkcji NavigationApi#initForegroundServiceManagerProvider
. Jeśli funkcja 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 na pierwszym planie.
Nowe ograniczenia wprowadzone w Androidzie 14
Android 14 (Android U) wprowadził nowe ograniczenia dotyczące aplikacji uzyskujących dostęp do lokalizacji użytkownika w tle. Aby złagodzić te zmiany, w wersji 5.4.0 pakietu SDK nawigacji wprowadzono poprawki, które umożliwiają lepsze zarządzanie dostępem do lokalizacji w tle. Zalecamy też zaktualizowanie implementacji, aby mieć pewność, że aplikacja będzie mieć dostęp do jak najbardziej dokładnych danych o lokalizacji.
Jak zmiany w Androidzie 14 wpływają na pakiet SDK nawigacji
Gdy wywołasz usługę startGuidance()
w aplikacji, usługa na pierwszym planie zaczyna wyświetlać użytkownikowi powiadomienia dotyczące nawigacji krok po kroku. Nawigacja zakręt po zakrętem 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 uprawnień użytkownika do dostępu do lokalizacji w tle i próbuje uruchomić usługę na pierwszym planie w celu otrzymywania aktualizacji lokalizacji, system zgłasza błąd SecurityException
, powodując awarię aplikacji.
Jak pakiet SDK do nawigacji łagodzi ten problem
Począwszy od wersji 5.4.0 pakiet SDK Nawigacji obsługuje tę funkcję SecurityException
bez wpływu na aplikację, co pozwala na kontynuowanie działania funkcji nawigacji w tle. Dodatkowo pakiet SDK nawigacji zawiera uprawnienie ACCESS_BACKGROUND_LOCATION
w swoim pliku AndroidManifest
. Dzięki temu aplikacja nie musi deklarować uprawnień, ponieważ przetwarzanie Gradle zajmie się tym. Jeśli jednak powiadomienie nie zostanie wyświetlone użytkownikowi, zanim aplikacja przejdzie w tło, pakiet SDK Nawigacji będzie polegać na systemie w kwestii dostarczania aktualizacji lokalizacji. Te aktualizacje systemu mogą być nieczęste lub niedokładne, co może powodować nieoptymalne działanie funkcji nawigacji. Z tego powodu zalecamy też poproszenie użytkowników 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 pakiet SDK nawigacji, aktualizując aplikację, aby prosić użytkowników o dostęp do lokalizacji w tle. Więcej informacji znajdziesz w artykule Wysyłanie żądań o dostęp do lokalizacji na poziomie „Zawsze zezwalaj”.