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 der Best Practice gefolgt, Laufzeitberechtigungen im Kontext anzufordern, wie im Leitfaden zum Anfordern von App-Berechtigungen beschrieben.
Abbildung 1 zeigt ein Beispiel für diesen Vorgang. Die App enthält die Funktion „Standort teilen“, für die der Zugriff auf die Standortermittlung 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 Laufzeitberechtigung ACCESS_FINE_LOCATION
anfordert.
Um mit diesem potenziellen Nutzerverhalten umzugehen, sollten Sie die ACCESS_FINE_LOCATION
-Berechtigung nicht allein anfordern. 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: Ihre 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 sich der Nutzer für eine Standortgenauigkeit entschieden hat, tippt er auf eine der drei Schaltflächen, um die Dauer der Berechtigungsleihe auszuwählen.
Unter Android 12 und höher können Nutzer in den Systemeinstellungen die gewünschte 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.
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 Berechtigungen 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
@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 den genauen Standort anfordern
Sie können den Nutzer bitten, den Zugriff Ihrer App von „Ungefährer Standort“ auf „Genauer Standort“ zu aktualisieren. Bevor Sie den Nutzer bitten, den Zugriff Ihrer App auf den genauen Standort zu aktualisieren, sollten Sie jedoch überlegen, ob für den Anwendungsfall Ihrer App diese Genauigkeit unbedingt erforderlich ist. Wenn Ihre App ein Gerät über Bluetooth oder WLAN mit Geräten in der Nähe koppeln muss, sollten Sie die Kopplung mit einem Companion-Gerät 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 (siehe Abbildung 4 und Abbildung 5):
Zuerst nur Standortermittlung im Vordergrund anfordern
Auch wenn für mehrere Funktionen in Ihrer App der Zugriff auf die Standortermittlung erforderlich ist, ist es wahrscheinlich, dass nur einige davon Zugriff auf die Standortermittlung im Hintergrund benötigen. Daher wird empfohlen, dass Ihre App inkrementelle Anfragen für Berechtigungen zur Standortermittlung ausführt, wobei zuerst der Zugriff auf die Standortermittlung im Vordergrund und dann der Zugriff auf die Standortermittlung im Hintergrund angefordert wird. 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 inkrementeller Anfragen entwickelt wurde. 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:
Zuerst sollten Nutzer in Ihrer App zu den Funktionen geführt werden, für die der Zugriff auf die Standortermittlung im Vordergrund erforderlich ist, z. B. zur Funktion „Standort teilen“ in Abbildung 1 oder zur Funktion „Aktuellen Standort anzeigen“ in Abbildung 2.
Wir empfehlen, den Nutzerzugriff auf Funktionen zu deaktivieren, für die die Standortermittlung im Hintergrund erforderlich ist, bis Ihre App den 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.
Weitere Informationen
Weitere Informationen zu Standortberechtigungen unter Android finden Sie in den folgenden Dokumenten:
Codelabs
Videos
Produktproben
- Beispiel-App zur Veranschaulichung der Verwendung von Berechtigungen zur Standortermittlung.