Current Place

Plattform auswählen: Android iOS

Mit dem Places SDK for Android können Sie den Ort am derzeit gemeldeten Standort des Geräts ermitteln. Dazu gehören beispielsweise lokale Unternehmen, POIs und geografische Standorte.

Berechtigungen

Wenn du die Bibliothek verwenden möchtest, musst du im Manifest deiner App keine zusätzlichen Berechtigungen angeben, da die Bibliothek alle verwendeten Berechtigungen in ihrem Manifest deklariert. Verwendet deine App jedoch PlacesClient.findCurrentPlace(), musst du zur Laufzeit Berechtigungen zur Standortermittlung anfordern.

Wenn deine App PlacesClient.findCurrentPlace() nicht verwendet, entferne explizit die von der Bibliothek eingeführten Berechtigungen ACCESS_FINE_LOCATION und ACCESS_COARSE_LOCATION. Füge dazu deinem Manifest Folgendes hinzu:

<manifest ... xmlns:tools="http://schemas.android.com/tools">
    ...
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" tools:node="remove"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" tools:node="remove"/>
    ...
</manifest>

Lesen Sie weitere Informationen zu Berechtigungen und ziehen Sie für den Einstieg die Verwendung von EasyPermissions in Betracht.

Aktuellen Standort anfordern

So findest du das lokale Unternehmen oder einen anderen Ort, an dem sich das Gerät derzeit befindet:

  1. Rufe ContextCompat.checkSelfPermission auf, um zu prüfen, ob der Nutzer die Berechtigung zum Zugriff auf seinen Gerätestandort erteilt hat. Ihre App muss außerdem Code enthalten, mit dem der Nutzer um die Berechtigung gebeten wird und das Ergebnis verarbeitet wird. Weitere Informationen finden Sie unter App-Berechtigungen anfordern.
  2. Erstellen Sie einen FindCurrentPlaceRequest und übergeben Sie einen List von Place.Field-Werten, um die Ortsdatentypen anzugeben, die Ihre Anwendung anfordern soll.
  3. Rufen Sie PlacesClient.findCurrentPlace() auf und übergeben Sie die FindCurrentPlaceRequest, die Sie im vorherigen Schritt erstellt haben.
  4. Rufe die Liste der PlaceLikelihood aus FindCurrentPlaceResponse ab.

Die Felder entsprechen Place Search-Ergebnissen und sind in drei Abrechnungskategorien unterteilt: „Basic“, „Contact“ und „Atmosphere“. Für Felder der Kategorie „Basic“ gilt der Basispreis und es fallen keine zusätzlichen Kosten an. Für Felder der Kategorie „Contact“ und „Atmosphere“ werden höhere Kosten abgerechnet. Weitere Informationen zur Abrechnung von Anfragen für „Place“-Daten finden Sie unter Nutzung und Abrechnung.

Die API gibt ein FindCurrentPlaceResponse in einem Task zurück. FindCurrentPlaceResponse enthält eine Liste von PlaceLikelihood-Objekten, die Orte darstellen, an denen sich das Gerät wahrscheinlich befindet. Das Ergebnis enthält für jeden Ort einen Hinweis auf die Wahrscheinlichkeit, dass der Ort der richtige ist. Die Liste kann leer sein, wenn es für den angegebenen Gerätestandort keinen bekannten Ort gibt.

Sie können PlaceLikelihood.getPlace() aufrufen, um ein Place-Objekt abzurufen, und PlaceLikelihood.getLikelihood() aufrufen, um die Wahrscheinlichkeitsbewertung des Orts zu erhalten. Ein höherer Wert bedeutet eine höhere Wahrscheinlichkeit, dass der Ort am besten passt.

Im folgenden Codebeispiel wird die Liste der Orte abgerufen, an denen sich das Gerät höchstwahrscheinlich befindet. Außerdem werden der Name und die Wahrscheinlichkeit für jeden Ort protokolliert.

Kotlin



// Use fields to define the data types to return.
val placeFields: List<Place.Field> = listOf(Place.Field.NAME)

// Use the builder to create a FindCurrentPlaceRequest.
val request: FindCurrentPlaceRequest = FindCurrentPlaceRequest.newInstance(placeFields)

// Call findCurrentPlace and handle the response (first check that the user has granted permission).
if (ContextCompat.checkSelfPermission(this, permission.ACCESS_FINE_LOCATION) ==
    PackageManager.PERMISSION_GRANTED) {

    val placeResponse = placesClient.findCurrentPlace(request)
    placeResponse.addOnCompleteListener { task ->
        if (task.isSuccessful) {
            val response = task.result
            for (placeLikelihood: PlaceLikelihood in response?.placeLikelihoods ?: emptyList()) {
                Log.i(
                    TAG,
                    "Place '${placeLikelihood.place.name}' has likelihood: ${placeLikelihood.likelihood}"
                )
            }
        } else {
            val exception = task.exception
            if (exception is ApiException) {
                Log.e(TAG, "Place not found: ${exception.statusCode}")
            }
        }
    }
} else {
    // A local method to request required permissions;
    // See https://developer.android.com/training/permissions/requesting
    getLocationPermission()
}

      

Java


// Use fields to define the data types to return.
List<Place.Field> placeFields = Collections.singletonList(Place.Field.NAME);

// Use the builder to create a FindCurrentPlaceRequest.
FindCurrentPlaceRequest request = FindCurrentPlaceRequest.newInstance(placeFields);

// Call findCurrentPlace and handle the response (first check that the user has granted permission).
if (ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
    Task<FindCurrentPlaceResponse> placeResponse = placesClient.findCurrentPlace(request);
    placeResponse.addOnCompleteListener(task -> {
        if (task.isSuccessful()){
            FindCurrentPlaceResponse response = task.getResult();
            for (PlaceLikelihood placeLikelihood : response.getPlaceLikelihoods()) {
                Log.i(TAG, String.format("Place '%s' has likelihood: %f",
                    placeLikelihood.getPlace().getName(),
                    placeLikelihood.getLikelihood()));
            }
        } else {
            Exception exception = task.getException();
            if (exception instanceof ApiException) {
                ApiException apiException = (ApiException) exception;
                Log.e(TAG, "Place not found: " + apiException.getStatusCode());
            }
        }
    });
} else {
    // A local method to request required permissions;
    // See https://developer.android.com/training/permissions/requesting
    getLocationPermission();
}

      

Anmerkungen zu den Wahrscheinlichkeitswerten

  • Die Wahrscheinlichkeit gibt eine relative Wahrscheinlichkeit an, dass der Ort in der Liste der zurückgegebenen Orte für eine einzelne Anfrage am besten übereinstimmt. Sie können die Wahrscheinlichkeiten verschiedener Anfragen nicht vergleichen.
  • Der Wert der Wahrscheinlichkeit liegt zwischen 0,0 und 1,0.

Um beispielsweise darzustellen, dass Ort A mit einer Wahrscheinlichkeit von 55% und Ort B mit einer Wahrscheinlichkeit von 35% richtig sind, enthält die Antwort zwei Mitglieder: Ort A mit einer Wahrscheinlichkeit von 0, 55 und Ort B mit einer Wahrscheinlichkeit von 0,35.

Zuordnungen in der App anzeigen

Wenn deine App Informationen aus PlacesClient.findCurrentPlace() anzeigt, müssen auch Zuordnungen angezeigt werden. Weitere Informationen finden Sie in der Dokumentation zu Quellenangaben.