Berechtigung zur Standortermittlung anfordern

Zum Schutz der Privatsphäre der Nutzer müssen Apps, die Standortdienste verwenden, Berechtigungen für die Standortermittlung anfordern.

Beachten Sie beim Anfordern von Berechtigungen zur Standortermittlung dieselben Best Practices wie bei 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 es wird erläutert, wie Sie in jedem Fall Standortberechtigungen anfordern.

Arten des Standortzugriffs

Jede Berechtigung hat eine Kombination der folgenden Eigenschaften:

Standortermittlung im Vordergrund

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.
  • 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.
  • Ihre App führt einen Dienst im Vordergrund aus. 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 wird empfohlen, einen Typ von Dienst 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 Diensttyp 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 Ihre App die Standortermittlung im Vordergrund benötigt, wenn sie entweder die Berechtigung ACCESS_COARSE_LOCATION oder die Berechtigung ACCESS_FINE_LOCATION anfordert, wie im folgenden Snippet dargestellt:

<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 in der App den Standort ständig mit anderen Nutzern teilt oder die Geofencing API verwendet. 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 App, die die Standortermittlung im Hintergrund verwendet, 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, die von den von Ihrer App angegebenen Berechtigungen für die Standortermittlung abhängt.

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. 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 oder FusedLocationProvider stammt, ist sie auf etwa 3 Quadratkilometer genau. Ihre App kann Standorte mit dieser Genauigkeit erhalten, wenn Sie die Berechtigung ACCESS_COARSE_LOCATION angeben, aber nicht die Berechtigung ACCESS_FINE_LOCATION.
Genau
Ermöglicht eine möglichst genaue Schätzung des Gerätestandorts. Wenn die Standortschätzung von LocationManagerService oder FusedLocationProvider 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 Berechtigung ACCESS_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 Ihre App angibt.

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 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.

Nachdem der Nutzer die Schaltfläche „Standort teilen“ ausgewählt hat, wird das Dialogfeld für die Berechtigung zur Standortermittlung des Systems angezeigt.
Abbildung 1: Funktion zur Standortfreigabe, für die der Zugriff auf die Standortermittlung im Vordergrund erforderlich ist Die Funktion ist aktiviert, wenn der Nutzer Zugriff nur während der Nutzung der App zulassen 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 der Nutzer sich 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.

Das Dialogfeld bezieht sich nur auf den ungefähren Standort und enthält drei Schaltflächen, die übereinander angeordnet sind.
Abbildung 2: Dialogfeld für Systemberechtigungen, das angezeigt wird, wenn Ihre App nur ACCESS_COARSE_LOCATION anfordert.
Der Dialog enthält zwei Optionen, die übereinander liegen.
Abbildung 3 Dialogfeld für Systemberechtigungen, das angezeigt wird, wenn Ihre App sowohl ACCESS_FINE_LOCATION als auch ACCESS_COARSE_LOCATION in einer einzigen Laufzeitanfrage anfordert.

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

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 „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 dieser Grad an 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 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:

  1. Erläutern Sie gegebenenfalls, warum Ihre App die Berechtigung benötigt.
  2. Fordern Sie die Berechtigungen ACCESS_FINE_LOCATION und ACCESS_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):
Das Dialogfeld enthält die Optionen „Zu genauem Standort wechseln“, „Nur dieses Mal“ und „Ablehnen“.
Abbildung 4: Der Nutzer hat zuvor Ungefähr und Beim Verwenden der App im Dialogfeld aus Abbildung 3 ausgewählt.
Das Dialogfeld enthält die Optionen „Nur dieses Mal“ und „Ablehnen“.
Abbildung 5: Der Nutzer hat zuvor Ungefähr und Nur dieses Mal im Dialogfeld aus Abbildung 3 ausgewählt.

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 den Zugriff auf die Standortermittlung im Hintergrund erfordern. 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.

Die Schaltfläche, mit der der Zugriff auf die Standortermittlung im Vordergrund aktiviert wird, ist eine halbe Bildschirmlänge von der Schaltfläche entfernt, mit der die Standortermittlung im Hintergrund aktiviert wird.
Abbildung 6: Für beide Funktionen ist der Standortzugriff erforderlich, aber nur für die Funktion „Funktionen in der Nähe empfehlen“ ist der Zugriff auf die Standortermittlung im Hintergrund erforderlich.

So führen Sie inkrementelle Anfragen aus:

  1. 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 Zugriff auf die Standortermittlung im Vordergrund hat.

  2. 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

Abbildung 7. Auf der Seite „Einstellungen“ gibt es die Option Immer zulassen, mit der der Standortzugriff im Hintergrund gewährt wird.

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.

Sie können Nutzern dabei helfen, diese Seite aufzurufen, indem Sie die Best Practices beim Anfordern der Berechtigung zur Standortermittlung im Hintergrund befolgen. Wie Sie die Berechtigung gewähren, hängt von der Ziel-SDK-Version 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 Nutzer sichtbare Label der Einstellungsoption, die die Standortermittlung im Hintergrund erlaubt (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 Ihre App weiterhin verwenden können.
Nutzer können auf die Systembenachrichtigung tippen, um die Standorteinstellungen für eine App zu ändern.
Abbildung 8. Benachrichtigung, die den Nutzer daran erinnert, dass er einer App Zugriff auf die Standortermittlung im Hintergrund gewährt hat.

Die 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 auf einer Seite mit den Einstellungen die Optionen für die Berechtigung zur Standortermittlung Ihrer App 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, 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 Berechtigungserteilung durch den Nutzer 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. In diesem Artikel auf Medium erfährst du mehr über das Verhalten deiner SDK-Abhängigkeiten.

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.