Die ordnungsgemäße Verwendung von Standortinformationen kann für Nutzer Ihres
Wenn Ihre App z. B. Nutzern hilft, sich beim Gehen oder
oder wenn Ihre App den Standort von Assets erfasst,
Standort des Geräts in regelmäßigen Abständen. Neben der geografischen
Standort (Breiten- und Längengrad) angeben, können Sie dem Nutzer
z. B. Peilung (horizontale Fahrtrichtung), Höhe oder
Geschwindigkeit des Geräts. Diese und weitere Informationen finden Sie in der
Location
, das Ihre App aus dem
fusioniert
Standortanbieter. Als Antwort aktualisiert die API Ihre App regelmäßig mit
den besten verfügbaren Standort basierend auf dem derzeit verfügbaren Standort
wie WiFi und GPS (Global Positioning System, GPS). Die Genauigkeit der
wird der Standort von den Anbietern bestimmt,
von Ihnen erteilte Berechtigungen zur Standortermittlung
angefordert und den Optionen, die Sie in der Standortanfrage festgelegt haben.
In dieser Lektion erfahren Sie, wie Sie regelmäßige Updates
Standort mithilfe der
requestLocationUpdates()
im Anbieter für kombinierte Standortbestimmung.
Letzten bekannten Standort abrufen
Der letzte bekannte Standort des Geräts ist eine praktische Basis, von der aus das Gerät
und achte darauf, dass die App einen bekannten Standort hat, bevor du
regelmäßige Standortaktualisierungen Die Lektion zur
Unter Letzten bekannten Standort abrufen sehen Sie,
wie finde ich den letzten bekannten Standort?
getLastLocation()
Bei den Snippets in den folgenden Abschnitten wird davon ausgegangen, dass Ihre App
den letzten bekannten Standort abgerufen und als
Location
-Objekt in der globalen Variablen
mCurrentLocation
.
Standortanfrage stellen
Bevor du Standortupdates anfordern kannst, muss deine App eine Verbindung zum Standort herstellen
und eine Standortanfrage stellen. Die Lektion zur
Standorteinstellungen ändern
wie das geht. Sobald eine Standortanfrage vorliegt, können Sie
erhalten Sie über den Aufruf
requestLocationUpdates()
Je nach Art der Anfrage hat der Anbieter für kombinierte Standortbestimmung
ruft die Methode
LocationCallback.onLocationResult()
und übergibt ihr eine Liste mit Location
-Objekten.
Probleme ein
PendingIntent
die den Standort in den erweiterten Daten enthält. Die Genauigkeit und Häufigkeit von
Die Updates werden von den angeforderten Berechtigungen zur Standortermittlung und dem
Optionen, die Sie im Objekt zur Standortanfrage festgelegt haben.
In dieser Lektion erfahren Sie, wie Sie das Update mithilfe der
LocationCallback
Callback-Ansatz ausprobieren. Anruf
requestLocationUpdates()
,
Ihre Instanz des
LocationRequest
Objekt,
und LocationCallback
.
Definieren Sie eine startLocationUpdates()
-Methode, wie im folgenden Codebeispiel gezeigt:
Kotlin
override fun onResume() { super.onResume() if (requestingLocationUpdates) startLocationUpdates() } private fun startLocationUpdates() { fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper()) }
Java
@Override protected void onResume() { super.onResume(); if (requestingLocationUpdates) { startLocationUpdates(); } } private void startLocationUpdates() { fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper()); }
Beachten Sie, dass sich das obige Code-Snippet
auf ein boolesches Flag bezieht,
requestingLocationUpdates
– wird verwendet, um nachzuverfolgen, ob der Nutzer den Standort geändert hat
ein- oder ausschalten. Falls Nutzer Standortupdates deaktiviert haben, können Sie sie darüber informieren.
Standortanforderungen deiner App. Für
mehr über das Beibehalten des Wertes des booleschen Flags für Instanzen des
finden Sie unter Status der Aktivität speichern.
Callback für Standortaktualisierung definieren
Der Anbieter für kombinierte Standortbestimmung ruft den Parameter
LocationCallback.onLocationResult()
. Das eingehende Argument enthält die Liste Location
.
-Objekt, das den Breiten- und Längengrad des Standorts enthält. Das folgende Snippet
zeigt Ihnen, wie Sie die
LocationCallback
Oberfläche und definieren die Methode. Rufen Sie dann den Zeitstempel des Standortupdates ab.
sowie Breiten-, Längengrad und Zeitstempel für die Nutzer Ihrer App
Schnittstelle:
Kotlin
private lateinit var locationCallback: LocationCallback // ... override fun onCreate(savedInstanceState: Bundle?) { // ... locationCallback = object : LocationCallback() { override fun onLocationResult(locationResult: LocationResult?) { locationResult ?: return for (location in locationResult.locations){ // Update UI with location data // ... } } } }
Java
private LocationCallback locationCallback; // ... @Override protected void onCreate(Bundle savedInstanceState) { // ... locationCallback = new LocationCallback() { @Override public void onLocationResult(LocationResult locationResult) { if (locationResult == null) { return; } for (Location location : locationResult.getLocations()) { // Update UI with location data // ... } } }; }
Standortaktualisierungen deaktivieren
Überlegen Sie, ob Sie die Standortaktualisierungen stoppen möchten, wenn die Aktivität
nicht mehr im Fokus sind, z. B. wenn der Nutzer zu einer anderen App oder
verschiedenen Aktivitäten in derselben App. Dies kann praktisch sein, um
vorausgesetzt, die App muss keine Informationen erheben, auch wenn
im Hintergrund ausgeführt wird. In diesem Abschnitt erfahren Sie, wie Sie
Updates in der Aktivität
onPause()
-Methode.
Wenn du keine Standortupdates mehr erhalten möchtest, rufe
removeLocationUpdates()
,
ihm eine
LocationCallback
,
Dies wird im folgenden Codebeispiel gezeigt:
Kotlin
override fun onPause() { super.onPause() stopLocationUpdates() } private fun stopLocationUpdates() { fusedLocationClient.removeLocationUpdates(locationCallback) }
Java
@Override protected void onPause() { super.onPause(); stopLocationUpdates(); } private void stopLocationUpdates() { fusedLocationClient.removeLocationUpdates(locationCallback); }
Verwenden Sie den booleschen Wert requestingLocationUpdates
zum Erfassen
ob Standortupdates derzeit aktiviert sind. In der
onResume()
-Methode, prüfen
ob Standortaktualisierungen derzeit aktiv sind, und aktivieren Sie sie, wenn nicht:
Kotlin
override fun onResume() { super.onResume() if (requestingLocationUpdates) startLocationUpdates() }
Java
@Override protected void onResume() { super.onResume(); if (requestingLocationUpdates) { startLocationUpdates(); } }
Status der Aktivität speichern
Eine Änderung der Gerätekonfiguration, z. B. eine Änderung auf dem Bildschirm
Ausrichtung oder Sprache, können dazu führen, dass die aktuelle Aktivität zerstört wird. Ihr
App muss daher alle Informationen speichern, die sie benötigt, um die Aktivität zu reproduzieren.
Eine Möglichkeit dazu ist ein Instanzstatus, der in einem
Bundle
-Objekt.
Das folgende Codebeispiel zeigt, wie Sie die Methode
onSaveInstanceState()
Callback auf, um den Instanzstatus zu speichern:
Kotlin
override fun onSaveInstanceState(outState: Bundle?) { outState?.putBoolean(REQUESTING_LOCATION_UPDATES_KEY, requestingLocationUpdates) super.onSaveInstanceState(outState) }
Java
@Override protected void onSaveInstanceState(Bundle outState) { outState.putBoolean(REQUESTING_LOCATION_UPDATES_KEY, requestingLocationUpdates); // ... super.onSaveInstanceState(outState); }
updateValuesFromBundle()
-Methode für die Wiederherstellung definieren
die gespeicherten Werte aus der vorherigen Instanz der Aktivität,
verfügbar. Rufen Sie die Methode über die
onCreate()
, wie in den
folgenden Codebeispiel:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { // ... updateValuesFromBundle(savedInstanceState) } private fun updateValuesFromBundle(savedInstanceState: Bundle?) { savedInstanceState ?: return // Update the value of requestingLocationUpdates from the Bundle. if (savedInstanceState.keySet().contains(REQUESTING_LOCATION_UPDATES_KEY)) { requestingLocationUpdates = savedInstanceState.getBoolean( REQUESTING_LOCATION_UPDATES_KEY) } // ... // Update UI to match restored state updateUI() }
Java
@Override public void onCreate(Bundle savedInstanceState) { // ... updateValuesFromBundle(savedInstanceState); } private void updateValuesFromBundle(Bundle savedInstanceState) { if (savedInstanceState == null) { return; } // Update the value of requestingLocationUpdates from the Bundle. if (savedInstanceState.keySet().contains(REQUESTING_LOCATION_UPDATES_KEY)) { requestingLocationUpdates = savedInstanceState.getBoolean( REQUESTING_LOCATION_UPDATES_KEY); } // ... // Update UI to match restored state updateUI(); }
Weitere Informationen zum Speichern des Instanzstatus finden Sie in der Android Aktivitätsklasse.
Hinweis:Wenn Sie mehr Daten möchten,
die Einstellungen der Nutzenden im
SharedPreferences
Legen Sie die Freigabeeinstellung fest in
Die onPause()
-Methode Ihrer Aktivität und
ruft die Einstellung in onResume()
ab.
Weitere Informationen zum Speichern von Einstellungen finden Sie unter
Wird gespeichert
Schlüssel/Wert-Paare.
Weitere Informationen
Weitere Informationen finden Sie in den folgenden Ressourcen:
Produktproben
- Beispiel-App, die zeigt, wie unter Android Standortaktualisierungen empfangen werden