Otrzymywanie aktualizacji lokalizacji w Androidzie z Kotlin

Android 10 i 11 zapewniają użytkownikom większą kontrolę nad aplikacjami, a także dostęp do lokalizacji ich urządzeń.

Gdy aplikacja na Androida 11 prosi o dostęp do lokalizacji, użytkownicy mają 4 możliwości:

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

Android 10

Android 11

Z tego modułu dowiesz się, jak otrzymywać informacje o lokalizacji i jak je obsługiwać w dowolnej wersji Androida, zwłaszcza w wersji 10 i 11. Na koniec ćwiczenia z programowania możesz spodziewać się aplikacji, która będzie zgodna z naszymi sprawdzonymi metodami pobierania aktualizacji lokalizacji.

Wymagania wstępne

Co chcesz zrobić

  • Stosuj sprawdzone metody dotyczące lokalizacji w systemie Android.
  • Obsługuj dostęp do lokalizacji na pierwszym planie (gdy użytkownik poprosi o dostęp do lokalizacji urządzenia, gdy aplikacja jest używana).
  • Zmodyfikuj istniejącą aplikację, aby dodać obsługę próśb o dostęp do lokalizacji, dodając kod subskrybowania i anulowania subskrypcji.
  • Dodaj obsługę aplikacji na Androida 10 i 11, dodając logikę, aby uzyskać dostęp do lokalizacji na pierwszym planie lub podczas jej używania.

Czego potrzebujesz

  • Android Studio w wersji 3.4 lub nowszej, aby uruchomić kod
  • Urządzenie/emulator z podglądem aplikacji na Androida 10 i 11

Kopiowanie repozytorium projektu początkowego

Aby jak najszybciej rozpocząć pracę, możesz przejść do tego projektu startowego. Jeśli masz zainstalowany system Git, możesz uruchomić następujące polecenie:

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

Możesz też wejść bezpośrednio na stronę GitHub.

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

Pobierz plik ZIP

Importowanie projektu

Otwórz Android Studio, wybierz „Otwórz istniejący projekt Android Studio” na ekranie powitalnym i otwórz katalog projektu.

Po załadowaniu projektu może pojawić się też alert informujący o tym, że Git nie śledzi wszystkich lokalnych zmian. Możesz kliknąć Ignoruj. Nie będziesz przesyłać żadnych zmian do repozytorium Git.

W widoku Androida w lewym górnym rogu okna projektu powinien pojawić się obraz podobny do poniższego: Jeśli jesteś w widoku Projekt, musisz rozwinąć projekt, aby zobaczyć to samo.

Folder składa się z 2 elementów (base i complete). Każdy z nich jest nazywany „modułem”.

Pamiętaj, że Android Studio może potrzebować kilku sekund do skompilowania projektu w tle. W tym czasie na pasku stanu u dołu aplikacji Android Studio pojawia się ten komunikat:

Zanim wprowadzisz zmiany w kodzie, poczekaj, aż Android Studio zakończy indeksowanie i tworzenie projektu. Dzięki temu Android Studio będzie pobierać wszystkie niezbędne komponenty.

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

Informacje o projekcie startowym

Masz już skonfigurowaną aplikację, która może prosić o dostęp do lokalizacji. Użyj modułu base jako punktu wyjścia. Na każdym etapie dodawaj kod do modułu base. Gdy wykonasz te ćwiczenia z programowania, kod w module base powinien odpowiadać zawartości modułu complete. Za pomocą modułu complete możesz sprawdzać swoją pracę lub sprawdzać, czy nie wystąpiły jakieś problemy.

Główne komponenty:

  • MainActivity – interfejs użytkownika, który umożliwia aplikacji dostęp do lokalizacji urządzenia
  • LocationService – usługa, która subskrybuje zmiany lokalizacji i rezygnuje z nich oraz promuje się na pierwszym planie (z powiadomieniem), jeśli użytkownik opuści aktywność. Tutaj dodaj kod lokalizacji.
  • Util – dodaje funkcje rozszerzenia do klasy Location i zapisuje lokalizację w SharedPreferences (uproszczona warstwa danych).

Konfiguracja emulatora

Informacje o konfigurowaniu emulatora Androida znajdziesz w artykule Uruchamianie w 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 w wersji 10 lub nowszej.
  2. Na pasku narzędzi wybierz konfigurację base z menu i kliknij Uruchom:


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


Możesz zauważyć, że na ekranie z wynikami nie są wyświetlane żadne informacje o lokalizacji. Wynika to z tego, że nie dodano jeszcze kodu lokalizacji.

Pojęcia

Ćwiczenia z programowania mają pokazać, jak otrzymywać powiadomienia o lokalizacji i zapewnić obsługę Androida 10 oraz Androida 11.

Jednak zanim zaczniesz kodować, zapoznaj się z podstawowymi informacjami.

Rodzaje dostępu do lokalizacji

Pamiętasz 4 różne opcje dostępu do lokalizacji od początku ćwiczeń z programowania. Sprawdź, co oznaczają.

  • Zezwalaj tylko podczas używania aplikacji
  • Ta opcja jest zalecana w przypadku większości aplikacji. W Androidzie 10 opcja ta nosi również nazwę „dostęp w użyciu” i „tylko na pierwszym planie”. Pozwala ona deweloperom pobierać informacje o lokalizacji tylko wtedy, gdy aplikacja jest aktywnie używana. Aplikacja jest uznawana za aktywną, jeśli ma miejsce jedna z tych sytuacji:
  • Aktywność jest widoczna.
  • Usługa działająca na pierwszym planie z bieżącym powiadomieniem.
  • Tylko raz
  • W Androidzie 11 jest to ta sama opcja co Zezwalaj tylko podczas używania aplikacji, ale przez ograniczony czas. Więcej informacji znajdziesz w sekcji Uprawnienia jednorazowe.
  • Odrzuć
  • Ta opcja uniemożliwia dostęp do informacji o lokalizacji.
  • Zawsze zezwalaj
  • Ta opcja umożliwia stały dostęp do lokalizacji, ale wymaga dodatkowego uprawnienia w Androidzie 10 i nowszych. Sprawdź też, czy został przez Ciebie podany prawidłowy przypadek użycia i czy jest on zgodny z zasadami dotyczącymi lokalizacji. Nie omawiamy tej opcji w tym ćwiczeniu z programowania, ponieważ jest to rzadszy przypadek. Jeśli jednak masz odpowiedni przypadek użycia i chcesz się dowiedzieć, jak przez cały czas korzystać z tej lokalizacji, w tym jak korzystać z lokalizacji w tle, zapoznaj się z przykładem LocationLocationsBackgroundKotlin.

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

Aby w pełni obsługiwać opcję Zezwalaj tylko podczas korzystania z aktualizacji aplikacji, musisz uwzględnić to, kiedy użytkownik opuszcza aplikację. Jeśli nadal chcesz otrzymywać aktualizacje w tej sytuacji, musisz utworzyć pierwszy plan Service i powiązać go z elementem Notification.

Jeśli chcesz użyć tego samego atrybutu Service, aby prosić o zaktualizowanie lokalizacji, gdy aplikacja jest widoczna i użytkownik opuści Twoją aplikację, musisz go powiązać lub usunąć powiązanie tego elementu: Service z elementem interfejsu.

Ponieważ to ćwiczenie skupia się wyłącznie na aktualizowaniu lokalizacji, cały kod znajdziesz w klasie ForegroundOnlyLocationService.kt. Przejrzyj te zajęcia i sprawdź, jak działają MainActivity.kt.

Więcej informacji znajdziesz w artykułach Omówienie usług i Omówienie usług dodatkowych.

Uprawnienia

Aby korzystać z aktualizacji lokalizacji w narzędziu NETWORK_PROVIDER lub GPS_PROVIDER, musisz poprosić użytkownika o przyznanie odpowiedniego uprawnienia, deklarując odpowiednio ACCESS_COARSE_LOCATION lub ACCESS_FINE_LOCATION w pliku manifestu Androida. Bez tych uprawnień aplikacja nie będzie mogła zażądać dostępu do lokalizacji w czasie działania.

Te uprawnienia mają zastosowanie do tylko raz i Zezwalaj tylko podczas używania aplikacji, gdy aplikacja jest używana na urządzeniu z Androidem 10 lub nowszym.

Lokalizacja

Twoja aplikacja może korzystać z zestawu obsługiwanych usług lokalizacyjnych za pomocą zajęć w pakiecie com.google.android.gms.location.

Najważniejsze zajęcia:

  • FusedLocationProviderClient
  • Jest to główny element platformy lokalizacji. Gdy utworzysz lokalizację, możesz użyć jej do wysłania prośby o aktualizację lokalizacji i poznać ostatnią znaną lokalizację.
  • LocationRequest
  • Jest to obiekt danych, który zawiera parametry jakości usług związane z żądaniami (interwały aktualizacji, priorytety i dokładność). Są one przekazywane do FusedLocationProviderClient, gdy prosisz o aktualizację lokalizacji.
  • LocationCallback
  • Pozwala otrzymywać powiadomienia, gdy lokalizacja urządzenia uległa zmianie lub nie można jej określić. To jest operacja LocationResult, która umożliwia pobranie Location do zapisania w bazie danych.

Teraz, gdy masz już podstawową wiedzę na temat tego, co robisz, zacznij tworzyć kod.

To ćwiczenie skupia się na najczęstszej opcji lokalizacji: Zezwalaj tylko podczas używania aplikacji.

Aby można było otrzymywać informacje o lokalizacji, aplikacja musi zawierać widoczną aktywność lub usługę działającą na pierwszym planie (z powiadomieniem).

Uprawnienia

Celem naszych ćwiczeń z programowania jest pokazanie, w jaki sposób otrzymywać aktualizacje lokalizacji, a nie jak prosić o dostęp do lokalizacji. Dlatego kod oparty na uprawnieniach został napisany już dla Ciebie. Jeśli go rozumiesz, możesz ją pominąć.

Poniżej podano najważniejsze uprawnienia (w przypadku tej części nie są wymagane żadne działania):

  1. Zadeklaruj uprawnienia, z których korzystasz w AndroidManifest.xml.
  2. Zanim spróbujesz uzyskać dostęp do informacji o lokalizacji, sprawdź, czy użytkownik przyznał Ci do tego uprawnienia. Jeśli Twoja aplikacja nie otrzymała jeszcze uprawnień, poproś o dostęp.
  3. Przetwórz uprawnienia użytkownika. (ten kod jest widoczny w MainActivity.kt).

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

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

Teraz zacznij pisać kod lokalizacji.

Sprawdź kluczowe zmienne, które są niezbędne do aktualizowania lokalizacji

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

ForegroundOnlyLocationService.kt.

Na tym etapie nie musisz nic robić. Wystarczy, że sprawdzisz ten blok kodu wraz z komentarzami, aby zrozumieć najważniejsze klasy i zmienne, których używasz do otrzymywania aktualizacji lokalizacji.

// 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

Sprawdzanie inicjowania metody FusedLocationProviderClient

W module base wyszukaj TODO: Step 1.2, Review the FusedLocationProviderClient w pliku ForegroundOnlyLocationService.kt. Twój 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 służąca do aktualizowania lokalizacji. Zmienna jest już zainicjowana, ale ważne jest, aby zapoznać się z kodem i dowiedzieć się, w jaki sposób została zainicjowana. Później dodasz kod, by wysyłać prośbę o aktualizację lokalizacji.

Zainicjuj żądanie lokalizacji

  1. W module base wyszukaj TODO: Step 1.3, Create a LocationRequest w pliku ForegroundOnlyLocationService.kt.
  2. Dodaj ten komentarz po komentarzu.

Kod inicjowania LocationRequest zapewnia dodatkową jakość parametrów usługi potrzebnych w żądaniu (interwały, maksymalny czas oczekiwania i priorytet).

// TODO: Step 1.3, Create a LocationRequest.
locationRequest = LocationRequest().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łają.

Zainicjuj wywołanie lokalizacji

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

       if (locationResult?.lastLocation != null) {

           // 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 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))
           }
       } else {
           Log.d(TAG, "Location information isn't available.")
       }
   }
}

LocationCallback utworzony tutaj to wywołanie zwrotne, które FusedLocationProviderClient będzie wywoływać, gdy pojawi się nowa aktualizacja lokalizacji.

W wywołaniu zwrotnym informacje o najnowszej lokalizacji pobierasz za pomocą obiektu LocationResult. Gdy to zrobisz, otrzymasz powiadomienie o nowej lokalizacji w Activity za pomocą lokalnej transmisji (jeśli jest aktywna) lub zaktualizujesz Notification, jeśli usługa działa na pierwszym planie (Service).

  1. Przeczytaj komentarze, aby dowiedzieć się, co ona robi.

Subskrybowanie zmian lokalizacji

Teraz, gdy wszystko jest zainicjowane, FusedLocationProviderClient musi wiedzieć, że chcesz otrzymywać aktualizacje.

  1. W module base wyszukaj Step 1.5, Subscribe to location changes w pliku ForegroundOnlyLocationService.kt.
  2. Dodaj ten komentarz po komentarzu.
// TODO: Step 1.5, Subscribe to location changes.
fusedLocationProviderClient.requestLocationUpdates(locationRequest, locationCallback, Looper.myLooper())

Połączenie requestLocationUpdates() informuje FusedLocationProviderClient, że chcesz otrzymywać aktualne informacje o lokalizacji.

Prawdopodobnie znasz wymienione wcześniej LocationRequest i LocationCallback. Informują one zespół FusedLocationProviderClient o parametrach jakości usługi oraz o to, jaka ma być wywoływana po aktualizacji. Na koniec obiekt Looper określa wątek wywołania zwrotnego.

Kod może też pojawić się w instrukcji try/catch. Ta metoda wymaga blokowania, ponieważ SecurityException ma miejsce, gdy aplikacja nie ma dostępu do informacji o lokalizacji.

Anulowanie subskrypcji zmian lokalizacji

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

  1. W module base wyszukaj TODO: Step 1.6, Unsubscribe to location changes w pliku ForegroundOnlyLocationService.kt.
  2. Dodaj ten komentarz po komentarzu.
// 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() zwraca wywołanie zwrotne o zakończeniu operacji i wykonuje Task.

Podobnie jak w poprzednim kroku, możesz zauważyć, że kod znajduje się w instrukcji try/catch. Ta metoda wymaga takiej blokady, bo aplikacja SecurityException nie ma dostępu do informacji o lokalizacji.

Być może zastanawiasz się, czy nie warto wywołać metod zawierających kod subskrypcji lub anulowania subskrypcji. Są one wyświetlane w klasie głównej po kliknięciu przycisku przez użytkownika. Jeśli chcesz je zobaczyć, obejrzyj klasę MainActivity.kt.

Uruchom aplikację

Uruchom aplikację w Android Studio i wypróbuj przycisk lokalizacji.

Na ekranie z wynikami powinny wyświetlić się informacje o lokalizacji. Jest to w pełni funkcjonalna aplikacja na Androida 9.

W tej sekcji dodasz obsługę Androida 10.

Twoja aplikacja subskrybujesz już zmiany w lokalizacji, więc czeka Cię dużo pracy.

Musisz jedynie określić, że usługa działająca na pierwszym planie ma być używana do określania lokalizacji.

Docelowy pakiet SDK 29

  1. W module base wyszukaj TODO: Step 2.1, Target SDK 10 w pliku build.gradle.
  2. Wprowadź te zmiany:
  1. Ustaw: compileSdkVersion na 29.
  2. Ustaw: buildToolsVersion na "29.0.3".
  3. Ustaw: targetSdkVersion na 29.

Twój kod powinien wyglądać mniej więcej tak:

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

Gdy to zrobisz, pojawi się prośba o zsynchronizowanie projektu. Kliknij Sync Now (Synchronizuj teraz).

Po tym czasie aplikacja jest już prawie gotowa na Androida 10.

Dodaj typ usługi na pierwszym planie

Jeśli potrzebujesz dostępu do lokalizacji w Androidzie 10, musisz podać typ usługi na pierwszym planie. W Twoim przypadku jest on używany do uzyskania informacji o lokalizacji.

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

android:foregroundServiceType="location"

Twój 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 już wszystko Twoja aplikacja obsługuje lokalizację „Android 10” i jest zgodna ze sprawdzonymi metodami dotyczącymi lokalizacji w Androidzie 10.

Uruchom aplikację

Uruchom aplikację w Android Studio i wypróbuj przycisk lokalizacji.

Wszystko powinno działać tak jak wcześniej, ale teraz również w Androidzie 10. Jeśli uprawnienia dla lokalizacji nie były wcześniej akceptowane, powinien pojawić się ekran uprawnień.

W tej sekcji kierujesz aplikację na Androida 11.

Dobra wiadomość! Nie musisz wprowadzać żadnych zmian w żadnym pliku oprócz pliku build.gradle.

Docelowy pakiet SDK R

  1. W module base wyszukaj TODO: Step 2.1, Target SDK w pliku build.gradle.
  2. Wprowadź te zmiany:
  1. compileSdkVersion do "android-R"
  2. targetSdkVersion do "R"

Twój kod powinien wyglądać mniej więcej tak:

android {
   // TODO: Step 2.1, Target Android 10.
   compileSdkVersion "android-R"
   buildToolsVersion "29.0.2"
   defaultConfig {
       applicationId "com.example.android.whileinuselocation"
       minSdkVersion 26
       targetSdkVersion "R"
       versionCode 1
       versionName "1.0"
   }
...
}

Gdy to zrobisz, pojawi się prośba o zsynchronizowanie projektu. Kliknij Sync Now (Synchronizuj teraz).

Po tym czasie aplikacja jest gotowa na Androida 11.

Uruchom aplikację

Uruchom aplikację w Android Studio i kliknij przycisk.

Wszystko powinno działać tak jak wcześniej, ale teraz działa też na Androidzie 11. Jeśli uprawnienia dla lokalizacji nie były wcześniej akceptowane, powinien pojawić się ekran uprawnień.

Dzięki sprawdzaniu uprawnień dostępu do lokalizacji i prosiniu o nie w sposób opisany w tym ćwiczeniu możesz monitorować poziom dostępu aplikacji do lokalizacji urządzenia.

Na tej stronie znajdziesz kilka najważniejszych sprawdzonych metod związanych z dostępem do lokalizacji. Więcej informacji o bezpieczeństwie użytkowników znajdziesz w sprawdzonych metodach dotyczących uprawnień aplikacji.

Pytaj tylko o uprawnienia, które są Ci potrzebne

prosić o uprawnienia tylko wtedy, gdy jest to konieczne; 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 masz usługę na pierwszym planie, zadeklaruj w pliku manifestu parametr foregroundServiceType o wartości "location".
  • Nie wysyłaj prośby o dostęp do lokalizacji w tle, chyba że masz ważny przypadek użycia opisany w artykule Bezpieczniejszy i bardziej widoczny dostęp do lokalizacji użytkownika.

Zapewnij bezproblemowe poniżanie, jeśli uprawnienia nie zostały przyznane

Aby zadbać o wygodę użytkowników, zaprojektuj aplikację w taki sposób, by działała płynnie w tych sytuacjach:

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

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

Więcej informacji