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
Android 11
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
- Wiedza na temat programowania na Androida
- Dobra znajomość aktywności, usług i uprawnień
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.
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:
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 klasyLocation
i zapisuje lokalizację wSharedPreferences
(uproszczona warstwa danych).
Konfiguracja emulatora
Informacje o konfigurowaniu emulatora Androida znajdziesz w artykule Uruchamianie w emulatorze.
Uruchamianie projektu startowego
Uruchom aplikację.
- Podłącz urządzenie z Androidem do komputera lub uruchom emulator. Upewnij się, że na urządzeniu jest zainstalowany Android 10 lub nowszy.
- Na pasku narzędzi w menu wybierz konfigurację
base
i kliknij Uruchom:
- Zwróć uwagę, że na urządzeniu pojawia się ta aplikacja:
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ć):
- Określ, jakich uprawnień używasz w narzędziu
AndroidManifest.xml
. - 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.
- 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
- W module
base
wyszukajTODO: Step 1.3, Create a LocationRequest
w plikuForegroundOnlyLocationService.kt
. - 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
}
- Przeczytaj komentarze, aby zrozumieć, jak działa każdy z nich.
Inicjowanie wywołania zwrotnego LocationCallback
- W module
base
wyszukajTODO: Step 1.4, Initialize the LocationCallback
w plikuForegroundOnlyLocationService.kt
. - 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
.
- 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.
- W module
base
wyszukajStep 1.5, Subscribe to location changes
w plikuForegroundOnlyLocationService.kt
. - 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.
- W module
base
wyszukajTODO: Step 1.6, Unsubscribe to location changes
w plikuForegroundOnlyLocationService.kt
. - 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.
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
- W module
base
wyszukajTODO: Step 2.1, Target Android 10 and then Android 11.
w plikubuild.gradle
. - Wprowadź te zmiany:
- Ustaw
targetSdkVersion
na29
.
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.
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ń.
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
- W module
base
wyszukajTODO: Step 2.1, Target SDK
w plikubuild.gradle
. - Wprowadź te zmiany:
- Od
compileSdkVersion
do30
- Od
targetSdkVersion
do30
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.
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ń.
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
- Pełny przykład do wykorzystania lokalizacji w tle w odpowiednich przypadkach
- Przesyłanie prośby o aktualizację lokalizacji