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. Beispiele für Orte sind lokale Unternehmen, POIs und geografische Standorte.

Berechtigungen

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

Wenn deine App PlacesClient.findCurrentPlace() nicht verwendet, entferne explizit die durch die 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>

Informieren Sie sich über Berechtigungen und verwenden Sie für den Einstieg EasyPermissions.

Aktuellen Standort anfordern

So kannst du nach einem lokalen Unternehmen oder einem anderen Ort suchen, 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 den Gerätestandort erteilt hat. Ihre App muss außerdem Code enthalten, der den Nutzer um die Berechtigung bittet und das Ergebnis verarbeitet. Weitere Informationen findest du unter App-Berechtigungen anfordern.
  2. Erstellen Sie eine FindCurrentPlaceRequest und übergeben Sie ein List von Place.Fields. Geben Sie dabei die Ortsdatentypen an, die Ihre App anfordern soll.
  3. Rufen Sie PlacesClient.findCurrentPlace() auf und übergeben Sie die FindCurrentPlaceRequest, die Sie im vorherigen Schritt erstellt haben.
  4. Die Liste der PlaceLikelihoods findest du in der FindCurrentPlaceResponse.

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 „Place“-Datenanfragen finden Sie unter Nutzung und Abrechnung.

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

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 übereinstimmt.

Im folgenden Codebeispiel wird die Liste der Orte abgerufen, an denen sich das Gerät am wahrscheinlichsten befindet. Der Name und die Wahrscheinlichkeit für jeden Ort werden 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, mit der der Ort in der Liste der zurückgegebenen Orte für eine einzelne Anfrage die beste Übereinstimmung ist. Es ist nicht möglich, Wahrscheinlichkeiten verschiedener Anfragen zu vergleichen.
  • Der Wert der Wahrscheinlichkeit liegt zwischen 0,0 und 1,0.

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