Na tej stronie znajdziesz sprawdzone metody dotyczące proszenia użytkowników o uprawnienia do korzystania z lokalizacji w tle i zarządzania nimi.
Wysyłanie prośby o dostęp do lokalizacji z opcją „Zawsze zezwalaj”
Od Androida 14 aplikacje muszą mieć uprawnienie
ACCESS_BACKGROUND_LOCATION, aby uzyskać dostęp do lokalizacji użytkownika.
Pakiet Navigation SDK zawiera to uprawnienie w pliku manifestu, więc nie musisz o nie wyraźnie prosić (jeśli nie jest potrzebne do innych celów), ponieważ narzędzie do łączenia plików manifestu Gradle zadba o to, aby zostało ono 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 uprawnienia do lokalizacji „Zezwalaj zawsze”. Dzięki temu aplikacja może działać w tle i wyświetlać powiadomienia, co maksymalizuje dokładność lokalizacji podczas nawigacji.
W prośbie należy wyjaśnić użytkownikom, jak przyznanie uprawnień poprawi dokładność lokalizacji i ułatwi nawigację, 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.
Zadbaj o prawidłowe czyszczenie powiadomień nawigacyjnych
Aby mieć pewność, że aplikacja nie będzie utrzymywać powiadomień po tym, jak nie będą już potrzebne, wykonaj te czynności czyszczenia:
- Po wywołaniu funkcji
startGuidance()wywołaj funkcjęstopGuidance()lubclearDestination(). - Po zarejestrowaniu urządzenia
ArrivalListenerwyrejestruj je. - Po zarejestrowaniu urządzenia
RoadSnappedLocationProviderwyrejestruj je.
Wykonanie tych czynności sprawi, że powiadomienia nie będą aktywne, gdy nie będą już potrzebne, co może prowadzić do wyczerpania baterii i ewentualnych wycieków pamięci.
Podczas ponownego wywoływania metod NavigationApi#initForegroundServiceManager najpierw wywołaj NavigationApi#clearForegroundServiceManager
Jeśli Twoja aplikacja korzysta z metody 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) wprowadzono nowe ograniczenia dotyczące dostępu aplikacji do lokalizacji użytkownika w tle. Aby złagodzić skutki tych zmian, w wersji 5.4.0 zaktualizowaliśmy pakiet Navigation SDK, aby lepiej zarządzać dostępem do lokalizacji w tle. Zalecamy też zaktualizowanie wdrożenia, aby aplikacja nadal miała dostęp do najdokładniejszych 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 to zdarzenie SecurityExceptionbez 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ż scalanie Gradle zajmie się tym za nią. Jeśli jednak powiadomienie nie zostanie wyświetlone użytkownikowi, zanim aplikacja przejdzie w tryb tła, pakiet Navigation SDK 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ć użytkowników o dostęp do lokalizacji w tle. Więcej informacji znajdziesz w artykule Żądanie uprawnień do lokalizacji „Zawsze zezwalaj”.