Aby chronić prywatność użytkowników, aplikacje korzystające z usług lokalizacyjnych muszą prosić o dostęp do lokalizacji.
Z lokalizacją jest związanych kilka uprawnień. To, o które uprawnienia poprosisz i jak to zrobisz, zależy od wymagań dotyczących lokalizacji w przypadku Twojej aplikacji.
Na tej stronie opisujemy różne typy wymagań dotyczących lokalizacji i wyjaśniamy, jak w każdym przypadku prosić o dostęp do lokalizacji.
Aby poprosić o dostęp do lokalizacji, postępuj zgodnie ze sprawdzonymi metodami dotyczącymi wszystkich uprawnień przyznawanych w czasie działania aplikacji.
Typy dostępu do lokalizacji
Każde uprawnienie ma kombinację tych cech:
- Kategoria: lokalizacja na pierwszym planie lub lokalizacja w tle.
- Dokładność: dokładna lokalizacja lub przybliżona lokalizacja.
Lokalizacja na pierwszym planie
Jeśli Twoja aplikacja zawiera funkcję, która udostępnia lub odbiera informacje o lokalizacji tylko raz albo przez określony czas, ta funkcja wymaga dostępu do lokalizacji na pierwszym planie. Oto kilka przykładów:
- W aplikacji do nawigacji funkcja umożliwia użytkownikom uzyskiwanie wskazówek nawigacyjnych.
- W komunikatorze funkcja umożliwia użytkownikom udostępnianie swojej bieżącej lokalizacji innym użytkownikom.
System uznaje, że Twoja aplikacja korzysta z lokalizacji na pierwszym planie, jeśli funkcja aplikacji uzyskuje dostęp do bieżącej lokalizacji urządzenia w jednej z tych sytuacji:
- Widoczna jest aktywność należąca do Twojej aplikacji.
Twoja aplikacja uruchamia usługę na pierwszym planie. Gdy usługa na pierwszym planie jest uruchomiona, system informuje o tym użytkownika, wyświetlając trwałe powiadomienie. Twoja aplikacja zachowuje dostęp, gdy jest umieszczona w tle, np. gdy użytkownik naciśnie przycisk Strona główna na urządzeniu lub wyłączy ekran urządzenia.
Dodatkowo musisz zadeklarować typ usługi na pierwszym planie
location, jak pokazano w tym fragmencie kodu. W Androidzie 10 (poziom interfejsu API 29) i nowszych wersjach musisz zadeklarować ten typ usługi na pierwszym planie.<!-- Recommended for Android 9 (API level 28) and lower. --> <!-- Required for Android 10 (API level 29) and higher. --> <service android:name="MyNavigationService" android:foregroundServiceType="location" ... > <!-- Any inner elements would go here. --> </service>
Potrzebę dostępu do lokalizacji na pierwszym planie deklarujesz, gdy Twoja aplikacja prosi o uprawnienie
ACCESS_COARSE_LOCATION lub ACCESS_FINE_LOCATION
, jak pokazano w tym fragmencie kodu:
<manifest ... >
<!-- Always include this permission -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- Include only if your app benefits from precise location access. -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>
Lokalizacja w tle
Aplikacja wymaga dostępu do lokalizacji w tle, jeśli funkcja w aplikacji stale udostępnia lokalizację innym użytkownikom lub korzysta z interfejsu Geofencing API. Oto kilka przykładów:
- W aplikacji do udostępniania lokalizacji rodzinie funkcja umożliwia użytkownikom ciągłe udostępnianie lokalizacji członkom rodziny.
- W aplikacji IoT funkcja umożliwia użytkownikom konfigurowanie urządzeń domowych tak, aby wyłączały się, gdy użytkownik opuszcza dom, i włączały się, gdy wraca.
System uznaje, że Twoja aplikacja korzysta z lokalizacji w tle, jeśli uzyskuje dostęp do bieżącej lokalizacji urządzenia w dowolnej sytuacji innej niż opisane w sekcji Lokalizacja na pierwszym planie. Dokładność lokalizacji w tle jest taka sama jak dokładność lokalizacji na pierwszym planie, która zależy od uprawnień do lokalizacji zadeklarowanych przez Twoją aplikację.
W Androidzie 10 (poziom interfejsu API 29) i nowszych wersjach, aby
poprosić o dostęp do lokalizacji w tle w czasie działania aplikacji, musisz zadeklarować uprawnienie
ACCESS_BACKGROUND_LOCATION w pliku manifestu aplikacji. W starszych wersjach Androida, gdy Twoja aplikacja uzyskuje dostęp do lokalizacji na pierwszym planie, automatycznie uzyskuje też dostęp do lokalizacji w tle.
<manifest ... >
<!-- Required only when requesting background location access on
Android 10 (API level 29) and higher. -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>
Dokładność
Android obsługuje te poziomy dokładności lokalizacji:
- Przybliżona
- Podaje szacunkową lokalizację urządzenia. Jeśli ta szacunkowa lokalizacja pochodzi z
LocationManagerServicelubFusedLocationProvider, jest dokładna z dokładnością do około 3 kilometrów kwadratowych. Twoja aplikacja może otrzymywać lokalizacje z tym poziomem dokładności, gdy zadeklarujesz uprawnienieACCESS_COARSE_LOCATION, ale nie uprawnienieACCESS_FINE_LOCATION. - Dokładna
- Podaje szacunkową lokalizację urządzenia, która jest tak dokładna, jak to możliwe.
Jeśli szacunkowa lokalizacja pochodzi z
LocationManagerServicelubFusedLocationProvider, zwykle jest dokładna z dokładnością do około 50 metrów, a czasami nawet do kilku metrów. Twoja aplikacja może otrzymywać lokalizacje z tym poziomem dokładności, gdy zadeklarujesz uprawnienieACCESS_FINE_LOCATION.
Jeśli użytkownik przyzna uprawnienie do przybliżonej lokalizacji, Twoja aplikacja będzie mieć dostęp tylko do przybliżonej lokalizacji, niezależnie od tego, jakie uprawnienia do lokalizacji zadeklaruje.
Twoja aplikacja powinna nadal działać, gdy użytkownik przyzna jej dostęp tylko do przybliżonej lokalizacji. Jeśli funkcja w Twojej aplikacji bezwzględnie wymaga dostępu do dokładnej lokalizacji
za pomocą uprawnienia ACCESS_FINE_LOCATION, możesz poprosić użytkownika o zezwolenie na dostęp do dokładnej lokalizacji.
Przypomnienie o przyznaniu dostępu do lokalizacji w tle
W Androidzie 10 (poziom interfejsu API 29) i nowszych wersjach, gdy funkcja w Twojej aplikacji po raz pierwszy uzyskuje dostęp do lokalizacji urządzenia w tle po tym, jak użytkownik przyznał dostęp do lokalizacji w tle, system planuje wysłanie do użytkownika powiadomienia. To powiadomienie przypomina użytkownikowi, że zezwolił Twojej aplikacji na stały dostęp do lokalizacji urządzenia. Przykładowe powiadomienie jest widoczne na ilustracji 8.
Sprawdzanie wymagań dotyczących lokalizacji w zależnościach pakietu SDK aplikacji
Sprawdź, czy Twoja aplikacja korzysta z pakietów SDK, które zależą od uprawnień do lokalizacji, zwłaszcza od uprawnienia ACCESS_FINE_LOCATION. Więcej informacji znajdziesz w poście na Medium Getting to know the
behaviors of your SDK dependencies.
Dodatkowe materiały
Więcej informacji o uprawnieniach do lokalizacji w Androidzie znajdziesz w tych materiałach:
Codelabs
Filmy
Przykłady
- Przykładowa aplikacja która pokazuje, jak używać uprawnień do lokalizacji.