Otrzymywanie aktualizacji lokalizacji na Androidzie dzięki Kotlin

1. Zanim zaczniesz

Android 10 i 11 zapewniają użytkownikom większą kontrolę nad dostępem aplikacji do lokalizacji urządzenia.

Gdy aplikacja działająca na Androidzie 11 poprosi o dostęp do lokalizacji, użytkownicy mają 4 opcje:

  • Zawsze zezwalaj
  • Zezwalaj tylko podczas używania aplikacji (Android 10)
  • Tylko raz (w Androidzie 11)
  • Odmów

Android 10

6a1029175b467c77.png

Android 11

73d8cc88c5877c25.png

Z tego modułu dowiesz się, jak otrzymywać aktualizacje lokalizacji i jak obsługiwać lokalizację w dowolnej wersji Androida, zwłaszcza w Androidzie 10 i 11. Po ukończeniu tego laboratorium uzyskasz aplikację, która jest zgodna z obecnymi sprawdzonymi metodami pobierania aktualizacji lokalizacji.

Wymagania wstępne

Co musisz zrobić

  • Stosuj sprawdzone metody dotyczące lokalizacji na Androidzie.
  • Obsługuj uprawnienia do lokalizacji na pierwszym planie (gdy użytkownik zażąda, aby aplikacja miała dostęp do lokalizacji urządzenia podczas korzystania z niej).
  • Zmodyfikuj istniejącą aplikację, aby dodać obsługę żądania dostępu do lokalizacji. W tym celu dodaj kod umożliwiający subskrybowanie i anulowanie subskrypcji lokalizacji.
  • Dodaj do aplikacji obsługę Androida 10 i 11, dodając logikę dostępu do lokalizacji na pierwszym planie lub podczas korzystania z aplikacji.

Czego potrzebujesz

  • Android Studio 3.4 lub nowsze do uruchamiania kodu.
  • urządzenie lub emulator z wersją deweloperską Androida 10 lub 11,

2. Pierwsze kroki

Sklonuj repozytorium projektu startowego

Aby jak najszybciej zacząć, możesz skorzystać z tego projektu startowego. Jeśli masz zainstalowany Git, możesz po prostu uruchomić to polecenie:

 git clone https://github.com/android/codelab-while-in-use-location

Możesz bezpośrednio otworzyć stronę GitHub.

Jeśli nie masz Git, możesz pobrać projekt jako plik ZIP:

Importowanie projektu

Otwórz Android Studio, na ekranie powitalnym wybierz „Open an existing Android Studio project” (Otwórz istniejący projekt Android Studio) i otwórz katalog projektu.

Po wczytaniu projektu może się też pojawić alert, że Git nie śledzi wszystkich lokalnych zmian. Możesz kliknąć Ignoruj. (Nie będziesz przesyłać żadnych zmian z powrotem do repozytorium Git).

W lewym górnym rogu okna projektu powinna być widoczna zawartość podobna do tej na ilustracji poniżej, jeśli jesteś w widoku Android. (Jeśli jesteś w widoku Projekt, musisz rozwinąć projekt, aby zobaczyć to samo).

fa825dae96c5dc18.png

Są 2 foldery (basecomplete). Każdy z nich jest nazywany „modułem”.

Pamiętaj, że kompilacja projektu w Android Studio może potrwać kilka sekund. W tym czasie na pasku stanu u dołu Android Studio zobaczysz ten komunikat:

c2273e7835c0841a.png

Zanim wprowadzisz zmiany w kodzie, poczekaj, aż Android Studio zakończy indeksowanie i budowanie projektu. Dzięki temu Android Studio pobierze wszystkie niezbędne komponenty.

Jeśli pojawi się komunikat Załadować ponownie, aby zmiany języka zostały wprowadzone? lub podobny, kliknij Tak.

Informacje o projekcie startowym

Konfiguracja została zakończona i możesz poprosić o lokalizację w aplikacji. Użyj modułu base jako punktu początkowego. Na każdym etapie dodaj kod do modułu base. Po ukończeniu tego ćwiczenia kod w module base powinien być zgodny z zawartością modułu complete. Moduł complete może służyć do sprawdzania Twojej pracy lub jako źródło informacji, jeśli napotkasz jakieś problemy.

Kluczowe komponenty to:

  • MainActivity– interfejs użytkownika, który umożliwia zezwolenie aplikacji na dostęp do lokalizacji urządzenia;
  • LocationService– usługa, która subskrybuje zmiany lokalizacji i rezygnuje z subskrypcji, a także promuje się jako usługa działająca na pierwszym planie (z powiadomieniem), jeśli użytkownik opuści aktywność aplikacji. Tutaj dodajesz kod lokalizacji.
  • Util– dodaje funkcje rozszerzeń do klasy Location i zapisuje lokalizację w SharedPreferences (uproszczona warstwa danych).

Konfiguracja emulatora

Informacje o konfigurowaniu emulatora Androida znajdziesz w artykule Uruchamianie na emulatorze.

Uruchamianie projektu startowego

Uruchom aplikację.

  1. Podłącz urządzenie z Androidem do komputera lub uruchom emulator. (Upewnij się, że na urządzeniu jest zainstalowany Android 10 lub nowszy).
  2. Na pasku narzędzi wybierz konfigurację base z menu i kliknij Uruchom:

99600e9d44527ab.png

  1. Na urządzeniu pojawi się ta aplikacja:

99bf1dae46f99af3.png

Możesz zauważyć, że na ekranie z wynikami nie wyświetlają się żadne informacje o lokalizacji. Dzieje się tak, ponieważ nie został jeszcze dodany kod lokalizacji.

3. Dodawanie lokalizacji

Pojęcia

Te ćwiczenia mają na celu pokazanie, jak otrzymywać aktualizacje lokalizacji i w przyszłości obsługiwać Androida 10 i 11.

Zanim jednak zaczniesz pisać kod, warto zapoznać się z podstawami.

Rodzaje dostępu do lokalizacji

Na początku tego przewodnika wspominaliśmy o 4 różnych opcjach dostępu do lokalizacji. Oto ich znaczenie:

  • Zezwalaj tylko podczas używania aplikacji
  • Ta opcja jest zalecana w przypadku większości aplikacji. Ta opcja, znana też jako dostęp „podczas używania” lub „tylko na pierwszym planie”, została dodana w Androidzie 10 i umożliwia deweloperom pobieranie lokalizacji tylko wtedy, gdy aplikacja jest aktywnie używana. Aplikacja jest uznawana za aktywną, jeśli spełniony jest jeden z tych warunków:
  • Działanie jest widoczne.
  • Usługa na pierwszym planie działa z powiadomieniem o trwającej aktywności.
  • Tylko raz
  • Dodane w Androidzie 11. Działa tak samo jak Zezwalaj tylko podczas używania aplikacji, ale przez ograniczony czas. Więcej informacji znajdziesz w artykule Uprawnienia jednorazowe.
  • Odrzuć
  • Ta opcja uniemożliwia dostęp do informacji o lokalizacji.
  • Zawsze zezwalaj
  • Ta opcja umożliwia dostęp do lokalizacji przez cały czas, ale wymaga dodatkowego uprawnienia w przypadku Androida 10 i nowszych wersji. Musisz też mieć prawidłowy przypadek użycia i przestrzegać zasad dotyczących lokalizacji. Nie będziemy omawiać tej opcji w tym laboratorium, ponieważ jest ona rzadziej używana. Jeśli jednak masz uzasadniony przypadek użycia i chcesz dowiedzieć się, jak prawidłowo obsługiwać lokalizację przez cały czas, w tym dostęp do lokalizacji w tle, zapoznaj się z przykładem LocationUpdatesBackgroundKotlin.

Usługi, usługi działające na pierwszym planie i powiązania

Aby w pełni obsługiwać aktualizacje lokalizacji w przypadku opcji Zezwalaj tylko podczas używania aplikacji, musisz uwzględnić sytuację, w której użytkownik opuści aplikację. Jeśli chcesz nadal otrzymywać aktualizacje w takiej sytuacji, musisz utworzyć usługę działającą na pierwszym planie Service i powiązać ją z Notification.

Jeśli chcesz używać tego samego Service do wysyłania żądań aktualizacji lokalizacji, gdy aplikacja jest widoczna i gdy użytkownik z niej wychodzi, musisz powiązać lub odłączyć ten Service z elementem interfejsu.

To ćwiczenie skupia się tylko na uzyskiwaniu aktualizacji lokalizacji, więc cały potrzebny kod znajdziesz w klasie ForegroundOnlyLocationService.kt. Możesz przejrzeć tę klasę i MainActivity.kt, aby zobaczyć, jak ze sobą współpracują.

Więcej informacji znajdziesz w omówieniu usługomówieniu usług powiązanych.

Uprawnienia

Aby otrzymywać aktualizacje lokalizacji z NETWORK_PROVIDER lub GPS_PROVIDER, musisz poprosić użytkownika o uprawnienia, deklarując w pliku manifestu Androida odpowiednio uprawnienie ACCESS_COARSE_LOCATION lub ACCESS_FINE_LOCATION. Bez tych uprawnień aplikacja nie będzie mogła prosić o dostęp do lokalizacji w czasie działania.

Te uprawnienia obejmują przypadki Tylko razZezwalaj tylko podczas używania aplikacji, gdy aplikacja jest używana na urządzeniu z Androidem 10 lub nowszym.

Lokalizacja

Aplikacja może uzyskać dostęp do zestawu obsługiwanych usług lokalizacyjnych za pomocą klas w pakiecie com.google.android.gms.location.

Sprawdź główne klasy:

  • FusedLocationProviderClient
  • Jest to centralny komponent platformy lokalizacyjnej. Po utworzeniu możesz go używać do wysyłania próśb o aktualizacje lokalizacji i pobierania ostatniej znanej lokalizacji.
  • LocationRequest
  • Jest to obiekt danych zawierający parametry jakości usługi dla żądań (interwały aktualizacji, priorytety i dokładność). Jest on przekazywany do interfejsu FusedLocationProviderClient, gdy prosisz o aktualizacje lokalizacji.
  • LocationCallback
  • Służy do otrzymywania powiadomień, gdy lokalizacja urządzenia ulegnie zmianie lub nie można jej już określić. Przekazywany jest do niej obiekt LocationResult, z którego możesz pobrać Location do zapisania w bazie danych.

Znasz już podstawy, więc zacznij pisać kod.

4. Dodawanie funkcji lokalizacji

W tym laboratorium skupimy się na najczęstszej opcji lokalizacji: Zezwalaj tylko podczas używania aplikacji.

Aby otrzymywać aktualizacje lokalizacji, aplikacja musi mieć widoczną aktywność lub usługę działającą na pierwszym planie (z powiadomieniem).

Uprawnienia

Celem tego laboratorium jest pokazanie, jak otrzymywać aktualizacje lokalizacji, a nie jak prosić o uprawnienia do lokalizacji, więc kod oparty na uprawnieniach jest już napisany. Jeśli już to wiesz, możesz pominąć ten krok.

Poniżej znajdziesz najważniejsze informacje o uprawnieniach (w tej części nie musisz niczego robić):

  1. Zadeklaruj, jakich uprawnień używasz w AndroidManifest.xml.
  2. Zanim spróbujesz uzyskać dostęp do informacji o lokalizacji, sprawdź, czy użytkownik przyznał Twojej aplikacji odpowiednie uprawnienia. Jeśli aplikacja nie ma jeszcze uprawnień, poproś o dostęp.
  3. Obsługa wyboru uprawnień użytkownika. (Ten kod znajdziesz na stronie MainActivity.kt).

Jeśli w AndroidManifest.xml lub MainActivity.kt wyszukasz TODO: Step 1.0, Review Permissions, zobaczysz cały kod napisany na potrzeby uprawnień.

Więcej informacji znajdziesz w artykule Omówienie uprawnień.

Teraz zacznij pisać kod lokalizacji.

Sprawdź kluczowe zmienne potrzebne do aktualizacji lokalizacji

W module base wyszukaj TODO: Step 1.1, Review variables w

ForegroundOnlyLocationService.kt.

Na tym etapie nie musisz nic robić. Aby poznać kluczowe klasy i zmienne używane do otrzymywania aktualizacji lokalizacji, wystarczy zapoznać się z tym blokiem kodu i komentarzami.

// TODO: Step 1.1, Review variables (no changes).
// FusedLocationProviderClient - Main class for receiving location updates.
private lateinit var fusedLocationProviderClient: FusedLocationProviderClient

// LocationRequest - Requirements for the location updates, i.e., how often you
// should receive updates, the priority, etc.
private lateinit var locationRequest: LocationRequest

// LocationCallback - Called when FusedLocationProviderClient has a new Location.
private lateinit var locationCallback: LocationCallback

// Used only for local storage of the last known location. Usually, this would be saved to your
// database, but because this is a simplified sample without a full database, we only need the
// last location to create a Notification if the user navigates away from the app.
private var currentLocation: Location? = null

Sprawdź inicjowanie FusedLocationProviderClient

W module base wyszukaj TODO: Step 1.2, Review the FusedLocationProviderClient w pliku ForegroundOnlyLocationService.kt. Kod powinien wyglądać mniej więcej tak:

// TODO: Step 1.2, Review the FusedLocationProviderClient.
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this)

Jak wspomnieliśmy w poprzednich komentarzach, jest to główna klasa do otrzymywania aktualizacji lokalizacji. Zmienna jest już zainicjowana, ale warto sprawdzić kod, aby zrozumieć, jak to się odbywa. Później dodasz tu kod, aby wysyłać prośby o aktualizacje lokalizacji.

Zainicjuj LocationRequest

  1. W module base wyszukaj TODO: Step 1.3, Create a LocationRequest w pliku ForegroundOnlyLocationService.kt.
  2. Po komentarzu dodaj ten kod:

Kod inicjujący LocationRequest dodaje dodatkowe parametry jakości usługi potrzebne w Twoim żądaniu (interwały, maksymalny czas oczekiwania i priorytet).

// TODO: Step 1.3, Create a LocationRequest.
locationRequest = LocationRequest.create().apply {
   // Sets the desired interval for active location updates. This interval is inexact. You
   // may not receive updates at all if no location sources are available, or you may
   // receive them less frequently than requested. You may also receive updates more
   // frequently than requested if other applications are requesting location at a more
   // frequent interval.
   //
   // IMPORTANT NOTE: Apps running on Android 8.0 and higher devices (regardless of
   // targetSdkVersion) may receive updates less frequently than this interval when the app
   // is no longer in the foreground.
   interval = TimeUnit.SECONDS.toMillis(60)

   // Sets the fastest rate for active location updates. This interval is exact, and your
   // application will never receive updates more frequently than this value.
   fastestInterval = TimeUnit.SECONDS.toMillis(30)

   // Sets the maximum time when batched location updates are delivered. Updates may be
   // delivered sooner than this interval.
   maxWaitTime = TimeUnit.MINUTES.toMillis(2)

   priority = LocationRequest.PRIORITY_HIGH_ACCURACY
}
  1. Przeczytaj komentarze, aby dowiedzieć się, jak działa każdy z nich.

Inicjowanie LocationCallback

  1. W module base wyszukaj TODO: Step 1.4, Initialize the LocationCallback w pliku ForegroundOnlyLocationService.kt.
  2. Po komentarzu dodaj ten kod:
// TODO: Step 1.4, Initialize the LocationCallback.
locationCallback = object : LocationCallback() {
    override fun onLocationResult(locationResult: LocationResult) {
        super.onLocationResult(locationResult)

        // Normally, you want to save a new location to a database. We are simplifying
        // things a bit and just saving it as a local variable, as we only need it again
        // if a Notification is created (when the user navigates away from app).
        currentLocation = locationResult.lastLocation

        // Notify our Activity that a new location was added. Again, if this was a
        // production app, the Activity would be listening for changes to a database
        // with new locations, but we are simplifying things a bit to focus on just
        // learning the location side of things.
        val intent = Intent(ACTION_FOREGROUND_ONLY_LOCATION_BROADCAST)
        intent.putExtra(EXTRA_LOCATION, currentLocation)
        LocalBroadcastManager.getInstance(applicationContext).sendBroadcast(intent)

        // Updates notification content if this service is running as a foreground
        // service.
        if (serviceRunningInForeground) {
            notificationManager.notify(
                NOTIFICATION_ID,
                generateNotification(currentLocation))
        }
    }
}

Utworzona tu funkcja LocationCallback to wywołanie zwrotne, które funkcja FusedLocationProviderClient wywoła, gdy będzie dostępna nowa informacja o zmianie lokalizacji.

W wywołaniu zwrotnym najpierw pobierasz najnowszą lokalizację za pomocą obiektu LocationResult. Następnie powiadamiasz Activity o nowej lokalizacji za pomocą transmisji lokalnej (jeśli jest aktywna) lub aktualizujesz Notification, jeśli ta usługa działa jako Service na pierwszym planie.

  1. Przeczytaj komentarze, aby dowiedzieć się, co robi każda część.

Subskrybowanie zmian lokalizacji

Po zainicjowaniu wszystkiego musisz poinformować FusedLocationProviderClient, że chcesz otrzymywać aktualizacje.

  1. W module base wyszukaj Step 1.5, Subscribe to location changes w pliku ForegroundOnlyLocationService.kt.
  2. Po komentarzu dodaj ten kod:
// TODO: Step 1.5, Subscribe to location changes.
fusedLocationProviderClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper())

Wywołanie requestLocationUpdates() informuje FusedLocationProviderClient, że chcesz otrzymywać aktualizacje lokalizacji.

Prawdopodobnie rozpoznajesz zdefiniowane wcześniej zmienne LocationRequestLocationCallback. Informują one FusedLocationProviderClient o parametrach jakości usługi dla Twojego żądania i o tym, co ma wywołać, gdy otrzyma aktualizację. Na koniec obiekt Looper określa wątek wywołania zwrotnego.

Możesz też zauważyć, że ten kod znajduje się w instrukcji try/catch. Ta metoda wymaga takiego bloku, ponieważ SecurityException występuje, gdy aplikacja nie ma uprawnień dostępu do informacji o lokalizacji.

Anulowanie subskrypcji powiadomień o zmianach lokalizacji

Gdy aplikacja nie potrzebuje już dostępu do informacji o lokalizacji, ważne jest, aby zrezygnować z otrzymywania aktualizacji lokalizacji.

  1. W module base wyszukaj TODO: Step 1.6, Unsubscribe to location changes w pliku ForegroundOnlyLocationService.kt.
  2. Po komentarzu dodaj ten kod:
// TODO: Step 1.6, Unsubscribe to location changes.
val removeTask = fusedLocationProviderClient.removeLocationUpdates(locationCallback)
removeTask.addOnCompleteListener { task ->
   if (task.isSuccessful) {
       Log.d(TAG, "Location Callback removed.")
       stopSelf()
   } else {
       Log.d(TAG, "Failed to remove Location Callback.")
   }
}

Metoda removeLocationUpdates() konfiguruje zadanie, aby poinformować FusedLocationProviderClient, że nie chcesz już otrzymywać aktualizacji lokalizacji LocationCallback. addOnCompleteListener() wywołuje wywołanie zwrotne po zakończeniu i wykonuje Task.

Podobnie jak w poprzednim kroku, możesz zauważyć, że ten kod znajduje się w instrukcji try/catch. Ta metoda wymaga takiego bloku, ponieważ SecurityException występuje, gdy aplikacja nie ma uprawnień do uzyskiwania dostępu do informacji o lokalizacji.

Możesz się zastanawiać, kiedy wywoływane są metody zawierające kod subskrypcji lub rezygnacji z subskrypcji. Są one wywoływane w głównej klasie, gdy użytkownik dotknie przycisku. Jeśli chcesz ją zobaczyć, zajrzyj do klasy MainActivity.kt.

Uruchom aplikację

Uruchom aplikację z Androida Studio i wypróbuj przycisk lokalizacji.

Na ekranie wyjściowym powinny być widoczne informacje o lokalizacji. Jest to w pełni funkcjonalna aplikacja na Androida 9.

2ae45c4e297e3681.png

d66089bfb532e993.png

5. Obsługa Androida 10

W tej sekcji dodasz obsługę Androida 10.

Aplikacja już subskrybuje zmiany lokalizacji, więc nie musisz wiele robić.

Wystarczy, że określisz, że usługa działająca na pierwszym planie jest używana do określania lokalizacji.

Docelowy pakiet SDK 29

  1. W module base wyszukaj TODO: Step 2.1, Target Android 10 and then Android 11. w pliku build.gradle.
  2. Wprowadź te zmiany:
  3. Ustaw wartość targetSdkVersion na 29.

Kod powinien wyglądać mniej więcej tak:

android {
   // TODO: Step 2.1, Target Android 10 and then Android 11.
   compileSdkVersion 29
   defaultConfig {
       applicationId "com.example.android.whileinuselocation"
       minSdkVersion 26
       targetSdkVersion 29
       versionCode 1
       versionName "1.0"
   }
...
}

Następnie pojawi się prośba o zsynchronizowanie projektu. Kliknij Synchronizuj teraz.

153f70847e0ec320.png

Po tym aplikacja będzie prawie gotowa na Androida 10.

Dodawanie typu usługi działającej na pierwszym planie

W Androidzie 10 musisz podać typ usługi na pierwszym planie, jeśli potrzebujesz dostępu do lokalizacji podczas używania. W Twoim przypadku jest ona używana do uzyskiwania informacji o lokalizacji.

W module base wyszukaj TODO: 2.2, Add foreground service typeAndroidManifest.xml i dodaj ten kod do elementu <service>:

android:foregroundServiceType="location"

Kod powinien wyglądać mniej więcej tak:

<application>
   ...

   <!-- Foreground services in Android 10+ require type. -->
   <!-- TODO: 2.2, Add foreground service type. -->
   <service
       android:name="com.example.android.whileinuselocation.ForegroundOnlyLocationService"
       android:enabled="true"
       android:exported="false"
       android:foregroundServiceType="location" />
</application>

To wszystko. Aplikacja obsługuje lokalizację w Androidzie 10 w przypadku korzystania z niej, zgodnie ze sprawdzonymi metodami dotyczącymi lokalizacji w Androidzie.

Uruchom aplikację

Uruchom aplikację z Androida Studio i wypróbuj przycisk lokalizacji.

Wszystko powinno działać tak jak wcześniej, ale teraz działa na Androidzie 10. Jeśli wcześniej nie zaakceptowano uprawnień do lokalizacji, powinien teraz pojawić się ekran uprawnień.

6a1029175b467c77.png

c7c1d226e49a121.png

39a262b66a275f66.png

6. Obsługa Androida 11

W tej sekcji kierujesz reklamy na Androida 11.

Dobra wiadomość: nie musisz wprowadzać zmian w żadnych plikach z wyjątkiem pliku build.gradle.

Docelowy pakiet SDK 11

  1. W module base wyszukaj TODO: Step 2.1, Target SDK w pliku build.gradle.
  2. Wprowadź te zmiany:
  3. Od compileSdkVersion do 30
  4. Od targetSdkVersion do 30

Kod powinien wyglądać mniej więcej tak:

android {
   TODO: Step 2.1, Target Android 10 and then Android 11.
   compileSdkVersion 30
   defaultConfig {
       applicationId "com.example.android.whileinuselocation"
       minSdkVersion 26
       targetSdkVersion 30
       versionCode 1
       versionName "1.0"
   }
...
}

Następnie pojawi się prośba o zsynchronizowanie projektu. Kliknij Synchronizuj teraz.

153f70847e0ec320.png

Po tym czasie aplikacja będzie gotowa na Androida 11.

Uruchom aplikację

Uruchom aplikację z Androida Studio i spróbuj kliknąć przycisk.

Wszystko powinno działać tak jak wcześniej, ale teraz działa na Androidzie 11. Jeśli wcześniej nie zaakceptowano uprawnień do lokalizacji, powinien teraz pojawić się ekran uprawnień.

73d8cc88c5877c25.png

cc98fac6e089bc4.png

7. Strategie lokalizacji na Androidzie

Sprawdzając uprawnienia do lokalizacji i prosząc o nie w sposób pokazany w tym samouczku, Twoja aplikacja może skutecznie śledzić poziom dostępu do lokalizacji urządzenia.

Na tej stronie znajdziesz kilka najważniejszych sprawdzonych metod związanych z uprawnieniami do lokalizacji. Więcej informacji o tym, jak chronić dane użytkowników, znajdziesz w artykule Sprawdzone metody dotyczące uprawnień aplikacji.

Proś tylko o uprawnienia, których potrzebujesz

Proś o uprawnienia tylko wtedy, gdy są potrzebne. Na przykład:

  • Nie proś o dostęp do lokalizacji przy uruchamianiu aplikacji, chyba że jest to absolutnie konieczne.
  • Jeśli Twoja aplikacja jest kierowana na Androida 10 lub nowszego i zawiera usługę działającą na pierwszym planie, zadeklaruj foregroundServiceType"location" w pliku manifestu.
  • Nie proś o uprawnienia do lokalizacji w tle, jeśli nie masz uzasadnionego przypadku użycia opisanego w artykule Bezpieczniejszy i bardziej przejrzysty dostęp do lokalizacji użytkownika.

Obsługa łagodnej degradacji, jeśli uprawnienie nie zostanie przyznane

Aby zapewnić użytkownikom wygodę, zaprojektuj aplikację tak, aby dobrze radziła sobie w tych sytuacjach:

  • Aplikacja nie ma dostępu do informacji o lokalizacji.
  • Aplikacja nie ma dostępu do informacji o lokalizacji, gdy działa w tle.

8. Gratulacje

Wiesz już, jak otrzymywać aktualizacje lokalizacji na Androidzie, pamiętając o sprawdzonych metodach.

Więcej informacji