Sprawdzone metody dotyczące korzystania z lokalizacji w tle

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 wystarczą 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.

sample permission
dialog

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.

Zadbaj o odpowiednie usuwanie powiadomień 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() musisz wywołać stopGuidance() lub clearDestination().
  • Po zarejestrowaniu ArrivalListener pamiętaj, aby go 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 prowadzić do szybszego rozładowywania się baterii i możliwych wycieków pamięci.

Podczas ponownego wywoływania metody initForegroundServiceManager z interfejsu NavigationApi należy najpierw wywołać metodę clearForegroundServiceManager z interfejsu NavigationApi.

Jeśli Twoja aplikacja korzysta z funkcji ForegroundServiceManager, wywołaj NavigationApi#clearForegroundServiceManager przed wywołaniem NavigationApi#initForegroundServiceManagerProvider. Jeśli funkcja 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 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 ulepszenia, 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 do 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 aktualizacji lokalizacji, system zgłasza błąd SecurityException, powodując awarię aplikacji.

Jak pakiet SDK do nawigacji rozwiązuje ten problem

Począwszy od wersji 5.4.0 pakiet SDK Nawigacji obsługuje tę funkcję SecurityExceptionbez 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 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 do trybu w tle, 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”.