Aus Datenschutzgründen müssen Apps, die Standortdienste verwenden, den Standort anfordern Berechtigungen.
Beachten Sie beim Anfordern von Berechtigungen zur Standortermittlung dieselben Best Practices wie bei anderen Laufzeitberechtigungen. Ein wichtiger Unterschied bei den Berechtigungen zur Standortermittlung ist, dass das mehrere Berechtigungen in Bezug auf den Standort hat. Welche Berechtigungen Sie anfordern und wie Sie sie anfordern, hängt von den Standortanforderungen für den Anwendungsfall Ihrer App ab.
Auf dieser Seite werden die verschiedenen Standortanforderungen beschrieben und Anleitungen dazu, wie Sie die Berechtigungen zur Standortermittlung anfordern können.
Arten des Standortzugriffs
Jede Berechtigung hat eine Kombination der folgenden Eigenschaften:
- Kategorie: Entweder Standort im Vordergrund oder Standort im Hintergrund.
- Genauigkeit: Entweder genauer Standort oder ungefährer Standort.
Vordergrundstandort
Wenn Ihre App eine Funktion enthält, die nur Standortinformationen teilt oder empfängt einmal oder für einen festgelegten Zeitraum erfordert, dass diese Funktion Standortzugriff. Hier einige Beispiele:
- In einer Navigations-App können Nutzer mit einer Funktion detaillierte Wegbeschreibungen abrufen.
- In einer Messaging-App können Nutzer mit einer Funktion ihren aktuellen Standort mit einem anderen Nutzer teilen.
Das System geht davon aus, dass Ihre App die Standortermittlung im Vordergrund verwendet, wenn eine Funktion Ihrer App in einer der folgenden Situationen auf den aktuellen Standort des Geräts zugreift:
- Eine Aktivität, die zu Ihrer App gehört, ist sichtbar.
In deiner App wird ein Dienst im Vordergrund ausgeführt. Wenn ein Dienst im Vordergrund ausgeführt wird, wird der Nutzer durch eine dauerhafte Benachrichtigung darauf aufmerksam gemacht. Ihre App behält den Zugriff, wenn sie im Hintergrund ausgeführt wird, z. B. wenn der Nutzer die Startbildschirmtaste auf seinem Gerät drückt oder das Display ausschaltet.
Außerdem sollten Sie einen Dienst im Vordergrund Art von
location
, wie im folgenden Code-Snippet gezeigt. Android 10 (API) Level 29) und höher müssen Sie diesen Typ von Dienst im Vordergrund deklarieren.<!-- 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>
Sie erklären, dass die Standortermittlung im Vordergrund erforderlich ist, wenn Ihre App
ACCESS_COARSE_LOCATION
oder die
ACCESS_FINE_LOCATION
wie im folgenden Snippet gezeigt:
<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>
Standort im Hintergrund
Eine App benötigt Zugriff auf die Standortermittlung im Hintergrund, wenn eine Funktion innerhalb der App teilt den Standort ständig mit anderen Nutzern oder verwendet Geofencing API hinzu. Hier einige Beispiele:
- Innerhalb einer Familien-App zur Standortfreigabe können Nutzer den Standort mit Familienmitgliedern teilen.
- In einer IoT-App können Nutzer mit einer Funktion ihre Smart-Home-Geräte konfigurieren, z. B. die sich ausschalten, wenn der Nutzer das Zuhause verlässt, und wieder einschalten, wenn der wenn Nutzende nach Hause kommen.
Das System nutzt die Standortermittlung im Hintergrund für deine App, wenn sie auf die Standort des Geräts in allen Situationen, die nicht in den im Vordergrund ein. Die Genauigkeit der Standortermittlung im Hintergrund entspricht der Genauigkeit der Standortermittlung im Vordergrund, die von den von Ihrer App angegebenen Berechtigungen für die Standortermittlung abhängt.
Unter Android 10 (API-Level 29) und höher musst du die
ACCESS_BACKGROUND_LOCATION
im Manifest deiner App, um die Standortermittlung im Hintergrund anzufordern
Zugriff während der Laufzeit. In früheren Android-Versionen erhält Ihre App, wenn sie den Zugriff auf den Standort im Vordergrund erhält, automatisch auch den Zugriff auf den Standort im Hintergrund.
<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>
Richtigkeit
Android unterstützt die folgenden Standortgenauigkeitsstufen:
- Ungefähr
- Ermöglicht eine Schätzung des Gerätestandorts. Wenn diese Standortschätzung von
LocationManagerService
oderFusedLocationProvider
stammt, ist sie auf etwa 3 Quadratkilometer genau. Ihre App kann Standorte mit dieser Genauigkeit erhalten, wenn Sie die BerechtigungACCESS_COARSE_LOCATION
angeben, aber nicht die BerechtigungACCESS_FINE_LOCATION
. - Genau
- Eine möglichst genaue Schätzung des Gerätestandorts Wenn die Standortschätzung von
LocationManagerService
oderFusedLocationProvider
stammt, liegt sie in der Regel innerhalb von etwa 50 Metern und ist manchmal sogar auf wenige Meter genau. Ihre App kann Standorte mit dieser Genauigkeit erhalten, wenn Sie die BerechtigungACCESS_FINE_LOCATION
deklarieren.
Wenn der Nutzer die Berechtigung zur Ermittlung des ungefähren Standorts gewährt, hat Ihre App nur Zugriff auf den ungefähren Standort, unabhängig davon, welche Berechtigungen zur Standortermittlung Sie in Ihrer App angeben.
Ihre App sollte auch dann funktionieren, wenn der Nutzer nur den Zugriff auf den ungefähren Standort gewährt. Wenn für eine Funktion in Ihrer App unbedingt der Zugriff auf den genauen Standort mithilfe der Berechtigung ACCESS_FINE_LOCATION
erforderlich ist, können Sie den Nutzer bitten, Ihrer App den Zugriff auf den genauen Standort zu erlauben.
Standortzugriff zur Laufzeit anfordern
Wenn eine Funktion in deiner App Standortzugriff benötigt, warte, bis der Nutzer darauf reagiert bevor Sie die Berechtigungsanfrage stellen. Dieser Workflow folgt der Best Practice für das Abfragen von Laufzeitberechtigungen im entsprechenden Kontext, wie in den in der die App-Anforderung Berechtigungen
Abbildung 1 zeigt ein Beispiel für diesen Vorgang. Die App enthält ein „Standort teilen“ für die der Zugriff auf die Standortermittlung im Vordergrund erforderlich ist. Die App fordert jedoch erst dann die Berechtigung zur Standortermittlung an, wenn der Nutzer die Schaltfläche Standort teilen:
Nutzer gewährt nur Zugriff auf den ungefähren Standort
Ab Android 12 (API-Level 31) können Nutzer festlegen, dass Apps nur ungefähre Standortdaten abrufen dürfen, selbst wenn Ihre App die Laufzeitberechtigung ACCESS_FINE_LOCATION
anfordert.
Fordere zum Umgang mit diesem potenziellen Nutzerverhalten nicht die ACCESS_FINE_LOCATION
an
für sich alleinstehende Genehmigungen. Fordern Sie stattdessen sowohl die Berechtigung ACCESS_FINE_LOCATION
als auch die Berechtigung ACCESS_COARSE_LOCATION
in einer einzigen Laufzeitanfrage an. Wenn Sie versuchen, nur ACCESS_FINE_LOCATION
anzufordern, ignoriert das System die Anfrage bei einigen Releases von Android 12. Wenn Ihre App auf Android 12 oder höher ausgerichtet ist, protokolliert das System die folgende Fehlermeldung in Logcat:
ACCESS_FINE_LOCATION must be requested with ACCESS_COARSE_LOCATION.
Wenn Ihre App sowohl ACCESS_FINE_LOCATION
als auch ACCESS_COARSE_LOCATION
anfordert, enthält das Dialogfeld für Systemberechtigungen die folgenden Optionen für den Nutzer:
- Genau: Die App kann genaue Standortinformationen abrufen.
- Ungefähr: Ihre App kann nur ungefähre Standortinformationen abrufen.
Abbildung 3 zeigt, dass das Dialogfeld eine visuelle Aufforderung für beide Optionen enthält, um den Nutzer bei der Auswahl zu unterstützen. Nachdem der Nutzer sich für eine Standortgenauigkeit entschieden hat, tippt er auf eine der drei Schaltflächen, um die Dauer der Berechtigungserteilung auszuwählen.
Unter Android 12 und höher können Nutzer in den Systemeinstellungen die bevorzugte Standortgenauigkeit für jede App festlegen, unabhängig von der Ziel-SDK-Version der App. Dies gilt auch dann, wenn Ihre App auf einem Gerät installiert ist. mit Android 11 oder niedriger. Der Nutzer führt dann ein Upgrade der auf Android 12 oder höher.
Die Nutzerauswahl wirkt sich auf die Erteilung von Berechtigungen aus
In der folgenden Tabelle sind die Berechtigungen aufgeführt, die das System Ihrer App basierend auf den Optionen gewährt, die der Nutzer im Dialogfeld für die Berechtigungslaufzeit auswählt:
Genau | Ungefähr | |
---|---|---|
Bei Nutzung der App | ACCESS_FINE_LOCATION und ACCESS_COARSE_LOCATION |
ACCESS_COARSE_LOCATION |
Nur dieses Mal | ACCESS_FINE_LOCATION und ACCESS_COARSE_LOCATION |
ACCESS_COARSE_LOCATION |
Deny | Keine Berechtigungen zur Standortermittlung | Keine Berechtigung zur Standortermittlung |
Um festzustellen, welche Berechtigungen das System Ihrer App gewährt hat, prüfen Sie den Rückgabewert Ihrer Berechtigungsanfrage. Du kannst Jetpack-Bibliotheken im Code verwenden ähnlich wie die folgenden, oder Sie können Plattformbibliotheken verwenden, in denen Sie Berechtigungsanfragecode verwalten Sie selbst.
Kotlin
val locationPermissionRequest = registerForActivityResult( ActivityResultContracts.RequestMultiplePermissions() ) { permissions -> when { permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> { // Precise location access granted. } permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> { // Only approximate location access granted. } else -> { // No location access granted. } } } // ... // Before you perform the actual permission request, check whether your app // already has the permissions, and whether your app needs to show a permission // rationale dialog. For more details, see Request permissions. locationPermissionRequest.launch(arrayOf( Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION))
Java
ActivityResultLauncher<String[]> locationPermissionRequest = registerForActivityResult(new ActivityResultContracts .RequestMultiplePermissions(), result -> { Boolean fineLocationGranted = result.getOrDefault( Manifest.permission.ACCESS_FINE_LOCATION, false); Boolean coarseLocationGranted = result.getOrDefault( Manifest.permission.ACCESS_COARSE_LOCATION,false); if (fineLocationGranted != null && fineLocationGranted) { // Precise location access granted. } else if (coarseLocationGranted != null && coarseLocationGranted) { // Only approximate location access granted. } else { // No location access granted. } } ); // ... // Before you perform the actual permission request, check whether your app // already has the permissions, and whether your app needs to show a permission // rationale dialog. For more details, see Request permissions. locationPermissionRequest.launch(new String[] { Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION });
Upgrade auf den genauen Standort anfordern
Du kannst den Nutzer bitten, den Zugriff deiner App von der Standortermittlung auf
den genauen Standort. Bevor Sie den Nutzer bitten, den Zugriff Ihrer App auf
Den genauen Standort sollten Sie
jedoch überlegen, ob der Anwendungsfall Ihrer App
erfordert diese Präzision. Wenn deine App ein Gerät mit einem Gerät in der Nähe koppeln muss
Geräte über Bluetooth oder WLAN verbinden können, sollten Sie ein Begleitgerät verwenden.
Kopplung oder Bluetooth
Berechtigungen
fordert die Berechtigung ACCESS_FINE_LOCATION
an.
Um den Nutzer anzufordern, dass er den Standortzugriff Ihrer App von ungefähr auf Gehen Sie so vor:
- Erläutern Sie gegebenenfalls, warum Ihre App die Berechtigung benötigt.
- Berechtigungen
ACCESS_FINE_LOCATION
undACCESS_COARSE_LOCATION
anfordern wieder zusammen. Da der Nutzer dem System bereits erlaubt hat, ungefähren Standort angeben, unterscheidet sich das Systemdialogfeld dieses Mal, wie in Abbildung 4 dargestellt, und Abbildung 5:
Zuerst nur Standortermittlung im Vordergrund anfordern
Auch wenn mehrere Funktionen Ihrer App Zugriff auf den Standort erfordern, aber nur einige erfordern Zugriff auf die Standortermittlung im Hintergrund. Daher ist es empfohlen, dass Ihre App inkrementelle Anfragen für den Standort ausführt Berechtigungen, um Zugriff auf die Standortermittlung im Vordergrund und dann auf die Standortermittlung im Hintergrund zu erhalten Zugriff haben. Wenn Sie schrittweise Anfragen stellen, erhalten Nutzer mehr Kontrolle und Transparenz, da sie besser nachvollziehen können, für welche Funktionen in Ihrer App der Zugriff auf die Standortermittlung im Hintergrund erforderlich ist.
Abbildung 6 zeigt ein Beispiel für eine App, die für die Verarbeitung -Anfragen. Sowohl die Funktion „Aktuellen Standort anzeigen“ als auch die Funktion „Orte in der Nähe empfehlen“ erfordern den Standortzugriff im Vordergrund. Nur für die Funktion „Orte in der Nähe empfehlen“ ist der Zugriff auf die Standortermittlung im Hintergrund erforderlich.
So führen Sie inkrementelle Anfragen aus:
-
Zunächst sollte Ihre App Nutzende zu Funktionen führen, die eine Zugriff auf Standort im Vordergrund, z. B. „Standort teilen“ in Abbildung 1 oder die Option „Aktuellen Standort anzeigen“ in Abbildung 2 dargestellt.
Es wird empfohlen, den Nutzerzugriff auf Funktionen zu deaktivieren, die Folgendes erfordern: Zugriff auf Standortermittlung im Hintergrund, bis die App eine Standortermittlung im Vordergrund hat Zugriff haben.
-
Später, wenn die Nutzenden Funktionen entdecken, die eine Standortzugriff im Hintergrund haben, können Sie Standort im Hintergrund anfordern Zugriff haben.
Bei Bedarf Standortermittlung im Hintergrund anfordern
Inhalt des Berechtigungsdialogfelds hängt von der SDK-Zielversion ab
Wenn eine Funktion in Ihrer App die Standortermittlung im Hintergrund auf einem Gerät mit Android 10 (API-Level 29) anfordert, enthält das Dialogfeld für Systemberechtigungen die Option Immer zulassen. Wenn der Nutzer diese Option auswählt, erhält die Funktion in Ihrer App Zugriff auf die Standortermittlung im Hintergrund.
Unter Android 11 (API-Level 30) und höher wird das Systemdialogfeld Schließen Sie die Option Immer zulassen ein. Stattdessen müssen Nutzer die Hintergrundwiedergabe auf einer Einstellungsseite, wie in Abbildung 7 dargestellt.
Sie können Nutzern dabei helfen, diese Seite aufzurufen, indem Sie die Best Practices beim Anfordern der Berechtigung zur Standortermittlung im Hintergrund befolgen. Das Verfahren zur Gewährung des hängt von der SDK-Zielversion Ihrer App ab.
Die App ist auf Android 11 oder höher ausgerichtet
Wenn Ihrer App die Berechtigung ACCESS_BACKGROUND_LOCATION
nicht gewährt wurde und shouldShowRequestPermissionRationale()
true
zurückgibt, müssen Sie Nutzern eine informative Benutzeroberfläche mit den folgenden Informationen anzeigen:
- Eine klare Erklärung, warum die Funktion Ihrer App Zugriff auf die Standortermittlung im Hintergrund benötigt.
- Das für den Nutzer sichtbare Label der Einstellungsoption, die die Standortermittlung im Hintergrund gewährt
(z. B. Immer zulassen in Abbildung 7). Sie können
getBackgroundPermissionOptionLabel()
um dieses Label zu erhalten. Der Rückgabewert dieser Methode wird in die Gerätespracheinstellung des Nutzers übersetzt. - Option, mit der Nutzer die Berechtigung ablehnen können. Wenn Nutzer den Zugriff auf die Standortermittlung im Hintergrund ablehnen, sollten sie Ihre App weiterhin verwenden können.
Die App ist auf Android 10 oder niedriger ausgerichtet
Wenn eine Funktion in Ihrer App den Zugriff auf die Standortermittlung im Hintergrund anfordert, wird Nutzern ein Systemdialogfeld angezeigt. In diesem Dialogfeld können Sie die Berechtigungsoptionen für die Standortermittlung Ihrer App auf einer Einstellungsseite aufrufen.
Solange Ihre App bereits die Best Practices für das Anfordern von Berechtigungen für die Standortermittlung einhält, müssen Sie keine Änderungen vornehmen, um dieses Verhalten zu unterstützen.
Nutzer können die Genauigkeit der Standortermittlung im Hintergrund beeinflussen
Wenn der Nutzer den ungefähren Standort anfordert,
Die Einstellungen im Dialogfeld für Berechtigungen zur Standortermittlung gelten auch für die Standortermittlung im Hintergrund. In
Wenn der Nutzer Ihrer App die Berechtigung „ACCESS_BACKGROUND_LOCATION
“ gewährt,
gewährt, aber im Vordergrund nur den ungefähren Standortzugriff gewährt,
-App auch im Hintergrund nur die ungefähre Standortermittlung verfügbar ist.
Erinnerung zur Gewährung der Standortermittlung im Hintergrund
Unter Android 10 und höher wird vom System eine Benachrichtigung an den Nutzer gesendet, wenn eine Funktion in Ihrer App zum ersten Mal nach der Erteilung des Zugriffs auf die Standortermittlung im Hintergrund auf den Gerätestandort im Hintergrund zugreift. Mit dieser Benachrichtigung wird der Nutzer daran erinnert, dass er Ihrer App den Zugriff auf den Gerätestandort jederzeit erlaubt hat. Abbildung 8 zeigt eine Beispielbenachrichtigung.
Standortanforderungen in den SDK-Abhängigkeiten Ihrer App prüfen
Prüfen Sie, ob Ihre App SDKs verwendet, die von Berechtigungen zur Standortermittlung abhängen
insbesondere die Berechtigung ACCESS_FINE_LOCATION
. In diesem Artikel auf Medium erfährst du mehr über das Verhalten deiner SDK-Abhängigkeiten.
Weitere Informationen
Weitere Informationen zu Berechtigungen zur Standortermittlung in Android finden Sie hier: Materialien:
Codelabs
Videos
Produktproben
- Beispiel-App, um die Verwendung von Berechtigungen zur Standortermittlung zu demonstrieren