Standortaktualisierungen mit Android mit Kotlin erhalten

Mit Android 10 und 11 haben Nutzer mehr Kontrolle über ihre Apps & Zugriff auf ihren Gerätestandort.

Wenn eine App unter Android 11 den Standortzugriff anfordert, haben Nutzer vier Möglichkeiten:

  • Immer zulassen
  • Nur während der Nutzung der App zulassen (in Android 10)
  • Nur einmal (in Android 11)
  • Ablehnen

Android 10

Android 11

In diesem Codelab erfährst du, wie du auf jedem Android-Gerät, insbesondere Android 10 und 11, Standortupdates erhältst und den Standort unterstützt. Am Ende des Codelabs kannst du davon ausgehen, dass eine App den aktuellen Best Practices für das Abrufen von Standortaktualisierungen entspricht.

Voraussetzungen

Aufgabe

  • Folge den Best Practices für den Standort in Android.
  • Du kannst die Berechtigungen zur Standortermittlung im Vordergrund verarbeiten, wenn der Nutzer anfordert, dass deine App auf den Gerätestandort zugreift, während deine App verwendet wird.
  • Ändern Sie eine vorhandene App, um Unterstützung für die Anforderung des Standortzugriffs zu unterstützen. Fügen Sie dazu Code zum Abonnieren und Abbestellen des Standorts hinzu.
  • Unterstützung für die App für Android 10 und 11 wird hinzugefügt, indem eine Logik für den Zugriff auf die Standortermittlung im Vordergrund oder während der Verwendung hinzugefügt wird.

Voraussetzungen

  • Android Studio 3.4 oder höher zur Ausführung des Codes
  • Ein Gerät oder einen Emulator mit einer Entwicklervorschau für Android 10 und 11

Start-Projekt-Repository klonen

Damit Sie so schnell wie möglich loslegen können, können Sie auf diesem Startprojekt aufbauen. Wenn Sie Git installiert haben, können Sie einfach den folgenden Befehl ausführen:

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

Rufen Sie die GitHub-Seite direkt auf.

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

ZIP herunterladen

Projekt importieren

Öffnen Sie Android Studio, wählen Sie Vorhandenes Android Studio-Projekt öffnen und öffnen Sie das Projektverzeichnis.

Nach dem Laden des Projekts wird möglicherweise auch die Meldung angezeigt, dass Git nicht alle lokalen Änderungen erfasst. Sie können auf Ignorieren klicken. Sie werden dann keine Änderungen mehr an das Git-Repository übertragen.

Wenn Sie die Ansicht Android verwenden, sollte links oben im Projektfenster ein Bild wie unten zu sehen sein. In der Ansicht Projekt müssen Sie das Projekt maximieren, um alle Ergebnisse sehen zu können.

Es gibt zwei Ordner (base und complete). Jeder Ordner wird als „Modul“&" bezeichnet.

Es kann einige Sekunden dauern, bis Android Studio das Projekt im Hintergrund kompiliert. Während dieser Zeit wird unten in Android Studio in der Statusleiste die folgende Meldung angezeigt:

Warten Sie, bis Android Studio die Indexierung abgeschlossen und das Projekt erstellt hat, bevor Sie Codeänderungen vornehmen. So kann Android Studio alle erforderlichen Komponenten abrufen.

Wenn Sie die Aufforderung Neu laden für Sprachänderungen? erhalten, wählen Sie Ja aus.

Starter-Projekt verstehen

Sie sind jetzt eingerichtet und können die Standortermittlung in der App anfordern. Verwenden Sie das Modul base als Ausgangspunkt. Fügen Sie in jedem Schritt Code zum base-Modul hinzu. Wenn du das Codelab abgeschlossen hast, sollte der Code im base-Modul mit dem Inhalt des complete-Moduls übereinstimmen. Das complete-Modul kann verwendet werden, um Ihre Arbeit zu prüfen oder Sie als Referenz zu verwenden, falls Probleme auftreten.

Die wichtigsten Komponenten sind:

  • MainActivity: Über die Benutzeroberfläche kann der Nutzer auf den Standort des Geräts zugreifen.
  • LocationService: Dienst, der Standortänderungen abonniert und abmeldet und sich zu einem Vordergrunddienst (mit Benachrichtigung) hochlädt, wenn der Nutzer die App-Aktivität verlässt. Sie fügen hier den Standortcode hinzu.
  • Util: Fügt Erweiterungsfunktionen für die Klasse Location hinzu und speichert den Standort in SharedPreferences (vereinfachte Datenschicht).

Emulator-Einrichtung

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

Startprojekt ausführen

Führe deine App aus.

  1. Verbinde dein Android-Gerät mit deinem Computer oder starte einen Emulator. (Auf dem Gerät muss Android 10 oder höher installiert sein.)
  2. Wählen Sie in der Symbolleiste aus der Drop-down-Auswahl die Konfiguration base aus und klicken Sie auf Ausführen:


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


Möglicherweise stellen Sie fest, dass auf dem Ausgabebildschirm keine Standortinformationen angezeigt werden. Das ist, weil du den Standortcode noch nicht hinzugefügt hast.

Konzepte

In diesem Codelab erfährst du, wie du Standortaktualisierungen erhältst und schließlich Android 10 und Android 11 unterstützt.

Bevor Sie aber mit dem Programmieren loslegen, sollten Sie sich die Grundlagen ansehen.

Arten des Standortzugriffs

Es gibt vier verschiedene Möglichkeiten, den Standortzugriff zu Beginn des Codelabs zu nutzen. Im Folgenden erfahren Sie, was die Begriffe bedeuten:

  • Zugriff nur während der Nutzung der App zulassen
  • Diese Option wird für die meisten Apps empfohlen. Wird auch als „Während der Nutzung“ oder „Nur Vordergrund“ bezeichnet. Diese Option wurde in Android 10 hinzugefügt und ermöglicht es Entwicklern, den Standort nur während einer aktiven Nutzung der App abzurufen. Eine App gilt als aktiv, wenn einer der folgenden Punkte zutrifft:
  • Eine Aktivität ist sichtbar.
  • Ein Vordergrunddienst wird mit einer laufenden Benachrichtigung ausgeführt.
  • Nur einmal
  • In Android 11 ist dies der gleiche Status wie Nur bei Verwendung der App zulassen, aber nur für begrenzte Zeit. Weitere Informationen finden Sie unter Einmalige Berechtigungen.
  • Ablehnen
  • Mit dieser Option wird der Zugriff auf Standortinformationen verhindert.
  • Immer zulassen
  • Bei dieser Option können Sie jederzeit auf den Standort zugreifen. Android 10 und höher erfordert jedoch eine zusätzliche Berechtigung. Außerdem müssen Sie einen gültigen Anwendungsfall haben und die Standortrichtlinien einhalten. In diesem Codelab werden Sie diese Option nicht behandeln, da sie ein seltener Anwendungsfall ist. Wenn Sie einen gültigen Anwendungsfall haben und wissen möchten, wie Sie den Echtzeitstandort sämtliche Anforderungen umgehen, einschließlich der Standortermittlung im Hintergrund, sehen Sie sich das LocationUpdatesBackgroundKotlin-Beispiel an.

Dienste, Vordergrunddienste und Bindung

Damit die Updates für den Standort Nur bei Verwendung der App zulassen vollständig unterstützt werden, müssen Sie berücksichtigen, wann der Nutzer die App verlässt. Wenn Sie in diesem Fall weiterhin Updates erhalten möchten, müssen Sie ein Service im Vordergrund erstellen und es mit einem Notification verknüpfen.

Wenn du dieselbe Service verwenden möchtest, um Standortaktualisierungen anzufordern, wenn deine App sichtbar ist und der Nutzer die App verlässt, musst du diese Service an das UI-Element binden bzw. die Verknüpfung aufheben.

Da dieses Codelab nur zum Abrufen von Standortaktualisierungen dient, finden Sie den gesamten Code bei der Klasse ForegroundOnlyLocationService.kt. Sie können sich die einzelnen Kurse und MainActivity.kt ansehen, um zu sehen, wie sie zusammen funktionieren.

Weitere Informationen finden Sie unter Überblick über die Dienste und Überblick über eingeschränkte Dienste.

Berechtigungen

Wenn Sie Standortaktualisierungen von einem NETWORK_PROVIDER oder GPS_PROVIDER erhalten möchten, müssen Sie die Berechtigung des Nutzers anfordern, indem Sie die Berechtigung ACCESS_COARSE_LOCATION bzw. ACCESS_FINE_LOCATION in Ihrer Android-Manifestdatei deklarieren. Ohne diese Berechtigungen kann deine App den Zugriff auf den Standort während der Laufzeit nicht anfordern.

Diese Berechtigungen gelten für die Fälle Nur einmal und Zulassen, während die App verwendet wird, wenn Ihre App auf einem Gerät mit Android 10 oder höher verwendet wird.

Standort

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

Sehen Sie sich die wichtigsten Kurse an:

  • FusedLocationProviderClient
  • Dies ist die zentrale Komponente des Standort-Frameworks. Nach dessen Erstellung kannst du Standortaktualisierungen anfordern und den letzten bekannten Standort abrufen.
  • LocationRequest
  • Dieses Datenobjekt enthält Parameter für die Qualität der Anfragen (Intervalle für Aktualisierungen, Prioritäten und Genauigkeit). Diese wird an FusedLocationProviderClient übergeben, wenn du Standortaktualisierungen anfordert.
  • LocationCallback
  • Hiermit werden Benachrichtigungen gesendet, wenn sich der Gerätestandort geändert hat oder nicht mehr bestimmt werden kann. Diese Funktion wird an einen LocationResult übergeben, mit dem du das Location-Element in deiner Datenbank speichern kannst.

Da du jetzt eine grundlegende Vorstellung davon hast, was du machst, kannst du jetzt mit dem Code loslegen!

In diesem Codelab geht es um die am häufigsten verwendete Standortoption: Nur bei Verwendung der App zulassen.

Damit Sie die Standortaktualisierungen erhalten können, muss Ihre App entweder eine sichtbare Aktivität oder einen Dienst im Vordergrund (mit Benachrichtigung) haben.

Berechtigungen

In diesem Codelab erfährst du, wie du Standortaktualisierungen erhältst und nicht Berechtigungen zur Standortermittlung anforderst. Der berechtigungsbasierte Code wird also bereits für dich geschrieben. Wenn Sie sie bereits kennen, können Sie sie überspringen.

Im Folgenden finden Sie die Berechtigungshighlights. Für diesen Teil sind keine Aktionen erforderlich:

  1. Geben Sie an, welche Berechtigungen Sie in der AndroidManifest.xml verwenden.
  2. Bevor Sie auf Standortdaten zugreifen, sollten Sie prüfen, ob der Nutzer der App die Berechtigung hierfür erteilt hat. Wenn das noch nicht geschehen ist, fordern Sie den Zugriff an.
  3. Wähle die Berechtigungseinstellung des Nutzers aus. Diesen Code finden Sie in der MainActivity.kt.

Wenn du nach TODO: Step 1.0, Review Permissions in AndroidManifest.xml oder MainActivity.kt suchst, siehst du den gesamten Code, der für die Berechtigungen geschrieben wurde.

Weitere Informationen zu Berechtigungen

Beginnen Sie nun mit dem Schreiben eines Ortscodes.

Wichtige Variablen für Standortaktualisierungen prüfen

Suchen Sie im base-Modul nach TODO: Step 1.1, Review variables im

Datei ForegroundOnlyLocationService.kt.

In diesem Schritt sind keine Maßnahmen erforderlich. Sie müssen nur den folgenden Codeblock und die Kommentare lesen, 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

FusedLocationProviderClient-Initialisierung prüfen

Suchen Sie im base-Modul in der Datei ForegroundOnlyLocationService.kt nach TODO: Step 1.2, Review the FusedLocationProviderClient. Der Code sollte ungefähr so aussehen:

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

Wie in den vorherigen Kommentaren erwähnt, ist dies die Hauptklasse für die Aktualisierung des Standorts. Die Variable ist bereits initialisiert, jedoch ist es wichtig, den Code zu überprüfen, um zu verstehen, wie er initialisiert wird. Sie fügen später hier Code hinzu, um Standortaktualisierungen anzufordern.

LocationRequest initialisieren

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

Der Initialisierungscode LocationRequest fügt die zusätzliche Qualität von Dienstparametern hinzu, die für Ihre Anfrage erforderlich sind (Intervalle, maximale Wartezeit und Priorität).

// TODO: Step 1.3, Create a LocationRequest.
locationRequest = LocationRequest().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 sich die Kommentare durch, um zu verstehen, wie die einzelnen Funktionen funktionieren.

LocationCallback initialisieren

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

       if (locationResult?.lastLocation != null) {

           // 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 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))
           }
       } else {
           Log.d(TAG, "Location information isn't available.")
       }
   }
}

Der hier erstellte LocationCallback ist der Callback, den FusedLocationProviderClient aufruft, wenn ein neues Standortupdate verfügbar ist.

In Ihrem Callback erhalten Sie zuerst mit einem LocationResult-Objekt den aktuellen Standort. Anschließend benachrichtigen Sie Ihre Activity über den neuen Standort über eine lokale Übertragung (falls sie aktiv ist) oder aktualisieren die Notification, wenn dieser Dienst als Vordergrund-Service ausgeführt wird.

  1. Lies dir die Kommentare durch, um zu verstehen, was jeder Teil bewirkt.

Standortänderungen abonnieren

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

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

Mit dem requestLocationUpdates()-Aufruf wird FusedLocationProviderClient darüber informiert, dass du Standortaktualisierungen erhalten möchtest.

Wahrscheinlich kennen Sie die zuvor definierten LocationRequest und LocationCallback. Dadurch wissen die FusedLocationProviderClient, welche Qualitäts-Dienstparameter für deine Anfrage erforderlich sind und was ein Update aufrufen soll. Schließlich gibt das Objekt Looper den Thread für den Callback an.

Es gibt eventuell eine try/catch-Anweisung. Bei dieser Methode ist eine solche Blockierung erforderlich, da SecurityException auftritt, wenn Ihre App nicht auf Standortinformationen zugreifen darf.

Keine Standortänderungen mehr erhalten

Wenn die App keinen Zugriff mehr auf Standortinformationen benötigt, ist es wichtig, sich von Standortupdates abzumelden.

  1. Suchen Sie im base-Modul in der Datei ForegroundOnlyLocationService.kt nach TODO: Step 1.6, Unsubscribe to location changes.
  2. Fügen Sie nach dem Kommentar den folgenden Code hinzu.
// 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, um FusedLocationProviderClient zu informieren, dass du keine Standortupdates mehr für dein LocationCallback erhalten möchtest. addOnCompleteListener() gibt den Callback für die vollständige Ausführung aus und führt das Task-Objekt aus.

Wie im vorherigen Schritt hast du vielleicht festgestellt, dass dieser Code in einer try/catch-Anweisung enthalten ist. Bei dieser Methode ist eine solche Blockierung erforderlich, da die SecurityException stattfindet, wenn Ihre App nicht auf Standortinformationen zugreifen darf

Sie fragen sich vielleicht, wann die Methoden, die den Abo-/Abmeldecode enthalten, aufgerufen werden. Sie werden in der Hauptklasse ausgelöst, wenn der Nutzer auf die Schaltfläche tippt. Wenn Sie sie sehen möchten, sehen Sie sich den Kurs MainActivity.kt an.

App ausführen

Führe deine App über Android Studio aus und probiere die Standortschaltfläche aus.

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

In diesem Abschnitt unterstützen Sie Android 10.

Deine App abonniert bereits Standortänderungen, sodass du nicht viel zu tun hast.

Sie müssen nur angeben, dass Ihr Vordergrunddienst für die Standortbestimmung verwendet wird.

Ziel-SDK 29

  1. Suchen Sie im base-Modul in der Datei build.gradle nach TODO: Step 2.1, Target SDK 10.
  2. Nehmen Sie die folgenden Änderungen vor:
  1. Legen Sie compileSdkVersion auf 29 fest.
  2. Legen Sie buildToolsVersion auf "29.0.3" fest.
  3. Legen Sie targetSdkVersion auf 29 fest.

Der Code sollte ungefähr so aussehen:

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

Anschließend werden Sie aufgefordert, Ihr Projekt zu synchronisieren. Klicken Sie auf Jetzt synchronisieren.

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

Dienst im Vordergrund hinzufügen

In Android 10 musst du angeben, welche Art von Vordergrunddienst du benötigst, wenn du während der Nutzung den Standortzugriff nutzen möchtest. In deinem Fall werden damit Standortdaten abgerufen.

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

android:foregroundServiceType="location"

Der Code sollte ungefähr 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>

Fertig! Deine App unterstützt den Standort von Android 10 für die Verwendung während der Nutzung und folgt den Best Practices für den Standort in Android.

App ausführen

Führe deine App über Android Studio aus und probiere die Standortschaltfläche aus.

Alles sollte wie vorher funktionieren, jetzt funktioniert es aber auch unter Android 10. Wenn Sie die Berechtigungen für Standorte zuvor nicht akzeptiert haben, sollten Sie jetzt den Berechtigungsbildschirm sehen.

In diesem Abschnitt wählen Sie Android 11 aus.

Gute Neuigkeiten: Sie müssen keine Dateien ändern, mit Ausnahme der Datei build.gradle.

Ziel-SDK R

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

Der Code sollte ungefähr so aussehen:

android {
   // TODO: Step 2.1, Target Android 10.
   compileSdkVersion "android-R"
   buildToolsVersion "29.0.2"
   defaultConfig {
       applicationId "com.example.android.whileinuselocation"
       minSdkVersion 26
       targetSdkVersion "R"
       versionCode 1
       versionName "1.0"
   }
...
}

Anschließend werden Sie aufgefordert, Ihr Projekt zu synchronisieren. Klicken Sie auf Jetzt synchronisieren.

Danach ist deine App für Android 11 bereit.

App ausführen

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

Alles sollte wie vorher funktionieren, jetzt funktioniert es aber auch unter Android 11. Wenn Sie die Berechtigungen für Standorte zuvor nicht akzeptiert haben, sollten Sie jetzt den Berechtigungsbildschirm sehen.

Wenn Sie die Berechtigungen zur Standortermittlung wie in diesem Codelab gezeigt prüfen und anfordern, kann Ihre App die Zugriffsebene zum Gerätestandort besser im Blick behalten.

Auf dieser Seite finden Sie einige wichtige Best Practices zu Berechtigungen zur Standortermittlung. Weitere Informationen zum Schutz Ihrer Nutzer finden Sie unter Best Practices für App-Berechtigungen.

Nur nach den erforderlichen Berechtigungen fragen

Bitten Sie nur um Berechtigungen. Beispiel:

  • Fordern Sie beim Start der App nur dann die Berechtigung zur Standortermittlung an, wenn dies absolut notwendig ist.
  • Wenn deine App für Android 10 oder höher bestimmt ist und du einen Vordergrunddienst hast, deklariere im Manifest ein foregroundServiceType von "location".
  • Fordern Sie keine Berechtigungen zur Standortermittlung im Hintergrund an, es sei denn, Sie verwenden einen gültigen Anwendungsfall, wie unter Sichererer und transparenterer Zugriff auf den Nutzerstandort beschrieben.

Unterstützung bei eingeschränktem Zugriff, wenn die Berechtigung nicht gewährt wird

Gestalten Sie Ihre App so, dass sie folgende Situationen problemlos bewältigen kann:

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

Jetzt weißt du, wie du auf Android-Geräten Standortaktualisierungen erhältst.

Weitere Informationen