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ż złączanie manifestu w Gradle zadba o to, aby zostały one połączone z manifestem aplikacji.
Jednak uprawnienie ACCESS_BACKGROUND_LOCATION
nie wystarcza do uzyskiwania dostępu do lokalizacji w tle, dlatego zalecamy, aby prosić użytkowników o przyznanie uprawnień „Zezwalaj zawsze” do lokalizacji. 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 [Android] Proś o dostęp do lokalizacji | Czujniki i lokalizacja.
Zadbaj o odpowiednie usuwanie powiadomień nawigacji
Aby mieć pewność, że powiadomienia nie będą wyświetlane w aplikacji, gdy nie są już potrzebne, wykonaj te czynności:
- Po wywołaniu
startGuidance()
musisz wywołaćstopGuidance()
lubclearDestination()
. - Po zarejestrowaniu
ArrivalListener
pamiętaj, aby go wyrejestrować. - Po zarejestrowaniu
RoadSnappedLocationProvider
pamiętaj, aby go wyrejestrować.
Dzięki temu powiadomienia nie będą 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 metody initForegroundServiceManager interfejsu NavigationApi najpierw wywołaj metodę clearForegroundServiceManager interfejsu NavigationApi.
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 zminimalizować 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 zapewnić aplikacji dostęp do jak najbardziej dokładnych danych o lokalizacji.
Jak zmiany w Androidzie 14 wpływają na pakiet Navigation SDK
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 wizualne i dźwiękowe wskazówki. Od Androida 14 dostęp do dokładnej lokalizacji użytkownika w tle wymaga jego zgody. Jeśli aplikacja nie ma uprawnień do dostępu do lokalizacji w tle i próbuje uruchomić usługę na pierwszym planie w celu aktualizowania lokalizacji, system zgłasza błąd SecurityException
, co powoduje awarię aplikacji.
Jak pakiet Navigation SDK ł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 nawigacji w tle. Dodatkowo pakiet SDK nawigacji zawiera uprawnienie ACCESS_BACKGROUND_LOCATION
w swoim AndroidManifest
. Dzięki temu aplikacja nie musi deklarować uprawnień, ponieważ przetwarzanie w 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 programiści aplikacji mogą zrobić, 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 Prośba o dostęp do lokalizacji na poziomie „Zawsze zezwalaj”.