Wenn deine App den Standort anfordern oder Berechtigungsaktualisierungen erhalten muss,
die entsprechenden Systemeinstellungen wie GPS oder WLAN aktivieren müssen,
Scannen. Anstatt Dienste wie das GPS des Geräts direkt zu aktivieren,
Ihre App den erforderlichen Grad an Genauigkeit/Stromverbrauch angibt
gewünschten Aktualisierungsintervall an und das Gerät führt automatisch
an den Systemeinstellungen vorgenommen hat. Diese Einstellungen werden durch das
LocationRequest
Datenobjekt.
In dieser Lektion erfahren Sie, wie Sie Settings Client um zu überprüfen, welche Einstellungen aktiviert sind, und um die Standorteinstellungen anzuzeigen. in dem der Nutzer seine Einstellungen mit nur einem Fingertipp aktualisieren kann.
Standortdienste konfigurieren
Um die Standortdienste der Google Play-Dienste zu nutzen, Anbieter für kombinierte Standortbestimmung, verbinden Sie Ihre App mit dem Settings Client Überprüfen Sie dann die aktuellen Standorteinstellungen und bitten Sie den Nutzer, die Funktion die erforderlichen Einstellungen.
Apps, deren Funktionen Standortdienste nutzen, müssen Berechtigungen zur Standortermittlung anfordern je nach Anwendungsfall dieser Funktionen.
Standortanfrage einrichten
Zum Speichern von Parametern für Anfragen an den Anbieter für kombinierte Standortbestimmung erstellen Sie eine
LocationRequest
Die Parameter bestimmen den Genauigkeitsgrad für Standortanfragen. Für
Details zu allen verfügbaren Optionen für die Standortabfrage finden Sie auf der
LocationRequest
Klassenreferenz. In dieser Lektion legen Sie das Aktualisierungsintervall, das schnellste Update,
Intervall und Priorität, wie unten beschrieben:
- Aktualisierungsintervall
-
setInterval()
- Mit dieser Methode wird die Häufigkeit in Millisekunden festgelegt, mit der Ihre App Standortaktualisierungen erhalten. Beachten Sie, dass die Standortaktualisierungen schneller oder langsamer als diese Geschwindigkeit, um den Akku zu schonen Es darf keine Updates geben (z. B. wenn das Gerät keine Verbindung hat). - Schnellstes Aktualisierungsintervall
-
setFastestInterval()
– Mit dieser Methode wird die schnellste Rate in Millisekunden um mit der deine App Standortaktualisierungen verarbeiten kann. Es sei denn, Ihre App profitiert von schneller Updates erhalten, als in dersetInterval()
, müssen Sie diese Methode nicht aufrufen. - Priorität
-
setPriority()
- Mit dieser Methode wird die Priorität der Anfrage festgelegt, sodass die Google Play- Standortdienste von Diensten einen klaren Hinweis darauf, welche Standortquellen verwendet werden sollen. Die folgenden Werte werden unterstützt:-
PRIORITY_BALANCED_POWER_ACCURACY
- Verwenden Sie diese Einstellung, um die Standortgenauigkeit innerhalb einer Stadt anzufordern. mit einer Genauigkeit von ca. 100 Metern. Dies ist als ungenau angesehen und wahrscheinlich weniger Energie. Bei dieser Einstellung verwenden die Standortdienste wahrscheinlich WLAN und die Positionierung von Mobilfunkmasten. Die Wahl des Standorts hängt von vielen anderen Faktoren ab, z. B. von welchen Quellen verfügbar. -
PRIORITY_HIGH_ACCURACY
- Verwenden Sie diese Einstellung, um den genauen Standort anzufordern. Mit verwenden die Standortdienste mit höherer Wahrscheinlichkeit GPS um den Standort zu bestimmen. PRIORITY_LOW_POWER
- Verwenden Sie diese Einstellung, um eine Genauigkeit auf Stadtebene anzufordern. eine Genauigkeit von etwa 10 Kilometern. Dies wird als und verbraucht wahrscheinlich weniger Strom.PRIORITY_NO_POWER
- Verwenden Sie diese Einstellung, wenn Ihr Stromverbrauch nur geringfügig beeinflusst wird. möchten aber Standortbenachrichtigungen erhalten, sobald sie verfügbar sind. Damit löst Ihre App keine Standortaktualisierungen aus, aber erhält Standorte, die von anderen Apps ausgelöst wurden.
-
Erstellen Sie die Standortanfrage und legen Sie die Parameter wie hier gezeigt fest: Codebeispiel:
Kotlin
fun createLocationRequest() { val locationRequest = LocationRequest.Builder() .setIntervalMillis(10000) .setFastestIntervalMillis(5000) .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) .build() }
Java
protected void createLocationRequest() { LocationRequest locationRequest = LocationRequest.Builder() .setIntervalMillis(10000) .setFastestIntervalMillis(5000) .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) .build(); }
Die Priorität der
PRIORITY_HIGH_ACCURACY
,
kombiniert mit den
ACCESS_FINE_LOCATION
Berechtigungseinstellung, die du im App-Manifest definiert hast, sowie eine schnelle Aktualisierung
von 5.000 Millisekunden (5 Sekunden) führen, wird der fusionierte Standort
Anbieter, um Standortaktualisierungen bis auf wenige Meter zurückzugeben.
Dieser Ansatz eignet sich für die Kartierung von Apps, die den Standort in
in Echtzeit.
Leistungshinweis: Wenn Ihre App auf die oder andere lang andauernde Aufgaben nach dem Empfang eines Standortupdates erledigen, das schnellste Intervall auf einen langsameren Wert einstellen. Durch diese Anpassung wird verhindert, keine Updates erhält, die sie verwenden kann. Sobald die lang andauernde Arbeit erledigt ist, das schnellste Intervall wieder auf einen schnellen Wert setzen.
Aktuelle Standorteinstellungen abrufen
Wenn Sie eine Verbindung zu den Google Play-Diensten und den Standortdiensten hergestellt haben,
API können Sie die aktuellen Standorteinstellungen des Geräts eines Nutzers abrufen. Aufgabe
erstellen Sie eine
LocationSettingsRequest.Builder
,
und fügen Sie eine oder mehrere Standortanfragen hinzu. Das folgende Code-Snippet zeigt,
um die Standortanfrage hinzuzufügen, die im vorherigen Schritt erstellt wurde:
Kotlin
val builder = LocationSettingsRequest.Builder() .addLocationRequest(locationRequest)
Java
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() .addLocationRequest(locationRequest);
Prüfen Sie als Nächstes, ob die aktuellen Standorteinstellungen erfüllt sind:
Kotlin
val builder = LocationSettingsRequest.Builder() // ... val client: SettingsClient = LocationServices.getSettingsClient(this) val task: Task<LocationSettingsResponse> = client.checkLocationSettings(builder.build())
Java
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder(); // ... SettingsClient client = LocationServices.getSettingsClient(this); Task<LocationSettingsResponse> task = client.checkLocationSettings(builder.build());
Wenn der Task
kann Ihre App die Standorteinstellungen anhand des Status
Code aus dem LocationSettingsResponse
-Objekt enthält. Um noch mehr Details zum aktuellen Status der relevanten
Standorteinstellungen aktiviert haben, kann Ihre App die
LocationSettingsResponse
des Objekts
getLocationSettingsStates()
.
Nutzer auffordern, die Standorteinstellungen zu ändern
Um zu ermitteln, ob die Standorteinstellungen für den Standort geeignet sind
-Anforderung einen
OnFailureListener
zu
Task
-Objekt, das die Standorteinstellungen validiert. Prüfen Sie dann
wenn die
Exception
-Objekt, das an übergeben wurde
Die Methode onFailure()
ist eine Instanz von
ResolvableApiException
-Klasse, die angibt, dass die Einstellungen
geändert werden muss. Rufen Sie dann ein Dialogfeld auf, in dem der Nutzer um die Berechtigung zum
die Standorteinstellungen durch Aufrufen von ändern.
startResolutionForResult()
Im folgenden Code-Snippet sehen Sie, wie ermittelt wird,
Einstellungen erlauben, dass Standortdienste ein erstellen.
LocationRequest
sowie dazu, wie der Nutzer gebeten wird,
die Berechtigung, die Standorteinstellungen zu ändern:
Kotlin
task.addOnSuccessListener { locationSettingsResponse -> // All location settings are satisfied. The client can initialize // location requests here. // ... } task.addOnFailureListener { exception -> if (exception is ResolvableApiException){ // Location settings are not satisfied, but this can be fixed // by showing the user a dialog. try { // Show the dialog by calling startResolutionForResult(), // and check the result in onActivityResult(). exception.startResolutionForResult(this@MainActivity, REQUEST_CHECK_SETTINGS) } catch (sendEx: IntentSender.SendIntentException) { // Ignore the error. } } }
Java
task.addOnSuccessListener(this, new OnSuccessListener<LocationSettingsResponse>() { @Override public void onSuccess(LocationSettingsResponse locationSettingsResponse) { // All location settings are satisfied. The client can initialize // location requests here. // ... } }); task.addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { if (e instanceof ResolvableApiException) { // Location settings are not satisfied, but this can be fixed // by showing the user a dialog. try { // Show the dialog by calling startResolutionForResult(), // and check the result in onActivityResult(). ResolvableApiException resolvable = (ResolvableApiException) e; resolvable.startResolutionForResult(MainActivity.this, REQUEST_CHECK_SETTINGS); } catch (IntentSender.SendIntentException sendEx) { // Ignore the error. } } } });
In der nächsten Lektion Standortaktualisierungen erhalten wird angezeigt wie Sie regelmäßige Standortupdates erhalten.