Standortaktualisierungen in Android mit Kotlin erhalten

1. Hinweis

Unter Android 10 und 11 haben Nutzer mehr Kontrolle über den Zugriff von Apps auf den Gerätestandort.

Wenn eine App unter Android 11 den Standortzugriff anfordert, haben Nutzer vier Optionen:

  • Immer zulassen
  • Zugriff nur während der Nutzung der App zulassen (in Android 10)
  • Einmalig (in Android 11)
  • Ablehnen

Android 10

6a1029175b467c77.png

Android 11

73d8cc88c5877c25.png

In diesem Codelab erfahren Sie, wie Sie Standortupdates empfangen und Standortdienste in jeder Android-Version, insbesondere in Android 10 und 11, unterstützen. Am Ende des Codelabs haben Sie eine App, die den aktuellen Best Practices für das Abrufen von Standortupdates entspricht.

Voraussetzungen

Aufgaben

  • Halten Sie sich an die Best Practices für die Standortermittlung in Android.
  • Berechtigungen für den Standort im Vordergrund verarbeiten (wenn der Nutzer anfordert, dass Ihre App auf den Gerätestandort zugreift, während sie verwendet wird).
  • Ändern Sie eine vorhandene App, um Unterstützung für das Anfordern des Standorts hinzuzufügen. Fügen Sie dazu Code zum Abonnieren und Abbestellen des Standorts hinzu.
  • Fügen Sie der App Unterstützung für Android 10 und 11 hinzu, indem Sie Logik für den Zugriff auf den Standort im Vordergrund oder während der Nutzung hinzufügen.

Voraussetzungen

  • Android Studio 3.4 oder höher zum Ausführen des Codes
  • Ein Gerät oder Emulator mit einer Entwicklervorschau von Android 10 und 11

2. Erste Schritte

Repository des Starterprojekts klonen

Um Ihnen den Einstieg zu erleichtern, können Sie auf diesem Starterprojekt aufbauen. Wenn Sie Git installiert haben, können Sie einfach den folgenden Befehl ausführen:

 git clone https://github.com/android/codelab-while-in-use-location

Sie können auch direkt die GitHub-Seite aufrufen.

Wenn Sie Git nicht haben, können Sie das Projekt als ZIP-Datei herunterladen:

Projekt importieren

Öffnen Sie Android Studio, wählen Sie auf dem Begrüßungsbildschirm Open an existing Android Studio project (Vorhandenes Android Studio-Projekt öffnen) aus und öffnen Sie das Projektverzeichnis.

Nachdem das Projekt geladen wurde, wird möglicherweise auch eine Warnung angezeigt, dass Git nicht alle Ihre lokalen Änderungen verfolgt. Klicken Sie auf Ignorieren. Sie übertragen keine Änderungen zurück an das Git-Repository.

Wenn Sie sich in der Ansicht Android befinden, sollte links oben im Projektfenster etwas wie im Bild unten zu sehen sein. Wenn Sie sich in der Ansicht Projekt befinden, müssen Sie das Projekt maximieren, um dasselbe zu sehen.

fa825dae96c5dc18.png

Es gibt zwei Ordner (base und complete), die jeweils als „Modul“ bezeichnet werden.

Beachten Sie, dass es einige Sekunden dauern kann, bis Android Studio das Projekt zum ersten Mal im Hintergrund kompiliert hat. In dieser Zeit wird in der Statusleiste unten in Android Studio die folgende Meldung angezeigt:

c2273e7835c0841a.png

Warten Sie, bis Android Studio das Projekt indexiert und erstellt hat, bevor Sie Codeänderungen vornehmen. Dadurch kann Android Studio alle erforderlichen Komponenten abrufen.

Wenn Sie aufgefordert werden, die Seite neu zu laden, damit die Sprachänderungen wirksam werden, wählen Sie Ja aus.

Startprojekt kennenlernen

Sie haben alles eingerichtet und können jetzt den Standort in der App anfordern. Verwenden Sie das Modul base als Ausgangspunkt. Fügen Sie in jedem Schritt Code zum base-Modul hinzu. Wenn Sie dieses Codelab abgeschlossen haben, sollte der Code im Modul base mit dem Inhalt des Moduls complete übereinstimmen. Das complete-Modul kann verwendet werden, um Ihre Arbeit zu überprüfen oder als Referenz, wenn Probleme auftreten.

Zu den wichtigsten Komponenten gehören:

  • MainActivity– Benutzeroberfläche für den Nutzer, um der App den Zugriff auf den Gerätestandort zu erlauben
  • LocationService: Ein Dienst, der Standortänderungen abonnieren und abbestellen kann und sich selbst zu einem Dienst im Vordergrund (mit einer Benachrichtigung) hochstuft, wenn der Nutzer die Aktivität der App verlässt. Hier fügen Sie den Standortcode hinzu.
  • Util: Fügt Erweiterungsfunktionen für die Klasse Location hinzu und speichert den Standort in SharedPreferences (vereinfachte Datenschicht).

Einrichtung des Emulators

Informationen zum Einrichten eines Android-Emulators finden Sie unter Auf einem Emulator ausführen.

Startprojekt ausführen

Führen Sie die App aus.

  1. Verbinden Sie Ihr Android-Gerät mit dem Computer oder starten Sie einen Emulator. Auf dem Gerät muss Android 10 oder höher installiert sein.
  2. Wählen Sie in der Symbolleiste die Konfiguration base aus dem Drop-down-Menü aus und klicken Sie auf Ausführen:

99600e9d44527ab.png

  1. Die folgende App wird auf Ihrem Gerät angezeigt:

99bf1dae46f99af3.png

Möglicherweise stellen Sie fest, dass auf dem Ausgabebildschirm keine Standortinformationen angezeigt werden. Das liegt daran, dass Sie den Standortcode noch nicht hinzugefügt haben.

3. Standort hinzufügen

Konzepte

In diesem Codelab wird gezeigt, wie Sie Standortaktualisierungen empfangen und schließlich Android 10 und Android 11 unterstützen.

Bevor Sie mit dem Programmieren beginnen, sollten Sie sich jedoch die Grundlagen ansehen.

Arten des Standortzugriffs

Vielleicht erinnern Sie sich noch an die vier verschiedenen Optionen für den Standortzugriff vom Anfang des Codelabs. Hier sehen Sie, was sie bedeuten:

  • Zugriff nur während der Nutzung der App zulassen
  • Diese Option wird für die meisten Apps empfohlen. Diese Option, die auch als „Zugriff nur während der Nutzung der App“ oder „Nur im Vordergrund“ bezeichnet wird, wurde in Android 10 eingeführt und ermöglicht es Entwicklern, den Standort nur abzurufen, wenn die App aktiv verwendet wird. Eine App gilt als aktiv, wenn eine der folgenden Bedingungen zutrifft:
  • Eine Aktivität ist sichtbar.
  • Ein Dienst im Vordergrund wird mit einer laufenden Benachrichtigung ausgeführt.
  • Nur einmal
  • Diese Option wurde in Android 11 eingeführt und entspricht Zugriff nur während der Nutzung der App zulassen, jedoch für einen begrenzten Zeitraum. Weitere Informationen finden Sie unter Einmalberechtigungen.
  • Ablehnen
  • Diese Option verhindert den Zugriff auf Standortinformationen.
  • Immer zulassen
  • Mit dieser Option ist der Standortzugriff jederzeit möglich. Für Android 10 und höher ist jedoch eine zusätzliche Berechtigung erforderlich. Außerdem müssen Sie einen gültigen Anwendungsfall haben und die Standortrichtlinien einhalten. Diese Option wird in diesem Codelab nicht behandelt, da sie seltener verwendet wird. Wenn Sie jedoch einen gültigen Anwendungsfall haben und wissen möchten, wie Sie die Standortermittlung zu jeder Zeit richtig handhaben, einschließlich des Zugriffs auf den Standort im Hintergrund, sehen Sie sich das LocationUpdatesBackgroundKotlin-Beispiel an.

Dienste, Dienste im Vordergrund und Binding

Damit Sie Standortaktualisierungen für Zugriff nur während der Nutzung der App zulassen vollständig unterstützen können, müssen Sie berücksichtigen, wenn der Nutzer die App verlässt. Wenn Sie in diesem Fall weiterhin Aktualisierungen erhalten möchten, müssen Sie einen Service im Vordergrund erstellen und ihn mit einem Notification verknüpfen.

Wenn Sie außerdem dieselbe Service verwenden möchten, um Standortaktualisierungen anzufordern, wenn Ihre App sichtbar ist und wenn der Nutzer die App verlässt, müssen Sie diese Service an das UI-Element binden bzw. die Bindung aufheben.

Da sich dieses Codelab nur auf das Abrufen von Standortaktualisierungen konzentriert, finden Sie den gesamten benötigten Code in der Klasse ForegroundOnlyLocationService.kt. Sie können sich den Kurs und die MainActivity.kt ansehen, um zu sehen, wie sie zusammenarbeiten.

Weitere Informationen finden Sie unter Übersicht über Dienste und Übersicht über gebundene Dienste.

Berechtigungen

Wenn Sie Standortaktualisierungen von einem NETWORK_PROVIDER oder GPS_PROVIDER erhalten möchten, müssen Sie die Einwilligung des Nutzers einholen, indem Sie die Berechtigung ACCESS_COARSE_LOCATION bzw. ACCESS_FINE_LOCATION in Ihrer Android-Manifestdatei deklarieren. Ohne diese Berechtigungen kann Ihre App zur Laufzeit keinen Zugriff auf den Standort anfordern.

Diese Berechtigungen decken die Fälle Einmalig und Zugriff nur während der Nutzung der App zulassen ab, wenn Ihre App auf einem Gerät mit Android 10 oder höher verwendet wird.

Standort

Ihre App kann über Klassen im Paket com.google.android.gms.location auf die unterstützten Standortdienste zugreifen.

Sehen Sie sich die Hauptklassen an:

  • FusedLocationProviderClient
  • Dies ist die zentrale Komponente des Standort-Frameworks. Nachdem Sie ihn erstellt haben, können Sie ihn verwenden, um Standortaktualisierungen anzufordern und den zuletzt bekannten Standort abzurufen.
  • LocationRequest
  • Dies ist ein Datenobjekt, das QoS-Parameter für Anfragen enthält (Intervalle für Updates, Prioritäten und Genauigkeit). Dieser Wert wird an FusedLocationProviderClient übergeben, wenn Sie Standortaktualisierungen anfordern.
  • LocationCallback
  • Diese Adresse wird verwendet, um Benachrichtigungen zu erhalten, wenn sich der Standort des Geräts geändert hat oder nicht mehr ermittelt werden kann. Hier wird ein LocationResult übergeben, aus dem Sie das Location abrufen können, um es in Ihrer Datenbank zu speichern.

Nachdem Sie nun eine grundlegende Vorstellung davon haben, was Sie tun, können Sie mit dem Code beginnen.

4. Standortfunktionen hinzufügen

In diesem Codelab geht es um die häufigste Standortoption: Zugriff nur während der Nutzung der App zulassen.

Damit Ihre App Standortaktualisierungen erhalten kann, muss sie entweder eine sichtbare Aktivität oder einen Dienst im Vordergrund (mit einer Benachrichtigung) haben.

Berechtigungen

In diesem Codelab geht es darum, wie Sie Standortaktualisierungen empfangen, nicht darum, wie Sie Standortberechtigungen anfordern. Der berechtigungsbasierte Code ist daher bereits für Sie geschrieben. Wenn Sie sich damit bereits auskennen, können Sie diesen Abschnitt überspringen.

Hier sind die wichtigsten Berechtigungen (für diesen Abschnitt sind keine Maßnahmen erforderlich):

  1. Geben Sie an, welche Berechtigung Sie in AndroidManifest.xml verwenden.
  2. Bevor Sie versuchen, auf Standortinformationen zuzugreifen, prüfen Sie, ob der Nutzer Ihrer App die Berechtigung dazu erteilt hat. Wenn Ihre App noch keine Berechtigung erhalten hat, fordern Sie den Zugriff an.
  3. Die Berechtigungsauswahl des Nutzers verarbeiten Diesen Code finden Sie in der MainActivity.kt.

Wenn Sie in AndroidManifest.xml oder MainActivity.kt nach TODO: Step 1.0, Review Permissions suchen, sehen Sie den gesamten Code, der für Berechtigungen geschrieben wurde.

Weitere Informationen finden Sie unter Berechtigungen.

Schreiben Sie nun etwas Code für den Standort.

Wichtige Variablen für Standortaktualisierungen ansehen

Suchen Sie im Modul base imTODO: Step 1.1, Review variables

Datei ForegroundOnlyLocationService.kt.

In diesem Schritt sind keine Maßnahmen erforderlich. Sie müssen sich nur den folgenden Codeblock und die Kommentare ansehen, um die wichtigsten Klassen und Variablen zu verstehen, die Sie zum Empfangen von Standortaktualisierungen verwenden.

// TODO: Step 1.1, Review variables (no changes).
// FusedLocationProviderClient - Main class for receiving location updates.
private lateinit var fusedLocationProviderClient: FusedLocationProviderClient

// LocationRequest - Requirements for the location updates, i.e., how often you
// should receive updates, the priority, etc.
private lateinit var locationRequest: LocationRequest

// LocationCallback - Called when FusedLocationProviderClient has a new Location.
private lateinit var locationCallback: LocationCallback

// Used only for local storage of the last known location. Usually, this would be saved to your
// database, but because this is a simplified sample without a full database, we only need the
// last location to create a Notification if the user navigates away from the app.
private var currentLocation: Location? = null

Initialisierung von FusedLocationProviderClient überprüfen

Suchen Sie im Modul base in der Datei ForegroundOnlyLocationService.kt nach TODO: Step 1.2, Review the FusedLocationProviderClient. Ihr Code sollte in etwa so aussehen:

// TODO: Step 1.2, Review the FusedLocationProviderClient.
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this)

Wie in den vorherigen Kommentaren erwähnt, ist dies die Hauptklasse zum Abrufen von Standortaktualisierungen. Die Variable wird bereits für Sie initialisiert. Es ist jedoch wichtig, den Code zu prüfen, um zu verstehen, wie sie initialisiert wird. Später fügen Sie hier Code hinzu, um Standortaktualisierungen anzufordern.

LocationRequest initialisieren

  1. Suchen Sie im Modul base in der Datei ForegroundOnlyLocationService.kt nach TODO: Step 1.3, Create a LocationRequest.
  2. Fügen Sie den folgenden Code nach dem Kommentar ein.

Der Initialisierungscode LocationRequest fügt die zusätzlichen QoS-Parameter hinzu, die für Ihre Anfrage erforderlich sind (Intervalle, maximale Wartezeit und Priorität).

// TODO: Step 1.3, Create a LocationRequest.
locationRequest = LocationRequest.create().apply {
   // Sets the desired interval for active location updates. This interval is inexact. You
   // may not receive updates at all if no location sources are available, or you may
   // receive them less frequently than requested. You may also receive updates more
   // frequently than requested if other applications are requesting location at a more
   // frequent interval.
   //
   // IMPORTANT NOTE: Apps running on Android 8.0 and higher devices (regardless of
   // targetSdkVersion) may receive updates less frequently than this interval when the app
   // is no longer in the foreground.
   interval = TimeUnit.SECONDS.toMillis(60)

   // Sets the fastest rate for active location updates. This interval is exact, and your
   // application will never receive updates more frequently than this value.
   fastestInterval = TimeUnit.SECONDS.toMillis(30)

   // Sets the maximum time when batched location updates are delivered. Updates may be
   // delivered sooner than this interval.
   maxWaitTime = TimeUnit.MINUTES.toMillis(2)

   priority = LocationRequest.PRIORITY_HIGH_ACCURACY
}
  1. Lesen Sie die Kommentare, um zu verstehen, wie die einzelnen Funktionen funktionieren.

LocationCallback initialisieren

  1. Suchen Sie im Modul base in der Datei ForegroundOnlyLocationService.kt nach TODO: Step 1.4, Initialize the LocationCallback.
  2. Fügen Sie den folgenden Code nach dem Kommentar ein.
// TODO: Step 1.4, Initialize the LocationCallback.
locationCallback = object : LocationCallback() {
    override fun onLocationResult(locationResult: LocationResult) {
        super.onLocationResult(locationResult)

        // Normally, you want to save a new location to a database. We are simplifying
        // things a bit and just saving it as a local variable, as we only need it again
        // if a Notification is created (when the user navigates away from app).
        currentLocation = locationResult.lastLocation

        // Notify our Activity that a new location was added. Again, if this was a
        // production app, the Activity would be listening for changes to a database
        // with new locations, but we are simplifying things a bit to focus on just
        // learning the location side of things.
        val intent = Intent(ACTION_FOREGROUND_ONLY_LOCATION_BROADCAST)
        intent.putExtra(EXTRA_LOCATION, currentLocation)
        LocalBroadcastManager.getInstance(applicationContext).sendBroadcast(intent)

        // Updates notification content if this service is running as a foreground
        // service.
        if (serviceRunningInForeground) {
            notificationManager.notify(
                NOTIFICATION_ID,
                generateNotification(currentLocation))
        }
    }
}

Die LocationCallback, die Sie hier erstellen, ist der Callback, den die FusedLocationProviderClient aufruft, wenn ein neues Standortupdate verfügbar ist.

In Ihrem Callback rufen Sie zuerst den aktuellen Standort mit einem LocationResult-Objekt ab. Danach benachrichtigen Sie Ihre Activity über den neuen Standort. Das kann über einen lokalen Broadcast (falls aktiv) oder durch Aktualisieren der Notification erfolgen, wenn der Dienst als Service im Vordergrund ausgeführt wird.

  1. Lesen Sie die Kommentare, um zu verstehen, was die einzelnen Teile bewirken.

Ortsänderungen abonnieren

Nachdem Sie alles initialisiert haben, müssen Sie FusedLocationProviderClient mitteilen, dass Sie Updates erhalten möchten.

  1. Suchen Sie im Modul base in der Datei ForegroundOnlyLocationService.kt nach Step 1.5, Subscribe to location changes.
  2. Fügen Sie den folgenden Code nach dem Kommentar ein.
// TODO: Step 1.5, Subscribe to location changes.
fusedLocationProviderClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper())

Mit dem requestLocationUpdates()-Aufruf wird FusedLocationProviderClient mitgeteilt, dass Sie Standortaktualisierungen erhalten möchten.

Sie erkennen wahrscheinlich die LocationRequest und LocationCallback, die Sie zuvor definiert haben. Damit werden FusedLocationProviderClient die QoS-Parameter für Ihre Anfrage mitgeteilt und es wird angegeben, was aufgerufen werden soll, wenn es ein Update gibt. Schließlich gibt das Looper-Objekt den Thread für den Callback an.

Außerdem sehen Sie, dass sich dieser Code in einer try/catch-Anweisung befindet. Diese Methode erfordert einen solchen Block, da ein SecurityException auftritt, wenn Ihre App keine Berechtigung für den Zugriff auf Standortinformationen hat.

Benachrichtigungen zu Standortänderungen abbestellen

Wenn die App keinen Zugriff mehr auf Standortinformationen benötigt, ist es wichtig, dass Sie die Standortupdates abbestellen.

  1. Suchen Sie im Modul base in der Datei ForegroundOnlyLocationService.kt nach TODO: Step 1.6, Unsubscribe to location changes.
  2. Fügen Sie den folgenden Code nach dem Kommentar ein.
// TODO: Step 1.6, Unsubscribe to location changes.
val removeTask = fusedLocationProviderClient.removeLocationUpdates(locationCallback)
removeTask.addOnCompleteListener { task ->
   if (task.isSuccessful) {
       Log.d(TAG, "Location Callback removed.")
       stopSelf()
   } else {
       Log.d(TAG, "Failed to remove Location Callback.")
   }
}

Mit der Methode removeLocationUpdates() wird eine Aufgabe eingerichtet, mit der FusedLocationProviderClient mitgeteilt wird, dass Sie keine Standortaktualisierungen mehr für Ihr LocationCallback erhalten möchten. addOnCompleteListener() gibt den Callback für den Abschluss an und führt Task aus.

Wie beim vorherigen Schritt ist dieser Code in einer try/catch-Anweisung enthalten. Diese Methode erfordert einen solchen Block, da ein SecurityException auftritt, wenn Ihre App keine Berechtigung für den Zugriff auf Standortinformationen hat.

Sie fragen sich vielleicht, wann die Methoden aufgerufen werden, die den Code zum Abonnieren/Kündigen enthalten. Sie werden in der Hauptklasse ausgelöst, wenn der Nutzer auf die Schaltfläche tippt. Wenn Sie es sehen möchten, sehen Sie sich den Kurs MainActivity.kt an.

App ausführen

Führen Sie Ihre App in Android Studio aus und probieren Sie die Schaltfläche für den Standort aus.

Auf dem Ausgabebildschirm sollten Standortinformationen angezeigt werden. Dies ist eine voll funktionsfähige App für Android 9.

2ae45c4e297e3681.png

d66089bfb532e993.png

5. Unterstützung von Android 10

In diesem Abschnitt fügen Sie Unterstützung für Android 10 hinzu.

Ihre App abonniert bereits Standortänderungen. Sie müssen also nicht viel tun.

Sie müssen lediglich angeben, dass Ihr Dienst im Vordergrund für Standortzwecke verwendet wird.

Ziel-SDK 29

  1. Suchen Sie im Modul base in der Datei build.gradle nach TODO: Step 2.1, Target Android 10 and then Android 11..
  2. Nehmen Sie die folgenden Änderungen vor:
  3. Setzen Sie targetSdkVersion auf 29.

Ihr Code sollte in etwa so aussehen:

android {
   // TODO: Step 2.1, Target Android 10 and then Android 11.
   compileSdkVersion 29
   defaultConfig {
       applicationId "com.example.android.whileinuselocation"
       minSdkVersion 26
       targetSdkVersion 29
       versionCode 1
       versionName "1.0"
   }
...
}

Danach werden Sie aufgefordert, Ihr Projekt zu synchronisieren. Klicke auf Jetzt synchronisieren.

153f70847e0ec320.png

Danach ist Ihre App fast bereit für Android 10.

Diensttyp im Vordergrund hinzufügen

In Android 10 müssen Sie den Typ Ihres Diensts im Vordergrund angeben, wenn Sie Zugriff auf den Standort benötigen, während die App verwendet wird. In Ihrem Fall wird sie verwendet, um Standortinformationen abzurufen.

Suchen Sie im Modul base in AndroidManifest.xml nach TODO: 2.2, Add foreground service type und fügen Sie dem Element <service> den folgenden Code hinzu:

android:foregroundServiceType="location"

Ihr Code sollte in etwa so aussehen:

<application>
   ...

   <!-- Foreground services in Android 10+ require type. -->
   <!-- TODO: 2.2, Add foreground service type. -->
   <service
       android:name="com.example.android.whileinuselocation.ForegroundOnlyLocationService"
       android:enabled="true"
       android:exported="false"
       android:foregroundServiceType="location" />
</application>

Geschafft! Ihre App unterstützt die Standortermittlung in Android 10 während der Nutzung und entspricht den Best Practices für die Standortermittlung in Android.

App ausführen

Führen Sie Ihre App in Android Studio aus und probieren Sie die Schaltfläche für den Standort aus.

Alles sollte wie zuvor funktionieren, aber jetzt auch unter Android 10. Wenn Sie die Berechtigungen für Standorte noch nicht akzeptiert haben, sollte der Berechtigungsbildschirm jetzt angezeigt werden.

6a1029175b467c77.png

c7c1d226e49a121.png

39a262b66a275f66.png

6. Unterstützung von Android 11

In diesem Abschnitt richten Sie Ihre App auf Android 11 aus.

Gute Neuigkeiten: Sie müssen nur die Datei build.gradle ändern.

Ziel-SDK 11

  1. Suchen Sie im Modul base in der Datei build.gradle nach TODO: Step 2.1, Target SDK.
  2. Nehmen Sie die folgenden Änderungen vor:
  3. compileSdkVersion nach 30
  4. targetSdkVersion nach 30

Ihr Code sollte in etwa so aussehen:

android {
   TODO: Step 2.1, Target Android 10 and then Android 11.
   compileSdkVersion 30
   defaultConfig {
       applicationId "com.example.android.whileinuselocation"
       minSdkVersion 26
       targetSdkVersion 30
       versionCode 1
       versionName "1.0"
   }
...
}

Danach werden Sie aufgefordert, Ihr Projekt zu synchronisieren. Klicke auf Jetzt synchronisieren.

153f70847e0ec320.png

Danach ist Ihre App bereit für Android 11.

App ausführen

Führen Sie Ihre App in Android Studio aus und klicken Sie auf die Schaltfläche.

Alles sollte wie zuvor funktionieren, aber jetzt auch unter Android 11. Wenn Sie die Berechtigungen für Standorte noch nicht akzeptiert haben, sollte der Berechtigungsbildschirm jetzt angezeigt werden.

73d8cc88c5877c25.png

cc98fac6e089bc4.png

7. Standortstrategien für Android

Wenn Sie die Berechtigungen zur Standortermittlung auf die in diesem Codelab gezeigte Weise prüfen und anfordern, kann Ihre App den Zugriff auf den Gerätestandort erfolgreich nachverfolgen.

Auf dieser Seite werden einige wichtige Best Practices für Standortberechtigungen aufgeführt. Weitere Informationen zum Schutz der Daten Ihrer Nutzer finden Sie unter Best Practices für App-Berechtigungen.

Nur die Berechtigungen anfordern, die Sie benötigen

Berechtigungen nur bei Bedarf anfordern Beispiel:

  • Fordern Sie beim Start der App nur dann eine Berechtigung zur Standortermittlung an, wenn dies unbedingt erforderlich ist.
  • Wenn Ihre App auf Android 10 oder höher ausgerichtet ist und Sie einen Dienst im Vordergrund verwenden, deklarieren Sie im Manifest ein foregroundServiceType von "location".
  • Fordern Sie keine Berechtigungen zur Standortermittlung im Hintergrund an, es sei denn, Sie haben einen gültigen Anwendungsfall, wie unter Sicherer und transparenter Zugriff auf den Standort von Nutzern beschrieben.

Graceful Degradation unterstützen, wenn die Berechtigung nicht erteilt wird

Damit die Nutzerfreundlichkeit nicht beeinträchtigt wird, sollte Ihre App so konzipiert sein, dass sie die folgenden Situationen problemlos bewältigen kann:

  • Ihre App hat keinen Zugriff auf Standortinformationen.
  • Ihre App hat keinen Zugriff auf Standortinformationen, wenn sie im Hintergrund ausgeführt wird.

8. Glückwunsch

Sie haben gelernt, wie Sie Standortaktualisierungen in Android erhalten und dabei Best Practices berücksichtigen.

Weitere Informationen