Na tej stronie znajdziesz sprawdzone metody dotyczące wysyłania próśb o uprawnienia do korzystania z lokalizacji w tle i zarządzania nimi.
Prośba o dostęp do lokalizacji „Zawsze zezwalaj”
Od Androida 14 aplikacje muszą mieć uprawnienie ACCESS_BACKGROUND_LOCATION, aby mieć dostęp do lokalizacji użytkownika.
Pakiet Navigation SDK zawiera to uprawnienie w pliku manifestu, więc nie musisz o nie prosić (chyba że jest potrzebne do innych celów), ponieważ narzędzie do scalania plików manifestu Gradle zapewni jego scalenie z plikiem manifestu aplikacji.
Jednak uprawnienie ACCESS_BACKGROUND_LOCATION nie wystarczy, aby uzyskać dostęp do lokalizacji w tle. Zalecamy poproszenie użytkowników o przyznanie uprawnień do lokalizacji „Zawsze zezwalaj”. Dzięki temu aplikacja może działać w tle i wyświetlać powiadomienia, co maksymalizuje dokładność lokalizacji podczas nawigacji.
W komunikacie 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 proszeniu użytkowników o dostęp do lokalizacji znajdziesz w dokumentacji dla deweloperów aplikacji na Androida w artykule Prośba o dostęp do lokalizacji | Czujniki i lokalizacja | Deweloperzy aplikacji na Androida.
Zapewnij prawidłowe czyszczenie powiadomień nawigacyjnych
Aby mieć pewność, że aplikacja nie będzie utrzymywać powiadomień, gdy nie będą już potrzebne, wykonaj te czynności:
- Po wywołaniu
startGuidance()wywołajstopGuidance()lubclearDestination(). - Po zarejestrowaniu
ArrivalListenerpamiętaj, aby wyrejestrować tę usługę. - Po zarejestrowaniu
RoadSnappedLocationProviderpamiętaj, aby wyrejestrować tę usługę.
Wykonanie tych czynności gwarantuje, że powiadomienia nie będą aktywne, gdy nie będą już potrzebne, co mogłoby prowadzić do rozładowania baterii i wycieków pamięci.
Podczas ponownego wywoływania metod NavigationApi#initForegroundServiceManager najpierw wywołaj NavigationApi#clearForegroundServiceManager
Jeśli Twoja aplikacja korzysta z ForegroundServiceManager, wywołaj NavigationApi#clearForegroundServiceManager przed wywołaniem NavigationApi#initForegroundServiceManagerProvider, a jeśli ForegroundServiceManager został już zainicjowany, wywołaj NavigationApi#initForegroundServiceManagerMessageAndIntent. Możesz to zrobić, aby zaktualizować identyfikator lub treść powiadomienia 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 aplikacji uzyskujących dostęp do lokalizacji użytkownika w tle. Aby ułatwić dostosowanie się do tych zmian, w wersji 5.4.0 pakietu Navigation SDK wprowadziliśmy ulepszenia w zakresie zarządzania dostępem do lokalizacji w tle. Zalecamy też zaktualizowanie implementacji, aby aplikacja nadal miała dostęp do najbardziej precyzyjnych danych o lokalizacji.
Jak zmiany w Androidzie 14 wpływają na pakiet Navigation SDK
Gdy wywołasz w aplikacji startGuidance(), usługa na pierwszym planie zacznie wyświetlać użytkownikowi powiadomienia ze szczegółowymi wskazówkami dojazdu. Szczegółowa nawigacja wymaga dostępu do lokalizacji użytkownika, aby aktualizować trasę i wyświetlać prawidłowe wskazówki wizualne i głosowe. 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 aktualizacji lokalizacji, system zgłasza błąd SecurityException, co powoduje awarię aplikacji.
Jak pakiet Navigation SDK rozwiązuje ten problem
Od wersji 5.4.0 pakiet Navigation SDK obsługuje ten SecurityException bez wpływu na aplikację, co pozwala na dalsze działanie nawigacji w tle. Dodatkowo pakiet Navigation SDK zawiera uprawnienie ACCESS_BACKGROUND_LOCATION w pliku AndroidManifest. Dzięki temu aplikacja nie musi deklarować uprawnień, ponieważ zajmie się tym scalanie Gradle. Jeśli jednak powiadomienie nie zostanie wyświetlone użytkownikowi, zanim aplikacja przejdzie w tło, pakiet Navigation SDK będzie polegać na systemie w zakresie aktualizacji lokalizacji. Te aktualizacje systemu mogą nie być częste ani precyzyjne, co może prowadzić do nieoptymalnego działania nawigacji. Z tego powodu zalecamy, aby prosić 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 Navigation SDK, aktualizując aplikację tak, aby prosiła użytkowników o dostęp do lokalizacji w tle. Więcej informacji znajdziesz w artykule Prośba o dostęp do lokalizacji „Zawsze zezwalaj”.