Wenn eine Funktion in Ihrer App Zugriff auf den Standort benötigt, warten Sie, bis der Nutzer mit der Funktion interagiert, bevor Sie die Berechtigungsanfrage stellen. Dieser Workflow folgt der Best Practice, Laufzeitberechtigungen im Kontext anzufordern, wie im Leitfaden zum Anfordern von App-Berechtigungen beschrieben.
Abbildung 1 zeigt ein Beispiel für diesen Prozess. Die App enthält die Funktion „Standort teilen“, für die der Zugriff auf den Standort im Vordergrund erforderlich ist. Die App fordert die Berechtigung zur Standortermittlung jedoch erst an, wenn der Nutzer die Schaltfläche Standort teilen auswählt.
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
ACCESS_FINE_LOCATION Laufzeitberechtigung anfordert.
Um dieses potenzielle Nutzerverhalten zu berücksichtigen, fordern Sie die Berechtigung ACCESS_FINE_LOCATION nicht allein an. Fordern Sie stattdessen in einer einzigen Laufzeitanfrage sowohl die ACCESS_FINE_LOCATION
Berechtigung als auch die ACCESS_COARSE_LOCATION Berechtigung an. Wenn Sie nur ACCESS_FINE_LOCATION anfordern, ignoriert das System die Anfrage in einigen Versionen 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 Systemberechtigungsdialogfeld die folgenden Optionen für den Nutzer:
- Präzise: Ermöglicht Ihrer App, genaue Standortdaten abzurufen.
- Annähernd: Ermöglicht Ihrer App, nur ungefähre Standortdaten abzurufen.
Abbildung 3 zeigt, dass das Dialogfeld für beide Optionen eine visuelle Hilfestellung enthält, um dem Nutzer die Auswahl zu erleichtern. Nachdem der Nutzer eine Standortgenauigkeit ausgewählt 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. Das gilt auch dann, wenn Ihre App auf einem Gerät mit Android 11 oder niedriger installiert ist und der Nutzer das Gerät dann auf Android 12 oder höher aktualisiert.
ACCESS_COARSE_LOCATION anfordert.ACCESS_FINE_LOCATION als auch
ACCESS_COARSE_LOCATION anfordert.
Die Nutzerauswahl wirkt sich auf die Berechtigungserteilung aus
In der folgenden Tabelle sind die Berechtigungen aufgeführt, die das System Ihrer App erteilt, basierend auf den Optionen, die der Nutzer im Laufzeitdialogfeld für Berechtigungen auswählt:
| Präzise | Annähernd | |
|---|---|---|
| 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 |
| Ablehnen | Keine Berechtigungen zur Standortermittlung | Keine Berechtigungen zur Standortermittlung |
Um zu ermitteln, welche Berechtigungen das System Ihrer App erteilt hat, prüfen Sie den Rückgabewert Ihrer Berechtigungsanfrage. Sie können Jetpack-Bibliotheken in Code verwenden, der dem folgenden ähnelt, oder Sie können Plattformbibliotheken verwenden, bei denen Sie den Code für die Berechtigungsanfrage selbst verwalten.
Kotlin
@RequiresApi(Build.VERSION_CODES.N) fun requestPermissions() { 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: // https://developer.android.com/training/permissions/requesting#request-permission locationPermissionRequest.launch( arrayOf( Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION ) ) }
Java
private void requestPermissions() { ActivityResultLauncher<String[]> locationPermissionRequest = registerForActivityResult(new ActivityResultContracts .RequestMultiplePermissions(), result -> { Boolean fineLocationGranted = null; Boolean coarseLocationGranted = null; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { fineLocationGranted = result.getOrDefault( Manifest.permission.ACCESS_FINE_LOCATION, false); 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 genauen Standort anfordern
Sie können den Nutzer bitten, den Zugriff Ihrer App vom ungefähren auf den genauen Standort zu aktualisieren. Bevor Sie den Nutzer jedoch bitten, den Zugriff Ihrer App auf den genauen Standort zu aktualisieren, sollten Sie prüfen, ob diese Genauigkeit für den Anwendungsfall Ihrer App unbedingt erforderlich ist. Wenn Ihre App ein Gerät über Bluetooth oder WLAN mit Geräten in der Nähe koppeln muss, sollten Sie stattdessen die Verwendung von Begleitgeräte-Kopplung oder Bluetooth-Berechtigungen in Betracht ziehen, anstatt die ACCESS_FINE_LOCATION Berechtigung anzufordern.
So fordern Sie den Nutzer auf, den Standortzugriff Ihrer App von „annähernd“ auf „präzise“ zu aktualisieren:
- Erklären Sie gegebenenfalls, warum Ihre App die Berechtigung benötigt.
- Fordern Sie die Berechtigungen
ACCESS_FINE_LOCATIONundACCESS_COARSE_LOCATIONnoch einmal gemeinsam an. Da der Nutzer dem System bereits erlaubt hat, Ihrer App den Zugriff auf den ungefähren Standort zu gewähren, unterscheidet sich das Systemdialogfeld dieses Mal, wie in Abbildung 4 und Abbildung 5 dargestellt:
Zuerst nur Zugriff auf den Standort im Vordergrund anfordern
Auch wenn für mehrere Funktionen in Ihrer App der Zugriff auf den Standort erforderlich ist, benötigen wahrscheinlich nur einige von ihnen die Standortermittlung im Hintergrund. Daher empfiehlt es sich, dass Ihre App schrittweise Anfragen für Berechtigungen zur Standortermittlung ausführt, zuerst den Zugriff auf den Standort im Vordergrund und dann den Zugriff auf die Standortermittlung im Hintergrund anfordert. Durch schrittweise Anfragen haben Nutzer mehr Kontrolle und Transparenz, da sie besser nachvollziehen können, welche Funktionen in Ihrer App die Standortermittlung im Hintergrund benötigen.
Abbildung 6 zeigt ein Beispiel für eine App, die für die Verarbeitung schrittweiser Anfragen entwickelt wurde. Für die Funktionen „Aktuellen Standort anzeigen“ und „Orte in der Nähe empfehlen“ ist der Zugriff auf den Standort 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 schrittweise Anfragen aus:
Zuerst sollte Ihre App Nutzer zu den Funktionen führen, für die der Zugriff auf den Standort im Vordergrund erforderlich ist, z. B. die Funktion „Standort teilen“ in Abbildung 1 oder die Funktion „Aktuellen Standort anzeigen“ in Abbildung 2.
Es empfiehlt sich, den Nutzerzugriff auf Funktionen zu deaktivieren, für die die Standortermittlung im Hintergrund erforderlich ist, bis Ihre App Zugriff auf den Standort im Vordergrund hat.
Zusätzliche Ressourcen
Weitere Informationen zu Berechtigungen zur Standortermittlung unter Android finden Sie in den folgenden Materialien:
Codelabs
Videos
Beispiele
- Beispiel-App zur Veranschaulichung der Verwendung von Berechtigungen zur Standortermittlung