Otrzymywanie aktualizacji lokalizacji na Androidzie dzięki Kotlin

1. Zanim zaczniesz

Android 10 i 11 dają użytkownikom większą kontrolę nad dostępu do lokalizacji urządzeń użytkowników.

Gdy aplikacja działająca na Androidzie 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)
  • Odmów

Android 10

6a1029175b467c77.png

Android 11

73d8cc88c5877c25.png

Z tego ćwiczenia w Codelabs dowiesz się, jak otrzymywać aktualizacje lokalizacji i jak obsługiwać lokalizację na dowolnej wersji Androida, zwłaszcza na Androidzie 10 i 11. Po zakończeniu ćwiczeń w Codelabs możesz spodziewać się, że aplikacja będzie zgodna z aktualnymi sprawdzonymi metodami pobierania aktualizacji lokalizacji.

Wymagania wstępne

Co trzeba zrobić

  • Postępuj zgodnie ze sprawdzonymi metodami dotyczącymi lokalizacji na Androidzie.
  • obsługiwać dostęp do lokalizacji na pierwszym planie (gdy użytkownik poprosi o dostęp do lokalizacji urządzenia podczas jej używania);
  • Zmodyfikuj istniejącą aplikację, aby dodać obsługę próśb o dostęp do lokalizacji przez dodanie kodu służącego do subskrybowania lokalizacji i anulowania subskrypcji.
  • Dodaj obsługę aplikacji na Androida 10 i 11, dodając funkcje logiczne umożliwiające dostęp do lokalizacji na pierwszym planie lub podczas używania.

Czego potrzebujesz

  • Android Studio 3.4 lub nowszy, aby uruchomić kod.
  • Urządzenie/emulator z zainstalowaną wersją przedpremierową Androida 10 i 11 dla programistów

2. Pierwsze kroki

Klonowanie repozytorium początkowego projektu

Aby zacząć jak najszybciej, możesz zacząć od 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 wejść bezpośrednio na stronę GitHub.

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

Importowanie projektu

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

Po wczytaniu projektu możesz też zobaczyć alert informujący o tym, że Git nie śledzi wszystkich zmian lokalnych. Możesz kliknąć Ignoruj. Nie przekażesz żadnych zmian z powrotem do repozytorium Git.

Jeśli jesteś w widoku Androida, w lewym górnym rogu okna projektu powinien być widoczny obraz podobny do tego poniżej. Jeśli jesteś w widoku Projekt, musisz rozwinąć projekt, aby zobaczyć to samo.

fa825dae96c5dc18.png

Dostępne są 2 foldery (base i complete). Każdy z nich jest nazywany „modułem”.

Pamiętaj, że Android Studio może potrzebować kilku sekund na skompilowanie projektu w tle po raz pierwszy. W tym czasie na pasku stanu u dołu Android Studio zobaczysz następujący komunikat:

c2273e7835c0841a.png

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

Jeśli pojawi się pytanie Załaduj ponownie, aby zmiany języka zaczęły obowiązywać? lub podobne, wybierz Tak.

Informacje o projekcie początkowym

Możesz już wysyłać prośby o dostęp do lokalizacji w aplikacji. Wykorzystaj moduł base jako punkt wyjścia. Podczas każdego kroku dodaj kod do modułu base. Gdy ukończysz te ćwiczenia z programowania, kod w module base powinien odpowiadać zawartości modułu complete. W module complete możesz sprawdzić swoją pracę lub skorzystać z niej, jeśli napotkasz jakieś problemy.

Najważniejsze komponenty to:

  • MainActivity – interfejs użytkownika, który pozwala aplikacji na dostęp do lokalizacji urządzenia.
  • LocationService – usługa, która subskrybuje zmianę lokalizacji i anuluje subskrypcję, a także przenosi się do usługi na pierwszym planie (z powiadomieniem), jeśli użytkownik opuści aplikację. Tutaj dodajesz kod lokalizacji.
  • Util – dodaje funkcje rozszerzenia dla 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 10 lub nowszy.
  2. Na pasku narzędzi w menu wybierz konfigurację base i kliknij Uruchom:

99600e9d44527ab.png

  1. Zwróć uwagę, że na urządzeniu pojawia się ta aplikacja:

99bf1dae46f99af3.png

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

3. Dodaję lokalizację

Pojęcia

Dzięki temu ćwiczeniu w Codelabs dowiesz się, jak otrzymywać aktualizacje lokalizacji, a także na Androidzie 10 i 11.

Zanim jednak zaczniesz kodować, warto przyjrzeć się podstawom.

Rodzaje dostępu do lokalizacji

Na początku tego ćwiczenia z programowania pamiętasz cztery różne opcje dostępu do lokalizacji. Zobacz, co oznaczają:

  • Zezwalaj tylko podczas używania aplikacji
  • Jest to zalecana opcja w przypadku większości aplikacji. Inna nazwa to „podczas używania”. lub „tylko na pierwszym planie” dostępu, ta opcja 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 jest spełniony jeden z tych warunków:
  • Aktywność jest widoczna.
  • Działa usługa na pierwszym planie z trwającym powiadomieniem.
  • Tylko jednorazowo
  • Dodane w Androidzie 11 działają tak samo jak ustawienie 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 zapewnia stały dostęp do lokalizacji, ale wymaga dodatkowych uprawnień na Androidzie 10 i nowszych. Musisz też upewnić się, że stosujesz odpowiedni przypadek użycia i przestrzegasz zasad dotyczących lokalizacji. W tym ćwiczeniu nie omówimy tej opcji, ponieważ jest to rzadszy przypadek użycia. Jeśli jednak masz w nim zastosowanie i chcesz się dowiedzieć, jak prawidłowo obsługiwać lokalizację przez cały czas, w tym uzyskiwać dostęp do lokalizacji w tle, zapoznaj się z przykładem dotyczącym lokalizacjiUpdatesBackgroundKotlin.

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

Aby w pełni obsługiwać aktualizacje lokalizacji obowiązujące w przypadku ustawienia Zezwalaj tylko podczas używania aplikacji, musisz uwzględnić sytuacje, gdy użytkownik opuści Twoją aplikację. Jeśli chcesz nadal otrzymywać aktualizacje w takiej sytuacji, musisz utworzyć Service na pierwszym planie i powiązać go z elementem Notification.

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

To ćwiczenia w programie koncentrują się tylko na uzyskiwaniu informacji o lokalizacji, więc cały potrzebny kod znajdziesz w klasie ForegroundOnlyLocationService.kt. Możesz przejrzeć te zajęcia oraz MainActivity.kt, aby zobaczyć, jak wspólnie działają.

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

Uprawnienia

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

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

Lokalizacja

Aplikacja ma dostęp do zestawu obsługiwanych usług lokalizacyjnych za pomocą zajęć w pakiecie com.google.android.gms.location.

Przyjrzyj się głównym klasom:

  • FusedLocationProviderClient
  • To główny element struktury lokalizacji. Możesz wtedy prosić o aktualizację i uzyskać ostatnią znaną lokalizację.
  • LocationRequest
  • Jest to obiekt danych zawierający parametry jakości usługi dla żądań (przedziały czasu aktualizacji, priorytetów i dokładności). Ta informacja jest przekazywana do FusedLocationProviderClient, gdy poprosisz o aktualizację lokalizacji.
  • LocationCallback
  • Na potrzeby tej funkcji chcesz otrzymywać powiadomienia, gdy lokalizacja urządzenia się zmieniła lub nie można jej określić. Jest to przekazywana wartość LocationResult, w której możesz uzyskać Location do zapisania w bazie danych.

Teraz, gdy masz już podstawowe pojęcie o tym, czym się zajmujesz, możesz zacząć tworzyć kod.

4. Dodaj funkcje lokalizacji

To ćwiczenie w Codelabs koncentruje się na najczęściej używanej 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 tych ćwiczeń w Codelabs jest pokazanie, jak otrzymywać informacje o lokalizacji, a nie jak prosić o dostęp do lokalizacji, więc kod oparty na uprawnieniach jest już napisany za Ciebie. Jeśli już go rozumiesz, możesz je pominąć.

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

  1. Określ, jakich uprawnień używasz w narzędziu AndroidManifest.xml.
  2. Zanim spróbujesz uzyskać dostęp do informacji o lokalizacji, sprawdź, czy użytkownik przyznał Twojej aplikacji odpowiednie uprawnienia. Jeśli Twoja aplikacja nie otrzymała jeszcze uprawnień, poproś o dostęp.
  3. Wybierz uprawnienia wybrane przez użytkownika. (możesz zobaczyć ten kod w MainActivity.kt).

Jeśli wyszukasz TODO: Step 1.0, Review Permissions w tabeli AndroidManifest.xml lub MainActivity.kt, 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 niezbędne do aktualizacji lokalizacji

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

ForegroundOnlyLocationService.kt.

Na tym etapie nie musisz niczego robić. Aby dowiedzieć się, jakich klas i zmiennych używasz do otrzymywania aktualizacji lokalizacji, zapoznaj się z tym blokiem kodu wraz z 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

Sprawdzanie inicjowania obiektu 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 metoda uzyskiwania aktualizacji lokalizacji. Zmienna jest już zainicjowana, ale trzeba przejrzeć kod, by zrozumieć, jak jest inicjowana. Później dodasz tutaj kod, aby poprosić o aktualizację lokalizacji.

Inicjowanie żądania LocationRequest

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

Kod inicjowania funkcji LocationRequest dodaje dodatkowe parametry jakości usługi, których potrzebujesz w żądaniu (przedział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 zrozumieć, jak działa każdy z nich.

Inicjowanie wywołania zwrotnego LocationCallback

  1. W module base wyszukaj TODO: Step 1.4, Initialize the LocationCallback w pliku ForegroundOnlyLocationService.kt.
  2. Dodaj ten kod po komentarzu.
// 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))
        }
    }
}

LocationCallback, który tutaj utworzysz, to wywołanie zwrotne z FusedLocationProviderClient, gdy pojawi się nowa aktualizacja lokalizacji.

W wywołaniu zwrotnym najpierw uzyskujesz najnowszą lokalizację przy użyciu obiektu LocationResult. Później powiadomisz Activity o nowej lokalizacji za pomocą komunikatu lokalnego (jeśli będzie aktywna) lub zaktualizujesz Notification, jeśli usługa ta działa jako pierwszy plan Service.

  1. Przeczytaj komentarze, aby zrozumieć, jak działa każdy z tych elementów.

Subskrybuj zmiany lokalizacji

Po zainicjowaniu wszystkich działań musisz dać usłudze FusedLocationProviderClient informację, że chcesz otrzymywać aktualizacje.

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

Dzięki wywołaniu funkcji requestLocationUpdates() użytkownik FusedLocationProviderClient wie, że chcesz otrzymywać aktualizacje lokalizacji.

Prawdopodobnie rozpoznajesz zdefiniowane wcześniej pola LocationRequest i LocationCallback. Informują one usługę FusedLocationProviderClient o parametrach jakości usługi dla Twojego żądania i o nazwie, jakie ma wywoływać w przypadku aktualizacji. Obiekt Looper określa wątek wywołania zwrotnego.

Ten kod znajduje się też w instrukcji try/catch. Ta metoda wymaga takiego zablokowania, ponieważ SecurityException występuje, gdy aplikacja nie ma uprawnień dostępu do informacji o lokalizacji.

Anulowanie subskrypcji zmian lokalizacji

Gdy aplikacja nie potrzebuje już dostępu do informacji o lokalizacji, ważne jest anulowanie subskrypcji aktualizacji lokalizacji.

  1. W module base wyszukaj TODO: Step 1.6, Unsubscribe to location changes w pliku ForegroundOnlyLocationService.kt.
  2. Dodaj ten kod 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, dzięki któremu FusedLocationProviderClient wie, że nie chcesz już otrzymywać aktualizacji lokalizacji urządzenia LocationCallback. addOnCompleteListener() zwraca wywołanie zwrotne do ukończenia i wykona Task.

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

Być może zastanawiasz się, kiedy są wywoływane metody, które zawierają kod subskrypcji/anulowania subskrypcji. Są one uruchamiane w klasie głównej, gdy użytkownik kliknie przycisk. Jeśli chcesz go zobaczyć, zapoznaj się z zajęciami MainActivity.kt.

Uruchom app

Uruchom aplikację z Android Studio i spróbuj użyć przycisku lokalizacji.

Na ekranie z wynikami powinny pojawić się 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.

Twoja aplikacja ma już subskrypcję zmian lokalizacji, więc nie musisz nic robić.

Tak naprawdę musisz tylko określić, że Twoja usługa na pierwszym planie będzie 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 targetSdkVersion na 29.

Twój 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"
   }
...
}

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

153f70847e0ec320.png

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

Dodaj typ usługi na pierwszym planie

Jeśli w Androidzie 10 chcesz korzystać z dostępu do lokalizacji podczas używania usługi na pierwszym planie, musisz podać jej typ. W Twoim przypadku są to informacje o lokalizacji.

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

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>

Znakomicie. Twoja aplikacja obsługuje lokalizację Androida 10 w trybie „podczas używania” stosując się do sprawdzonych metod dotyczących lokalizacji na Androidzie.

Uruchom app

Uruchom aplikację z Android Studio i spróbuj użyć przycisku lokalizacji.

Wszystko powinno działać jak dotychczas, ale teraz działa już na Androidzie 10. Jeśli uprawnienia do lokalizacji nie zostały wcześniej zaakceptowane, powinien pojawić się ekran uprawnień.

6a1029175b467c77.png

c7c1d226e49a121.png

39a262b66a275f66.png

6. Obsługa Androida 11

W tej sekcji wybierzesz Androida 11.

Mamy dobrą wiadomość. Nie musisz wprowadzać zmian w żadnych plikach poza plikiem 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

Twój 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"
   }
...
}

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

153f70847e0ec320.png

Gdy to zrobisz, aplikacja będzie gotowa na Androida 11.

Uruchom app

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

Wszystko powinno działać jak dotychczas, ale teraz działa już na Androidzie 11. Jeśli uprawnienia do lokalizacji nie zostały wcześniej zaakceptowane, powinien pojawić się ekran uprawnień.

73d8cc88c5877c25.png

cc98fac6e089bc4.png

7. Strategie lokalizacji na Androidzie

Aplikacja sprawdza i wysyła prośbę o dostęp do lokalizacji w sposób opisany w tym ćwiczeniu z programowania. Dzięki temu aplikacja może śledzić swój poziom dostępu do lokalizacji urządzenia.

Ta strona zawiera kilka najważniejszych sprawdzonych metod związanych z dostępem do lokalizacji. Więcej informacji o tym, jak zachować bezpieczeństwo danych użytkowników aby zapewnić bezpieczeństwo danych, zapoznaj się ze sprawdzonymi metodami dotyczącymi uprawnień aplikacji.

Pytaj tylko o wymagane uprawnienia

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

  • Nie proś o dostęp do lokalizacji przy uruchamianiu aplikacji, jeśli nie jest to absolutnie konieczne.
  • Jeśli Twoja aplikacja jest kierowana na Androida 10 lub nowszego i masz usługę na pierwszym planie, w pliku manifestu zadeklaruj foregroundServiceType o wartości "location".
  • Nie proś o dostęp do lokalizacji w tle, jeśli nie masz uzasadnionego przypadku użycia tego narzędzia zgodnie z opisem w artykule Bezpieczniejszy i bardziej przejrzysty dostęp do lokalizacji użytkownika.

Obsługuj płynne pogorszenie stanu w przypadku braku przyznania uprawnień

Aby zadbać o wygodę użytkowników, zaprojektuj aplikację w taki sposób, aby działała bezproblemowo w następujących 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