Mit dem Places SDK for Android kannst du den Ort am aktuell gemeldeten Standort des Geräts 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 in ihrem Manifest verwendeten Berechtigungen deklariert. Wenn deine App jedoch PlacesClient.findCurrentPlace()
verwendet, musst du zur Laufzeit Standortberechtigungen anfordern.
Wenn Ihre Anwendung PlacesClient.findCurrentPlace()
nicht verwendet, entfernen Sie explizit die von der Bibliothek eingeführten Berechtigungen ACCESS_FINE_LOCATION
und ACCESS_COARSE_LOCATION
. Fügen Sie dazu Folgendes zu Ihrem Manifest 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>
Hier finden Sie weitere Informationen zu Berechtigungen. Sie können auch EasyPermissions verwenden.
Aktuellen Standort anfordern
So finden Sie das lokale Unternehmen oder einen anderen Ort, an dem sich das Gerät derzeit befindet:
- Rufe
ContextCompat.checkSelfPermission
auf, um zu prüfen, ob der Nutzer die Berechtigung für den Zugriff auf den Gerätestandort erteilt hat. Ihre Anwendung muss auch Code enthalten, mit dem der Nutzer um die Berechtigung gebeten wird und das Ergebnis verarbeitet werden soll. Weitere Informationen finden Sie unter App-Berechtigungen anfordern. - Erstellen Sie ein
FindCurrentPlaceRequest
und übergeben Sie einList
ausPlace.Field
s, in dem Sie die Ortsdatentypen angeben, die von der Anwendung angefordert werden sollen. - Rufen Sie
PlacesClient.findCurrentPlace()
auf und übergeben Sie dieFindCurrentPlaceRequest
, die Sie im vorherigen Schritt erstellt haben. - Rufen Sie die Liste der
PlaceLikelihood
ausFindCurrentPlaceResponse
auf.
Die Felder entsprechen Ortssuchergebnissen und sind in drei Abrechnungskategorien unterteilt: „Einfach“, „Kontakt“ und „Atmosphäre“. Für einfache Felder wird der Basispreis in Rechnung gestellt. 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 Data“-Anfragen 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 enthält für jeden Ort einen Hinweis auf die Wahrscheinlichkeit, dass der Ort der richtige ist. Die Liste ist möglicherweise leer, wenn kein bekannter Ort 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 ist, desto höher ist die Wahrscheinlichkeit, dass der Ort am besten passt.
Im folgenden Codebeispiel wird die Liste der Orte abgerufen, an denen sich das Gerät wahrscheinlich befindet. Außerdem werden Name und Wahrscheinlichkeit für jeden Ort 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 ist eine relative Wahrscheinlichkeit, dass der Ort in der Liste der zurückgegebenen Orte für eine einzelne Anfrage am besten übereinstimmt. Sie können die Wahrscheinlichkeiten für verschiedene Anfragen nicht vergleichen.
- Der Wahrscheinlichkeitswert liegt zwischen 0,0 und 1,0.
Beispiel: Für eine 55% ige Wahrscheinlichkeit, dass der richtige Ort Ort A ist, und eine 35% ige Wahrscheinlichkeit, dass es 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 deine App Informationen aus PlacesClient.findCurrentPlace()
anzeigt, muss sie auch Quellenangaben enthalten. Weitere Informationen finden Sie in der Dokumentation zu Attributionen.