Standorteinstellungen ändern

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 der setInterval(), 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.