Sprawdzone metody dotyczące korzystania z lokalizacji w tle

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.

przykładowe okno
uprawnień

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() lub clearDestination().
  • 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 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) wprowadziliśmy 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 w aplikacji wywołasz startGuidance() usługę na pierwszym planie, zacznie ona 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 można było 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ę 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ż zrobi to za nią scalanie Gradle. Jeśli jednak powiadomienie nie zostanie wyświetlone użytkownikowi, zanim aplikacja przejdzie w tło, pakiet SDK do nawigacji 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ł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”.