Berechtigung zur Standortermittlung anfordern

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

Wenn Sie Berechtigungen zur Standortermittlung anfordern, folgen Sie denselben Best Practices wie für jede andere Laufzeitberechtigung. Ein wichtiger Unterschied bei den Berechtigungen zur Standortermittlung besteht darin, dass das System mehrere Berechtigungen für die Standortermittlung enthält. 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 jeweils die Berechtigung zur Standortermittlung anfordern.

Arten des Standortzugriffs

Jede Berechtigung hat eine Kombination der folgenden Merkmale:

Position im Vordergrund

Wenn Ihre 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 einem anderen Nutzer zu 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:

  • 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, macht das System den Nutzer durch eine dauerhafte Benachrichtigung auf sich aufmerksam. Ihre App behält den Zugriff, wenn sie im Hintergrund platziert wird, z. B. wenn der Nutzer die Startbildschirmtaste auf seinem Gerät drückt oder das Display des Geräts ausschaltet.

    Außerdem empfiehlt es sich, den Typ des Diensts im Vordergrund location zu deklarieren, wie im folgenden Code-Snippet gezeigt. Unter Android 10 (API-Ebene 29) und höher musst du diesen Typ von Diensten 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 deklarieren dies als erforderlich, 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:

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

Das System betrachtet die Standortermittlung im Hintergrund für Ihre App, wenn sie auf den aktuellen Standort des Geräts in einer anderen als der im Abschnitt Standort im Vordergrund beschriebenen Situation zugreift. Die Genauigkeit der Standortermittlung im Hintergrund entspricht der Genauigkeit der Standortermittlung im Vordergrund, die von den Standortberechtigungen abhängig ist, die Ihre App deklariert.

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 Zugriff auf die Standortermittlung im Hintergrund anzufordern. Wenn Ihre App in früheren Android-Versionen Zugriff auf die Standortermittlung im Vordergrund erhält, wird diese ebenfalls automatisch auf die Standortermittlung im Hintergrund übertragen.

<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 folgende Genauigkeitsstufen:

Ungefähr
Liefert eine Schätzung des Gerätestandorts. Wenn diese Standortschätzung aus LocationManagerService oder FusedLocationProvider stammt, beträgt diese Schätzung bis auf etwa 3 Quadratkilometer. Deine App kann Standorte mit dieser Genauigkeit empfangen, wenn du die Berechtigung ACCESS_COARSE_LOCATION, aber nicht die Berechtigung ACCESS_FINE_LOCATION deklarieren.
Genau
Stellt eine möglichst genaue Schätzung des Gerätestandorts bereit. Wenn die Standortschätzung aus LocationManagerService oder FusedLocationProvider stammt, liegt sie in der Regel innerhalb von etwa 50 Metern und ist manchmal auch bis auf wenige Meter genau oder besser. Ihre App kann Standorte mit dieser Genauigkeit empfangen, wenn Sie die Berechtigung ACCESS_FINE_LOCATION deklarieren.

Wenn der Nutzer die Berechtigung zur ungefähren Standortermittlung erteilt, hat Ihre App nur Zugriff auf den ungefähren Standort, unabhängig davon, welche Berechtigungen zur Standortermittlung durch Ihre App deklariert werden.

Ihre App sollte auch dann funktionieren, wenn der Nutzer nur Zugriff auf den ungefähren Standort gewährt. Wenn für eine Funktion in Ihrer App der Zugriff auf den genauen Standort mit der Berechtigung ACCESS_FINE_LOCATION unbedingt erforderlich ist, können Sie den Nutzer bitten, Ihrer App Zugriff auf den genauen Standort zu gewähren.

Standortzugriff zur Laufzeit anfordern

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 in der Anleitung zum Anfordern von Anwendungsberechtigungen beschrieben.

Abbildung 1 zeigt ein Beispiel für die Durchführung dieses Prozesses. Die App enthält eine Funktion zur Freigabe des Standorts, für die 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 Standortberechtigung 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.

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.

Wenn Sie dieses potenzielle Nutzerverhalten umgehen möchten, sollten Sie nicht die Berechtigung ACCESS_FINE_LOCATION allein anfordern. Fordern Sie stattdessen in einer einzigen Laufzeitanfrage die Berechtigungen ACCESS_FINE_LOCATION und ACCESS_COARSE_LOCATION an. Wenn du versuchst, 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: Die App kann genaue Standortinformationen abrufen.
  • Annähernd: Die App darf nur ungefähre Standortinformationen abrufen.

Abbildung 3 zeigt, dass das Dialogfeld einen visuellen Hinweis für beide Optionen enthält, um dem Nutzer bei der Auswahl zu helfen. Nachdem sich der Nutzer 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 das Gerät auf Android 12 oder höher aktualisiert.

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

Die Auswahl des Nutzers wirkt sich auf die Erteilung von Berechtigungen aus

Die folgende Tabelle zeigt die Berechtigungen, die das System Ihrer App gewährt, basierend 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 Berechtigungen zur Standortermittlung

Wenn Sie herausfinden möchten, welche Berechtigungen das System Ihrer App gewährt hat, sehen Sie sich den Rückgabewert Ihrer Berechtigungsanfrage an. Sie können Jetpack-Bibliotheken mit Code verwenden, der dem folgenden ähnelt, oder Plattformbibliotheken, bei denen Sie den Code für Berechtigungsanfragen 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 vom ungefähren Standort auf den genauen Standort zu aktualisieren. Bevor Sie den Nutzer bitten, den Zugriff Ihrer Anwendung auf den genauen Standort zu aktualisieren, sollten Sie prüfen, ob der Anwendungsfall Ihrer Anwendung diese Genauigkeit 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 Bluetooth-Berechtigungen verwenden, anstatt die Berechtigung ACCESS_FINE_LOCATION anzufordern.

So können Sie den Nutzer auffordern, den Standortzugriff Ihrer App von „ungefähr“ auf „genau“ zu aktualisieren:

  1. Erläutern Sie bei Bedarf, 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, unterscheidet sich das Systemdialog dieses Mal, wie in Abbildung 4 und Abbildung 5 dargestellt:
Das Dialogfeld enthält die Optionen „Zu genauen Standort ändern“, „Nur dieses Mal“ und „Ablehnen“.
Abbildung 4: Der Nutzer hat zuvor Annähernd und Beim Verwenden der App ausgewählt (im Dialogfeld aus Abbildung 3).
Das Dialogfeld enthält die Optionen „Nur dieses Mal“ und „Ablehnen“.
Abbildung 5: Der Nutzer hat zuvor Annähernd und Nur dieses Mal ausgewählt (im Dialogfeld aus Abbildung 3).

Anfänglich nur die Standortermittlung im Vordergrund anfordern

Auch wenn mehrere Funktionen in Ihrer App Zugriff auf die Standortermittlung benötigen, ist es wahrscheinlich, dass nur einige von ihnen Zugriff auf die Standortermittlung im Hintergrund erfordern. Daher empfiehlt es sich, in Ihrer App inkrementelle Anfragen nach Berechtigungen zur Standortermittlung auszuführen, bei denen der Zugriff auf die Standortermittlung im Vordergrund und dann im Hintergrund angefordert wird. Durch inkrementelle Anfragen erhalten Nutzer 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 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. Allerdings ist nur für die Funktion "Orte in der Nähe empfehlen" der Zugriff auf die Standortermittlung im Hintergrund erforderlich.

Die Schaltfläche, mit der der Zugriff auf die Standortermittlung im Vordergrund ermöglicht 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.

Gehen Sie so vor, um inkrementelle Anfragen auszuführen:

  1. Zuerst sollte Ihre App Nutzer zu den Funktionen weiterleiten, für die der Zugriff auf die Standortermittlung im Vordergrund erforderlich ist, 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, für die ein Zugriff auf die Standortermittlung im Hintergrund erforderlich ist, bis deine App Zugriff auf die Standortermittlung im Vordergrund hat.

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

Bei Bedarf Standortermittlung im Hintergrund anfordern

Abbildung 7: Die Seite „Einstellungen“ enthält die Option Immer zulassen, mit der Zugriff auf die Standortermittlung im Hintergrund gewährt wird.

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

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

Sie können Nutzern dabei helfen, diese Seite mit den Einstellungen aufzurufen, indem Sie die Best Practices für die Berechtigung zur Standortermittlung im Hintergrund befolgen. Das Verfahren zum Gewähren der Berechtigung hängt von der SDK-Zielversion 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, zeigen Sie Nutzern eine Benutzeroberfläche 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, das die Standortermittlung im Hintergrund gewährt (z. B. Immer zulassen in Abbildung 7). Rufen Sie getBackgroundPermissionOptionLabel() auf, um dieses Label abzurufen. Der Rückgabewert dieser Methode wird an die Spracheinstellung des Nutzers angepasst.
  • Eine 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, mit der der Nutzer daran erinnert wird, 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 den Nutzern ein Systemdialog angezeigt. In diesem Dialogfeld gibt es eine Option, mit der Sie die Optionen für die Berechtigung zur Standortermittlung Ihrer App auf einer Einstellungsseite aufrufen können.

Solange Ihre Anwendung bereits die Best Practices für das Anfordern von Berechtigungen zur Standortermittlung umsetzt, müssen Sie keine Änderungen vornehmen, um dieses Verhalten zu unterstützen.

Nutzer kann die Genauigkeit der Standortermittlung im Hintergrund beeinflussen

Wenn der Nutzer den ungefähren Standort anfordert, gelten die Einstellungen des Nutzers im Dialogfeld für Berechtigungen zur Standortermittlung auch für die Standortermittlung im Hintergrund. Wenn der Nutzer Ihrer App also die Berechtigung ACCESS_BACKGROUND_LOCATION, im Vordergrund aber nur Zugriff auf den ungefähren Standort gewährt, hat Ihre App auch im Hintergrund nur den ungefähren Standortzugriff.

Erinnerung zur Gewährung der Standortermittlung im Hintergrund

Wenn unter Android 10 und höher eine Funktion in Ihrer App zum ersten Mal auf den Gerätestandort im Hintergrund zugreift, nachdem der Nutzer Zugriff auf die Standortermittlung im Hintergrund gewährt hat, plant das System eine Benachrichtigung zum Senden an den Nutzer. Mit dieser Benachrichtigung wird der Nutzer daran erinnert, dass er deiner App dauerhaft erlaubt hat, auf den Gerätestandort zuzugreifen. Abbildung 8 zeigt ein Beispiel für eine Benachrichtigung.

Standortanforderungen in den SDK-Abhängigkeiten Ihrer App prüfen

Prüfe, ob deine App SDKs verwendet, die von Berechtigungen zur Standortermittlung abhängig sind, insbesondere die Berechtigung ACCESS_FINE_LOCATION. Weitere Informationen zum Verhalten von SDK-Abhängigkeiten finden Sie in diesem Artikel auf Medium.

Weitere Informationen

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

Codelabs

Videos

Produktproben

  • Beispiel-App, in der die Verwendung von Berechtigungen zur Standortermittlung demonstriert wird