Aus Datenschutzgründen müssen Apps, die Standortdienste verwenden, Standortberechtigungen anfordern.
Beachten Sie beim Anfordern von Berechtigungen zur Standortermittlung dieselben Best Practices wie für alle anderen Laufzeitberechtigungen. Ein wichtiger Unterschied bei Standortberechtigungen besteht darin, dass das System mehrere standortbezogene Berechtigungen umfasst. 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 Arten von Standortanforderungen beschrieben und Sie erfahren, wie Sie die Berechtigungen zur Standortermittlung anfordern.
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 Standortinformationen nur einmal oder für einen bestimmten Zeitraum freigibt oder empfängt, ist für diese Funktion der Zugriff auf die Standortermittlung im Vordergrund erforderlich. Beispiele:
- In einer Navigations-App können Nutzer mit einer Funktion detaillierte Wegbeschreibungen abrufen.
- Innerhalb einer Messaging-App ermöglicht eine Funktion Nutzern, ihren aktuellen Standort mit einem anderen Nutzer zu teilen.
Ihre App verwendet die Standortermittlung im Vordergrund, wenn eine Funktion Ihrer App in einer der folgenden Situationen auf den aktuellen Standort des Geräts zugreift:
- Eine Aktivität, die zu deiner 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 empfiehlt es sich, den Typ von Diensten im Vordergrund von
location
zu deklarieren, wie im folgenden Code-Snippet gezeigt. Unter 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 die Berechtigung ACCESS_COARSE_LOCATION
oder ACCESS_FINE_LOCATION
anfordert, 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>
Standortermittlung im Hintergrund
Eine App benötigt Zugriff auf die Standortermittlung im Hintergrund, wenn eine Funktion innerhalb der App den Standort ständig mit anderen Nutzern teilt oder die Geofencing API verwendet. Hier einige Beispiele:
- In einer App zur Standortfreigabe für Familien können Nutzer ihren Standort kontinuierlich mit Familienmitgliedern teilen.
- Mit einer Funktion in einer IoT-App können Nutzer ihre Haushaltsgeräte so konfigurieren, dass sie sich ausschalten, wenn der Nutzer das Haus verlässt, und wieder einschalten, wenn er nach Hause zurückkehrt.
Das System betrachtet Ihre App als Nutzer der Standortermittlung im Hintergrund, wenn sie in einer anderen Situation als den im Abschnitt Standortermittlung im Vordergrund beschriebenen Fällen auf den aktuellen Standort des Geräts zugreift. Die Genauigkeit der Standortermittlung im Hintergrund entspricht der Genauigkeit der Standortermittlung im Vordergrund. Sie hängt von den Berechtigungen zur Standortermittlung ab, die von Ihrer App deklariert werden.
Unter Android 10 (API-Level 29) und höher müssen Sie die Berechtigung ACCESS_BACKGROUND_LOCATION
im Manifest Ihrer App deklarieren, um zur Laufzeit den Zugriff auf die Standortermittlung im Hintergrund anzufordern. Wenn Ihre App in früheren Android-Versionen Zugriff auf die Standortermittlung im Vordergrund erhält, erhält sie automatisch auch Zugriff auf die Standortermittlung 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 aus
LocationManagerService
oderFusedLocationProvider
stammt, ist die Schätzung auf etwa 3 Quadratkilometer genau. Deine App kann Standorte mit dieser Genauigkeit empfangen, wenn du die BerechtigungACCESS_COARSE_LOCATION
, aber nicht die BerechtigungACCESS_FINE_LOCATION
deklarierst. - Genau
- Ermöglicht eine möglichst genaue Schätzung des Gerätestandorts. Wenn die Standortschätzung anhand von
LocationManagerService
oderFusedLocationProvider
erfolgt, liegt die Schätzung normalerweise innerhalb von etwa 50 Metern und ist manchmal so genau wie auf wenige Meter oder besser. 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 weiterhin funktionieren, wenn der Nutzer nur Zugriff auf den ungefähren Standort gewährt. Wenn eine Funktion in deiner App unbedingt mit der Berechtigung ACCESS_FINE_LOCATION
Zugriff auf den genauen Standort benötigt, kannst du den Nutzer bitten, deiner App Zugriff auf den genauen Standort zu gewähren.
Standortzugriff zur Laufzeit anfordern
Wenn für eine Funktion in Ihrer App der Zugriff auf die Standortermittlung erforderlich ist, warten Sie, bis der Nutzer mit der Funktion interagiert, bevor Sie die Berechtigung anfordern. Bei diesem Workflow wird die Best Practice befolgt, Laufzeitberechtigungen im Kontext anzufordern, wie im Leitfaden zum Anfordern von App-Berechtigungen beschrieben.
Abbildung 1 zeigt ein Beispiel für die Durchführung dieses Vorgangs. Die App enthält eine Funktion zum Teilen des Standorts, für die der Zugriff auf die Standortermittlung im Vordergrund erforderlich ist. Die Berechtigung zur Standortermittlung wird jedoch erst angefordert, wenn der Nutzer die Schaltfläche Standort teilen auswählt.
Nutzer gewährt nur Zugriff auf den ungefähren Standort
Unter Android 12 (API-Level 31) oder höher können Nutzer festlegen, dass Ihre App nur ungefähre Standortinformationen abruft, auch wenn Ihre App die Laufzeitberechtigung ACCESS_FINE_LOCATION
anfordert.
Fordern Sie die Berechtigung ACCESS_FINE_LOCATION
nicht an, um dieses potenzielle Nutzerverhalten zu beheben. Fordern Sie stattdessen sowohl die Berechtigung ACCESS_FINE_LOCATION
als auch die Berechtigung ACCESS_COARSE_LOCATION
in einer einzigen Laufzeitanfrage an. Wenn Sie nur ACCESS_FINE_LOCATION
anfordern, 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 Anwendung 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 die Standortgenauigkeit entschieden hat, tippt er auf eine von drei Schaltflächen, um die Dauer der Berechtigung festzulegen.
Unter Android 12 und höher können Nutzer die Systemeinstellungen aufrufen, um die bevorzugte Standortgenauigkeit für jede App festzulegen, unabhängig von der SDK-Zielversion dieser App. Dies gilt auch dann, wenn deine App auf einem Gerät mit Android 11 oder niedriger installiert ist und der Nutzer dann ein Upgrade auf Android 12 oder höher durchführt.
Die Nutzerauswahl wirkt sich auf die Erteilung von Berechtigungen aus
In der folgenden Tabelle sind die Berechtigungen aufgeführt, die der Anwendung vom System gewährt werden. Sie basieren auf den Optionen, 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. Sie können Jetpack-Bibliotheken in Code verwenden, der dem folgenden ähnelt, oder Plattformbibliotheken, bei denen Sie den Code für die Berechtigungsanfrage selbst verwalten.
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
Sie können den Nutzer bitten, den Zugriff Ihrer App von der Ermittlung des ungefähren Standorts auf den genauen Standort zu aktualisieren. Bevor Sie den Nutzer bitten, den Zugriff Ihrer App auf den genauen Standort zu aktualisieren, sollten Sie sich jedoch überlegen, ob der Anwendungsfall Ihrer App diese Präzision unbedingt erfordert. Wenn Ihre App ein Gerät über Bluetooth oder WLAN mit Geräten in der Nähe koppeln muss, sollten Sie die Kopplung von Companion-Geräten oder die Bluetooth-Berechtigungen verwenden, anstatt die ACCESS_FINE_LOCATION
-Berechtigung anzufordern.
So fordern Sie den Nutzer auf, den Zugriff auf die Standortermittlung Ihrer App von ungefähr auf genau zu aktualisieren:
- Erläutern Sie gegebenenfalls, warum Ihre App die Berechtigung benötigt.
- Fordern Sie die Berechtigungen
ACCESS_FINE_LOCATION
undACCESS_COARSE_LOCATION
noch einmal zusammen an. Da der Nutzer dem System bereits erlaubt hat, Ihrer App den ungefähren Standort zu gewähren, sieht das Systemdialogfeld diesmal anders aus (Abbildung 4 und Abbildung 5):
Zuerst nur Standortermittlung im Vordergrund anfordern
Auch wenn mehrere Funktionen Ihrer App Zugriff auf die Standortermittlung erfordern, ist es wahrscheinlich, dass nur einige von ihnen Zugriff auf die Standortermittlung im Hintergrund erfordern. Daher wird empfohlen, dass Ihre Anwendung inkrementelle Anfragen für Berechtigungen zur Standortermittlung ausführt und den Zugriff auf die Standortermittlung im Vordergrund und dann auf die Standortermittlung im Hintergrund anfordert. Wenn Sie inkrementelle Anfragen stellen, bieten Sie Nutzern mehr Kontrolle und Transparenz, da sie besser verstehen, welche Funktionen Ihrer App Zugriff auf die Standortermittlung im Hintergrund benötigen.
Abbildung 6 zeigt ein Beispiel für eine App, die für die Verarbeitung inkrementeller Anfragen entwickelt wurde. Für die Funktionen „Aktuellen Standort anzeigen“ und „Orte in der Nähe empfehlen“ ist der Zugriff auf die Standortermittlung im Vordergrund erforderlich. Nur für die Funktion „Orte in der Nähe empfehlen“ ist jedoch der Zugriff auf die Standortermittlung im Hintergrund erforderlich.
So führen Sie inkrementelle Anfragen aus:
-
Zuerst sollte deine App Nutzer zu Funktionen weiterleiten, die Zugriff auf die Standortermittlung im Vordergrund benötigen, z. B. die Funktion „Standort teilen“ in Abbildung 1 oder die Funktion „Aktuellen Standort anzeigen“ in Abbildung 2.
Wir empfehlen, den Nutzerzugriff auf Funktionen zu deaktivieren, die Zugriff auf die Standortermittlung im Hintergrund erfordern, bis deine App Zugriff auf die Standortermittlung im Vordergrund hat.
-
Wenn der Nutzer später Funktionen nutzt, für die der Zugriff auf die Standortermittlung im Hintergrund erforderlich ist, können Sie den Zugriff auf die Standortermittlung im Hintergrund anfordern.
Standortermittlung im Hintergrund bei Bedarf 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 ist die Option Immer zulassen jedoch nicht im Systemdialogfeld enthalten. Stattdessen müssen Nutzer die Standortermittlung im Hintergrund auf einer Einstellungsseite aktivieren, wie in Abbildung 7 dargestellt.
Damit Nutzer diese Einstellungsseite leichter aufrufen können, sollten Sie beim Anfordern der Berechtigung zur Standortermittlung im Hintergrund Best Practices beachten. Wie Sie die Berechtigung erteilen, hängt von der SDK-Zielversion Ihrer App ab.
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()
anrufen, um dieses Label zu erhalten. Der Rückgabewert dieser Methode wird in die Gerätespracheinstellung des Nutzers übersetzt. - Eine Option für Nutzer, die Berechtigung abzulehnen. Wenn Nutzer den Zugriff auf die Standortermittlung im Hintergrund ablehnen, sollten sie deine App weiterhin verwenden können.
App ist auf Android 10 oder niedriger ausgerichtet
Wenn eine Funktion in Ihrer App 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 kann die Genauigkeit der Standortermittlung im Hintergrund beeinträchtigen
Wenn der Nutzer den ungefähren Standort anfordert, gelten seine Auswahlmöglichkeiten im Dialogfeld für die Berechtigungen zur Standortermittlung auch für die Standortermittlung im Hintergrund. Wenn der Nutzer Ihrer App also die Berechtigung ACCESS_BACKGROUND_LOCATION
erteilt, aber nur den Zugriff auf den ungefähren Standort im Vordergrund, hat Ihre App auch nur Zugriff auf den ungefähren Standort im Hintergrund.
Erinnerung zur Erteilung der Berechtigung zur 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 in Ihrer App SDKs verwendet werden, die von Berechtigungen zur Standortermittlung abhängen, insbesondere von der Berechtigung ACCESS_FINE_LOCATION
. Lesen Sie diesen Artikel auf Medium, um sich über das Verhalten von SDK-Abhängigkeiten zu informieren.
Weitere Informationen
Weitere Informationen zu Standortberechtigungen unter Android finden Sie in den folgenden Dokumenten:
Codelabs
Videos
Produktproben
- Beispiel-App, um die Verwendung von Berechtigungen zur Standortermittlung zu demonstrieren