Berechtigung zur Standortermittlung anfordern

Aus Datenschutzgründen müssen Apps, die Standortdienste verwenden, den Standort anfordern Berechtigungen.

Beachten Sie beim Anfordern von Berechtigungen zur Standortermittlung dieselben Best Practices wie Sie für jede andere Laufzeitberechtigung. Ein wichtiger Unterschied bei den Berechtigungen zur Standortermittlung ist, dass das mehrere Berechtigungen in Bezug auf den Standort hat. Welche Berechtigungen Sie und wie Sie sie anfordern, hängen von den Standortanforderungen für Ihre Anwendungsfall der App.

Auf dieser Seite werden die verschiedenen Standortanforderungen beschrieben und um jeweils die Berechtigung zur Standortermittlung anzufordern.

Arten des Standortzugriffs

Jede Berechtigung hat eine Kombination der folgenden Eigenschaften:

Vordergrundstandort

Wenn Ihre App eine Funktion enthält, die nur Standortinformationen teilt oder empfängt einmal oder für einen festgelegten Zeitraum erfordert, dass diese Funktion Standortzugriff. Hier einige Beispiele:

  • Innerhalb einer Navigations-App können Nutzende eine detaillierte Routenführung Wegbeschreibungen.
  • Eine Funktion in einer Messaging-App ermöglicht es Nutzern, ihren aktuellen Standort zu teilen. mit einem anderen Nutzer.

Das System geht davon aus, dass Ihre App die Standortermittlung im Vordergrund verwendet, wenn eine Funktion Ihre App an einem der folgenden Orte auf den aktuellen Standort des Geräts zugreift Situationen:

  • Eine Aktivität, die zu deiner App gehört, ist sichtbar.
  • In deiner App wird ein Dienst im Vordergrund ausgeführt. Wenn ein Dienst im Vordergrund informiert das System die Nutzer über eine dauerhafte Benachrichtigung. Ihre App behält den Zugriff, wenn sie im Hintergrund platziert wird, z. B. wenn der Der Nutzer drückt die Startbildschirmtaste auf seinem Gerät oder dreht das Display des Geräts. deaktiviert.

    Außerdem sollten Sie einen Dienst im Vordergrund Art von location, wie im folgenden Code-Snippet gezeigt. 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 ACCESS_COARSE_LOCATION oder die ACCESS_FINE_LOCATION 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 teilt den Standort ständig mit anderen Nutzern oder verwendet Geofencing API hinzu. Hier einige Beispiele:

  • Innerhalb einer Familien-App zur Standortfreigabe können Nutzer Standort mit Familienmitgliedern teilen.
  • In einer IoT-App können Nutzer mit einer Funktion ihre Smart-Home-Geräte konfigurieren, z. B. die sich ausschalten, wenn der Nutzer das Zuhause verlässt, und wieder einschalten, wenn der wenn Nutzende nach Hause kommen.

Das System nutzt die Standortermittlung im Hintergrund für deine App, wenn sie auf die Standort des Geräts in allen Situationen, die nicht in den im Vordergrund ein. Die Genauigkeit der Standortermittlung im Hintergrund beträgt entspricht der Genauigkeit der Standortermittlung im Vordergrund, die von die von Ihrer App deklarierten Berechtigungen zur Standortermittlung verwenden.

Unter Android 10 (API-Level 29) und höher musst du die ACCESS_BACKGROUND_LOCATION im Manifest deiner App, um die Standortermittlung im Hintergrund anzufordern Zugriff während der Laufzeit. In früheren Versionen von Wenn deine App unter Android Zugriff auf die Standortermittlung im Vordergrund erhält, erhält ebenfalls 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. Stammt diese Standortschätzung LocationManagerService oder FusedLocationProvider, Diese Schätzung ist auf etwa 3 Quadratkilometer genau (ca.1,2 Quadratkilometer Kilometer). Deine App kann Standorte mit dieser Genauigkeit empfangen, wenn du die Berechtigung ACCESS_COARSE_LOCATION deklarieren, aber nicht die Berechtigung „ACCESS_FINE_LOCATION
Genau
Eine möglichst genaue Schätzung des Gerätestandorts Wenn die Standortschätzung stammt von LocationManagerService oder FusedLocationProvider, liegt diese Schätzung normalerweise innerhalb von etwa 50 Metern und ist manchmal auf wenige Meter oder besser genau. Ihre App kann Folgendes empfangen: Standorte mit dieser Genauigkeit angeben, wenn Sie das ACCESS_FINE_LOCATION Berechtigung.

Wenn der Nutzer die Berechtigung zur ungefähren Standortermittlung erteilt, geschieht Folgendes: hat Ihre App nur Zugriff auf den ungefähren Standort, unabhängig davon, Berechtigungen, die in Ihrer App deklariert sind.

Ihre App sollte auch dann funktionieren, wenn der Nutzer nur den ungefähren Standort gewährt Zugriff haben. Wenn eine Funktion Ihrer App unbedingt Zugriff auf den genauen Standort benötigt Mit der Berechtigung ACCESS_FINE_LOCATION können Sie den Nutzer bitten, Ihre App, um auf den genauen Standort zuzugreifen.

Standortzugriff zur Laufzeit anfordern

Wenn eine Funktion in deiner App Standortzugriff benötigt, warte, bis der Nutzer darauf reagiert bevor Sie die Berechtigungsanfrage stellen. Dieser Workflow folgt der Best Practice für das Abfragen von Laufzeitberechtigungen im entsprechenden Kontext, wie in den in der die App-Anforderung Berechtigungen

Abbildung 1 zeigt ein Beispiel für die Durchführung dieses Vorgangs. Die App enthält ein „Standort teilen“ für die der Zugriff auf die Standortermittlung im Vordergrund erforderlich ist. Die App fordert jedoch erst dann die Berechtigung zur Standortermittlung an, wenn der Nutzer die Schaltfläche Standort teilen:

<ph type="x-smartling-placeholder">
</ph> Nachdem der Nutzer die Schaltfläche „Share Location“ (Standort teilen) ausgewählt hat, wird der
    Das Dialogfeld mit der Berechtigung zur Standortermittlung wird angezeigt.
Abbildung 1: Standortfreigabefunktion, für die Zugriff auf die Standortermittlung im Vordergrund. Die Funktion ist aktiviert, wenn der Nutzer Zugriff nur während der Nutzung der App zulassen

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

Unter Android 12 (API-Level 31) oder höher können Nutzer anfordern, dass Ihre App nur den ungefähren Standort angeben, auch wenn Ihre App die ACCESS_FINE_LOCATION Laufzeitberechtigung.

Fordere zum Umgang mit diesem potenziellen Nutzerverhalten nicht die ACCESS_FINE_LOCATION an für sich alleinstehende Genehmigungen. Fordern Sie stattdessen beide ACCESS_FINE_LOCATION an und die ACCESS_COARSE_LOCATION in einer einzelnen Laufzeitanfrage. Wenn Sie versuchen, nur ACCESS_FINE_LOCATION, wird die Anfrage bei einigen Releases von Android 12 Wenn Ihre App für Android 12 oder höher ist, protokolliert das System die folgende Fehlermeldung Logcat:

ACCESS_FINE_LOCATION must be requested with ACCESS_COARSE_LOCATION.

Wenn deine App sowohl ACCESS_FINE_LOCATION als auch ACCESS_COARSE_LOCATION anfordert, Das Dialogfeld für Systemberechtigungen enthält die folgenden Optionen für den Nutzer:

  • Genau: Die App kann genaue Standortinformationen abrufen.
  • Ungefähr: Die App kann nur den ungefähren Standort abrufen.

Abbildung 3 zeigt, dass das Dialogfeld ein visuelles Element enthält. einen Hinweis für beide Optionen, um den Nutzenden die Auswahl zu erleichtern. Nachdem sich die Nutzenden für ein können Sie auf eine von drei Schaltflächen tippen, um die Dauer der Berechtigungserteilung.

Unter Android 12 und höher können Nutzer die Systemeinstellungen aufrufen. , um die bevorzugte Standortgenauigkeit für eine App festzulegen, unabhängig von der SDK-Zielversion. Dies gilt auch dann, wenn deine App auf einem Gerät installiert ist. mit Android 11 oder niedriger. Der Nutzer führt dann ein Upgrade der auf Android 12 oder höher.

<ph type="x-smartling-placeholder">
</ph> Das Dialogfeld bezieht sich nur auf den ungefähren Standort und
         enthält drei Schaltflächen, eine über der anderen
Abbildung 2: Dialogfeld für Systemberechtigungen, das angezeigt wird, wenn Ihre App fordert nur ACCESS_COARSE_LOCATION an.
<ph type="x-smartling-placeholder">
</ph> Das Dialogfeld enthält zwei Optionen, eine übereinander
Abbildung 3: Dialogfeld für Systemberechtigungen, das angezeigt wird, wenn fordert Ihre App sowohl ACCESS_FINE_LOCATION als auch ACCESS_COARSE_LOCATION in einer einzelnen Laufzeitanfrage.

Die Nutzerauswahl wirkt sich auf die Erteilung von Berechtigungen aus

In der folgenden Tabelle sehen Sie die Berechtigungen, die Ihrer App vom System erteilt werden. 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 Berechtigung zur Standortermittlung Keine Berechtigung zur Standortermittlung

Um herauszufinden, welche Berechtigungen das System Ihrer App gewährt hat, gehen Sie zu den Rückgabewert Ihrer Berechtigungsanfrage. Sie können Jetpack-Bibliotheken im Code verwenden ähnlich wie die folgenden, oder Sie können Plattformbibliotheken verwenden, in denen Sie Berechtigungsanfragecode verwalten Sie selbst.

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

Du kannst den Nutzer bitten, den Zugriff deiner App von der Standortermittlung auf genauer Standort erfasst. Bevor Sie den Nutzer bitten, den Zugriff Ihrer App auf Den genauen Standort sollten Sie jedoch überlegen, ob der Anwendungsfall Ihrer App erfordert diese Präzision. Wenn deine App ein Gerät mit einem Gerät in der Nähe koppeln muss Geräte über Bluetooth oder WLAN verbinden können, sollten Sie ein Begleitgerät verwenden. Kopplung oder Bluetooth Berechtigungen fordert die Berechtigung ACCESS_FINE_LOCATION an.

Um den Nutzer anzufordern, dass er den Standortzugriff Ihrer App von ungefähr auf genau, gehen Sie so vor:

  1. Erläutern Sie gegebenenfalls, warum Ihre App die Funktion Berechtigung
  2. Berechtigungen ACCESS_FINE_LOCATION und ACCESS_COARSE_LOCATION anfordern wieder zusammen. Da der Nutzer dem System bereits erlaubt hat, ungefähren Standort angeben, unterscheidet sich das Systemdialogfeld dieses Mal, wie in Abbildung 4 dargestellt, und Abbildung 5:
<ph type="x-smartling-placeholder">
</ph> Das Dialogfeld enthält die Optionen
         location&#39;, &#39;Nur dieses Mal&#39; und &#39;Ablehnen&#39;.
Abbildung 4: Der Nutzer, der zuvor die Optionen Ungefähr und Bei Nutzung der App (im Dialogfeld) aus Abbildung 3).
<ph type="x-smartling-placeholder">
</ph> Das Dialogfeld enthält die Optionen „Nur dieses Mal“ und
         „Ablehnen“.
Abbildung 5: Der Nutzer, der zuvor die Optionen Ungefähr und Nur dieses Mal (im Dialogfeld vom Abbildung 3).

Anfänglich nur Standort im Vordergrund anfordern

Auch wenn mehrere Funktionen Ihrer App Zugriff auf den Standort erfordern, aber nur einige erfordern Zugriff auf die Standortermittlung im Hintergrund. Daher ist es empfohlen, dass Ihre App inkrementelle Anfragen für den Standort ausführt Berechtigungen, um Zugriff auf die Standortermittlung im Vordergrund und dann auf die Standortermittlung im Hintergrund zu erhalten Zugriff haben. Durch inkrementelle Anfragen geben Sie Nutzern mehr Kontrolle und da sie besser verstehen, welche Funktionen Ihrer App Zugriff auf Standortermittlung im Hintergrund.

Abbildung 6 zeigt ein Beispiel für eine App, die für die Verarbeitung -Anfragen. Sowohl die Option "Aktuellen Standort anzeigen" und „Orte in der Nähe empfehlen“ Funktionen erfordern den Zugriff auf die Standortermittlung im Vordergrund. Nur „Orte in der Nähe empfehlen“ erfordert jedoch den Zugriff auf die Standortermittlung im Hintergrund.

<ph type="x-smartling-placeholder">
</ph> Die Schaltfläche, mit der der Zugriff auf die Standortermittlung im Vordergrund aktiviert wird,
    die eine halbe Bildschirmlänge von der Schaltfläche entfernt ist,
    Standort
Abbildung 6: Für beide Funktionen ist der Standortzugriff erforderlich, „Funktionen in der Nähe empfehlen“ Standortermittlung im Hintergrund erforderlich Zugriff haben.

So führen Sie inkrementelle Anfragen durch:

  1. Zunächst sollte Ihre App Nutzende zu Funktionen führen, die eine Zugriff auf Standort im Vordergrund, z. B. „Standort teilen“ in Abbildung 1 oder die Option „Aktuellen Standort anzeigen“ in Abbildung 2 dargestellt.

    Es wird empfohlen, den Nutzerzugriff auf Funktionen zu deaktivieren, die Folgendes erfordern: Zugriff auf Standortermittlung im Hintergrund, bis die App eine Standortermittlung im Vordergrund hat Zugriff haben.

  2. Später, wenn die Nutzenden Funktionen entdecken, die eine Standortzugriff im Hintergrund haben, können Sie Standort im Hintergrund anfordern Zugriff haben.

Bei Bedarf Standortermittlung im Hintergrund anfordern

<ph type="x-smartling-placeholder">
</ph>
Abbildung 7: Auf der Einstellungsseite finden Sie die Option Immer zulassen – Standortermittlung im Hintergrund Zugriff.

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

Wenn eine Funktion Ihrer App auf einem ausgeführten Gerät die Standortermittlung im Hintergrund anfordert Unter Android 10 (API-Level 29) enthält das Dialogfeld für Systemberechtigungen eine Option namens Immer zulassen. Wenn der Nutzer diese Option auswählt, wird die Funktion in erhält Ihre App Zugriff auf die Standortermittlung im Hintergrund.

Unter Android 11 (API-Level 30) und höher wird das Systemdialogfeld Schließen Sie die Option Immer zulassen ein. Stattdessen müssen Nutzer die Hintergrundwiedergabe auf einer Einstellungsseite, wie in Abbildung 7 dargestellt.

Sie können Nutzern helfen, diese Einstellungsseite aufzurufen, indem Sie Best Practices befolgen wenn Sie die Berechtigung zur Standortermittlung im Hintergrund anfordern. Das Verfahren zur Gewährung des 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() true zurückgibt, wird Nutzern eine pädagogische Benutzeroberfläche mit folgenden Elementen angezeigt:

  • Eine klare Erklärung, warum die Funktion deiner App Zugriff auf den Hintergrund benötigt Standort.
  • 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() um dieses Label zu erhalten. Der Rückgabewert dieser Methode ist Spracheinstellung des Geräts.
  • Option, mit der Nutzer die Berechtigung ablehnen können. Wenn Nutzer den Hintergrund ablehnen Standortzugriff haben, sollten sie deine App weiterhin verwenden können.
<ph type="x-smartling-placeholder">
</ph> Nutzer können auf die Systembenachrichtigung tippen, um den Standort zu ändern
  Einstellungen für eine App <ph type="x-smartling-placeholder">
</ph> Abbildung 8: Benachrichtigung, die den Nutzer daran erinnert, Zugriff auf die Standortermittlung im Hintergrund.

App ist auf Android 10 oder niedriger ausgerichtet

Wenn eine Funktion Ihrer App Zugriff auf die Standortermittlung im Hintergrund anfordert, sehen Nutzer eine Systemdialogfeld. Dieses Dialogfeld enthält eine Option, mit der du zum Standort der App wechseln kannst auf einer Einstellungsseite.

Solange Ihre App bereits den Best Practices für die Anforderung des Standorts entspricht müssen Sie 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, Die Einstellungen im Dialogfeld für die Berechtigungen zur Standortermittlung gelten auch für die Standortermittlung im Hintergrund. In Wenn der Nutzer Ihrer App die Berechtigung „ACCESS_BACKGROUND_LOCATION“ gewährt, gewährt, aber im Vordergrund nur den ungefähren Standortzugriff gewährt, -App auch im Hintergrund nur die ungefähre Standortermittlung verfügbar ist.

Erinnerung zur Gewährung der Standortermittlung im Hintergrund

Wenn eine Funktion Ihrer App unter Android 10 und höher auf den Gerätestandort zugreift, Hintergrund beim ersten Mal, nachdem der Nutzer die Standortermittlung im Hintergrund gewährt hat festgelegt wurde, plant das System eine Benachrichtigung, die an den Nutzer gesendet wird. Dieses Benachrichtigung erinnert den Nutzer daran, dass er deiner App den Zugriff auf das Gerät erlaubt hat immer auf den Standort zugreifen. 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 die Berechtigung ACCESS_FINE_LOCATION. Lesen Sie diesen Artikel auf Medium über das Verhalten Ihres SDK kennenlernen Abhängigkeiten.

Weitere Informationen

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

Codelabs

Videos

Produktproben

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