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ż 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.

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 [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() 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ą 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ę SecurityExceptionbez 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”.