Berechtigung zur Standortermittlung anfordern

Aus Datenschutzgründen müssen Apps, die Standortdienste verwenden, Berechtigungen zur Standortermittlung anfordern.

Beachten Sie beim Anfordern von Berechtigungen zur Standortermittlung dieselben Best Practices wie für alle anderen Laufzeitberechtigungen. Ein wichtiger Unterschied bei den Berechtigungen zur Standortermittlung besteht darin, dass das System mehrere Berechtigungen in Bezug auf den Standort 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:

Vordergrundstandort

Wenn deine App eine Funktion enthält, die Standortinformationen nur einmal oder für einen bestimmten Zeitraum teilt oder empfängt, ist für diese Funktion der Zugriff auf die Standortermittlung im Vordergrund erforderlich. Hier einige Beispiele:

  • Innerhalb einer Navigations-App können Nutzer mithilfe einer Funktion eine detaillierte Routenführung abrufen.
  • Innerhalb einer Messaging-App ermöglicht eine Funktion Nutzern, ihren aktuellen Standort mit anderen Nutzern 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:

  • Aktivitäten, die zu Ihrer App gehören, sind sichtbar.
  • In deiner App wird ein Dienst im Vordergrund ausgeführt. Wenn ein Dienst im Vordergrund ausgeführt wird, zeigt das System eine dauerhafte Benachrichtigung an, um die Aufmerksamkeit des Nutzers zu wecken. Ihre App behält den Zugriff, wenn sie im Hintergrund platziert wird, z. B. wenn der Nutzer die Home-Taste auf seinem Gerät drückt oder das Display seines Geräts 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>

Standort 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:

  • Innerhalb einer App zur Standortfreigabe für Familien ermöglicht es Nutzern eine Funktion, ihren Standort kontinuierlich mit Familienmitgliedern zu teilen.
  • Innerhalb einer IoT-App können Nutzer ihre Smart-Home-Geräte so konfigurieren, dass sie sich ausschalten, wenn der Nutzer das Zuhause verlässt, und wieder einschalten, wenn der Nutzer nach Hause kommt.

Ihre App verwendet die Standortermittlung im Hintergrund, wenn sie unter einer anderen als der unter Position im Vordergrund beschriebenen Situation 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 musst du im Manifest deiner App die Berechtigung ACCESS_BACKGROUND_LOCATION deklarieren, um den Zugriff auf die Standortermittlung im Hintergrund zur Laufzeit 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 Genauigkeitsstufen:

Ungefähr
Liefert eine Schätzung des Gerätestandorts. Wenn diese Standortschätzung aus LocationManagerService oder FusedLocationProvider stammt, ist die Schätzung auf etwa 3 Quadratkilometer genau. Deine App kann Standorte mit dieser Genauigkeit empfangen, wenn du die Berechtigung ACCESS_COARSE_LOCATION, aber nicht die Berechtigung ACCESS_FINE_LOCATION deklarierst.
Genau
Eine möglichst genaue Schätzung des Gerätestandorts Wenn die Standortschätzung anhand von LocationManagerService oder FusedLocationProvider erfolgt, liegt die Schätzung normalerweise innerhalb von etwa 50 Metern und ist manchmal so genau wie auf wenige Meter oder besser. Wenn du die Berechtigung ACCESS_FINE_LOCATION erklärst, kann deine App Standorte mit dieser Genauigkeit empfangen.

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 von Ihrer App deklariert werden.

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 eine Funktion Ihrer App Zugriff auf den Standort benötigt, warten Sie, bis der Nutzer mit der Funktion interagiert, bevor Sie eine Berechtigungsanfrage stellen. Dieser Workflow entspricht der Best Practice, Laufzeitberechtigungen im Kontext anzufordern, wie in der Anleitung 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.

Nachdem der Nutzer die Schaltfläche „Standort teilen“ ausgewählt hat, wird das Dialogfeld mit der Berechtigung zur Standortermittlung angezeigt.
Abbildung 1. Standortfreigabefunktion, für die 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.

Der Nutzer kann nur den ungefähren Standort gewähren

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 die Berechtigungen ACCESS_FINE_LOCATION und ACCESS_COARSE_LOCATION in einer 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 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: Die App kann nur ungefähre Standortinformationen abrufen.

In Abbildung 3 ist zu sehen, dass das Dialogfeld einen visuellen Hinweis für beide Optionen enthält, um dem Nutzer die Auswahl zu erleichtern. 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.

Das Dialogfeld gibt nur die ungefähre Position an und enthält drei Schaltflächen, eine übereinander
Abbildung 2: Dialogfeld für Systemberechtigungen, das nur angezeigt wird, wenn Ihre Anwendung nur ACCESS_COARSE_LOCATION anfordert.
Das Dialogfeld enthält zwei Optionen, eine übereinander
Abbildung 3: Dialogfeld für Systemberechtigungen, das angezeigt wird, wenn Ihre Anwendung sowohl ACCESS_FINE_LOCATION als auch ACCESS_COARSE_LOCATION in einer einzelnen Laufzeitanfrage anfordert.

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 Berechtigung 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 verwenden, in denen Sie den Berechtigungsanfragecode 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, können Sie Companion-Gerätekopplung oder Bluetooth-Berechtigungen verwenden, anstatt die Berechtigung ACCESS_FINE_LOCATION anzufordern.

So fordern Sie den Nutzer dazu an, den Standortzugriff Ihrer App von „ungefähre“ 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 Systemdialog diesmal anders aus, wie in Abbildung 4 und Abbildung 5 gezeigt:
Das Dialogfeld enthält die Optionen „Zu genauen Standort wechseln“, „Nur dieses Mal“ und „Ablehnen“.
Abbildung 4: Der Nutzer hat zuvor im Dialogfeld aus Abbildung 3 die Optionen Ungefähr und Beim Verwenden der Anwendung ausgewählt.
Das Dialogfeld enthält die Optionen „Nur dieses Mal“ und „Ablehnen“.
Abbildung 5. Der Nutzer hat zuvor im Dialogfeld aus Abbildung 3 die Option Ungefähr und Nur dieses Mal ausgewählt.

Anfänglich nur Standort im Vordergrund anfordern

Auch wenn mehrere Funktionen Ihrer App Zugriff auf die Standortermittlung benötigen, 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 Anwendung, die für die Verarbeitung inkrementeller Anfragen vorgesehen ist. 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.

Die Schaltfläche, mit der der Zugriff auf die Standortermittlung im Vordergrund aktiviert wird, ist eine halbe Bildschirmlänge von der Schaltfläche entfernt platziert, die die Standortermittlung im Hintergrund ermöglicht
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 durch:

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

  2. Wenn der Nutzer später Funktionen nutzt, für die Zugriff auf die Standortermittlung im Hintergrund erforderlich ist, kannst du den Zugriff auf die Standortermittlung im Hintergrund anfordern.

Bei Bedarf Standortermittlung im Hintergrund anfordern

Abbildung 7. Auf der Einstellungsseite gibt es die Option Immer zulassen, die Zugriff auf die Standortermittlung im Hintergrund gewährt.

Inhalt des Berechtigungsdialogfelds hängt von der SDK-Zielversion ab

Wenn eine Funktion Ihrer App die Standortermittlung im Hintergrund auf einem Gerät mit Android 10 (API-Level 29) anfordert, wird im Dialogfeld für Systemberechtigungen die Option Immer zulassen angezeigt. 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 enthält das Systemdialogfeld jedoch nicht die Option Immer zulassen. Stattdessen müssen Nutzer die Standortermittlung im Hintergrund auf einer Einstellungsseite aktivieren, wie in Abbildung 7 gezeigt.

Damit Nutzer diese Einstellungsseite leichter aufrufen können, sollten Sie sich beim Anfordern der Berechtigung zur Standortermittlung im Hintergrund an Best Practices halten. Wie Sie die Berechtigung erteilen, hängt von der SDK-Zielversion Ihrer App ab.

App ist auf Android 11 oder höher ausgerichtet

Wenn deiner App die Berechtigung ACCESS_BACKGROUND_LOCATION nicht gewährt wurde und shouldShowRequestPermissionRationale() den Wert true zurückgibt, zeige Nutzern eine pädagogische UI mit folgenden Informationen:

  • 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() aufrufen, um dieses Label abzurufen. Der Rückgabewert dieser Methode wird an die Spracheinstellung des Nutzergeräts angepasst.
  • Option, mit der Nutzer die Berechtigung ablehnen können. Wenn Nutzer den Zugriff auf die Standortermittlung im Hintergrund ablehnen, sollten sie deine 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.

App ist auf Android 10 oder niedriger ausgerichtet

Wenn ein Feature Ihrer App im Hintergrund Zugriff auf die Standortermittlung anfordert, sehen Nutzer ein Systemdialogfeld. In diesem Dialogfeld gibt es eine Option, über die Sie auf einer Einstellungsseite die Optionen für die Standortberechtigung Ihrer App aufrufen können.

Solange deine App bereits die Best Practices zum Anfordern von Berechtigungen zur Standortermittlung befolgt, musst du 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, gilt die Auswahl des Nutzers im Dialogfeld für die Berechtigung zur Standortermittlung auch für die Standortermittlung im Hintergrund. Wenn der Nutzer also Ihrer App die Berechtigung ACCESS_BACKGROUND_LOCATION, aber nur den ungefähren Standortzugriff im Vordergrund gewährt, hat Ihre App auch nur den ungefähren Standortzugriff im Hintergrund.

Erinnerung zur Gewährung der Standortermittlung im Hintergrund

Wenn eine Funktion Ihrer App unter Android 10 und höher zum ersten Mal im Hintergrund auf den Gerätestandort zugreift, nachdem der Nutzer Zugriff auf die Standortermittlung im Hintergrund gewährt hat, plant das System eine Benachrichtigung, die an den Nutzer gesendet wird. Diese Benachrichtigung erinnert den Nutzer daran, dass er deiner App jederzeit erlaubt hat, auf den Gerätestandort zuzugreifen. In Abbildung 8 wird eine Beispielbenachrichtigung angezeigt.

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 der Berechtigung ACCESS_FINE_LOCATION. Lesen Sie diesen Artikel auf Medium, um sich über das Verhalten von SDK-Abhängigkeiten zu informieren.

Zusätzliche Ressourcen

Weitere Informationen zu Berechtigungen zur Standortermittlung in Android finden Sie in den folgenden Materialien:

Codelabs

Videos

Produktproben

  • Beispiel-App, um die Verwendung von Berechtigungen zur Standortermittlung zu demonstrieren