Current Place

Plattform auswählen: Android iOS

Mit dem Places SDK for Android können Sie den Ort am aktuell gemeldeten Standort ermitteln. Beispiele für Orte sind lokale Unternehmen, POIs und geografische Standorte.

Berechtigungen

Zur Verwendung der Bibliothek müssen Sie keine zusätzlichen Berechtigungen im Manifest Ihrer App deklarieren, da die Bibliothek alle darin enthaltenen Berechtigungen deklariert. Wenn deine App jedoch PlacesClient.findCurrentPlace() verwendet, musst du zur Laufzeit Standortberechtigungen anfordern.

Wenn deine App PlacesClient.findCurrentPlace() nicht verwendet, entferne die von der Bibliothek eingeführten Berechtigungen ACCESS_FINE_LOCATION und ACCESS_COARSE_LOCATION explizit, indem du Folgendes zu deinem Manifest hinzufügst:

<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>

Hier erhältst du weitere Informationen zu Berechtigungen. Für den Einstieg kannst du auch EasyPermissions nutzen.

Aktuellen Standort anfordern

So finden Sie 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 für den Zugriff auf seinen Gerätestandort erteilt hat. Die Anwendung muss auch Code enthalten, mit dem der Nutzer um die Berechtigung gebeten und das Ergebnis verarbeitet wird. Weitere Informationen finden Sie unter App-Berechtigungen anfordern.
  2. Erstellen Sie ein FindCurrentPlaceRequest und übergeben Sie ein List aus Place.Fields, in dem Sie die Ortsdatentypen angeben, die von der Anwendung angefordert werden sollen.
  3. Rufen Sie PlacesClient.findCurrentPlace() auf und übergeben Sie FindCurrentPlaceRequest, das Sie im vorherigen Schritt erstellt haben.
  4. Liste der PlaceLikelihood aus FindCurrentPlaceResponse abrufen.

Die Felder entsprechen den Ergebnissen der Ortssuche und sind in drei Abrechnungskategorien unterteilt: „Basic“, „Contact“ und „Atmosphere“. Basisfelder werden zum Basispreis abgerechnet 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 Ortsdatenanfragen finden Sie unter Nutzung und Abrechnung.

Die API gibt einen 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 zeigt für jeden Ort einen Hinweis auf die Wahrscheinlichkeit, dass der Ort der richtige ist. Die Liste ist möglicherweise leer, wenn es keinen bekannten Ort gibt, der dem angegebenen Gerätestandort entspricht.

Sie können PlaceLikelihood.getPlace() aufrufen, um ein Place-Objekt abzurufen, und PlaceLikelihood.getLikelihood(), um die Wahrscheinlichkeitsbewertung des Orts abzurufen. Je höher der Wert, desto größer ist die 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. Für jeden Ort werden der Name und die Wahrscheinlichkeit protokolliert.

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();
}

      

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()
}

      

Anmerkungen zu den Wahrscheinlichkeitswerten

  • Die Wahrscheinlichkeit gibt eine relative Wahrscheinlichkeit an, dass der Ort die beste Übereinstimmung in der Liste der zurückgegebenen Orte für eine einzelne Anfrage ist. Die Wahrscheinlichkeit kann nicht für verschiedene Anfragen verglichen werden.
  • Der Wert für die Wahrscheinlichkeit liegt zwischen 0,0 und 1,0.

Beispiel: Für eine Wahrscheinlichkeit von 55 %, dass der richtige Ort der Ort A ist, und eine Wahrscheinlichkeit von 35 %, dass er Ort B ist, hat 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 in Ihrer App Informationen aus PlacesClient.findCurrentPlace() angezeigt werden, müssen in der App auch Quellenangaben angezeigt werden. Weitere Informationen finden Sie in der Dokumentation zu Quellenangaben.