Luogo attuale

Seleziona la piattaforma: Android iOS

Con Places SDK per Android, puoi scoprire il luogo nella posizione segnalata al momento del dispositivo. Esempi di luoghi includono il locale attività commerciali, punti di interesse e località geografiche.

Autorizzazioni

Per utilizzare la libreria non è necessario dichiarare autorizzazioni aggiuntive nel file manifest dell'app. poiché la libreria dichiara tutte le autorizzazioni utilizzate nel file manifest. Tuttavia, se la tua app utilizza PlacesClient.findCurrentPlace(), devi richiedere le autorizzazioni di accesso alla posizione in fase di runtime.

Se la tua app non usa PlacesClient.findCurrentPlace(), rimuovi esplicitamente il Autorizzazioni ACCESS_FINE_LOCATION e ACCESS_COARSE_LOCATION introdotte dalla libreria aggiungendo quanto segue al file manifest:

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

Ulteriori informazioni su autorizzazioni e valuta l'utilizzo di EasyPermissions per iniziare.

Visualizza la posizione attuale

Per trovare l'attività locale o un altro luogo in cui si trova attualmente il dispositivo individua la posizione, procedi nel seguente modo:

  1. Chiama il numero ContextCompat.checkSelfPermission per verificare se l'utente ha concesso l'autorizzazione ad accedere al proprio dispositivo in ogni località. L'app deve includere anche codice per richiedere l'autorizzazione all'utente. e gestire il risultato. Consulta Richiedere le autorizzazioni app. per maggiori dettagli.
  2. Crea una FindCurrentPlaceRequest, passando un List di Place.Fields, specificando i tipi di dati richiesti dall'app.
  3. Chiama il numero PlacesClient.findCurrentPlace(), passando il FindCurrentPlaceRequest che hai creato nell'esperienza passaggio.
  4. Recupera l'elenco di PlaceLikelihood dal FindCurrentPlaceResponse.

I campi corrispondono ai risultati di Ricerca di luoghi e sono suddivisi in tre categorie di fatturazione: Base, contatto e ambiente. I campi di base vengono fatturati alla tariffa di base e non sono soggetti a addebiti. I campi Contact e Atmosphere vengono fatturati a una tariffa superiore. Per ulteriori informazioni su come vengono fatturate le richieste di dati dei luoghi, consulta Utilizzo e fatturazione.

L'API restituisce un FindCurrentPlaceResponse in un Task. FindCurrentPlaceResponse contiene un elenco di PlaceLikelihood oggetti che rappresentano luoghi in cui è probabile che si trovi il dispositivo. Per in ogni luogo, il risultato include un'indicazione della probabilità che è quello giusto. L'elenco potrebbe essere vuoto se non esiste un luogo noto corrispondenti alla posizione del dispositivo specificata.

Puoi chiamare PlaceLikelihood.getPlace() per recuperare un Place oggetto PlaceLikelihood.getLikelihood() per conoscere la valutazione della probabilità del luogo. Un valore più alto indica che che il luogo sia la migliore corrispondenza.

Il seguente esempio di codice recupera l'elenco di posizioni in cui si trova il dispositivo che ha più probabilità di trovarsi e registra il nome e la probabilità di ciascun luogo.

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

      

Note sui valori della probabilità:

  • La probabilità fornisce una probabilità relativa del luogo è la migliore corrispondenza nell'elenco dei luoghi restituiti per una singola richiesta. Non puoi confrontare le probabilità di diverse richieste.
  • Il valore della probabilità sarà compreso tra 0,0 e 1,0.

Ad esempio, per indicare una probabilità del 55% che il luogo corretto sia Place A e una probabilità del 35% che si tratti del posto B, la risposta ha due membri, Posiziona A con una probabilità di 0,55 e posiziona B con una probabilità di 0,35.

Attribuzioni display nell'app

Quando la tua app mostra informazioni ottenute da PlacesClient.findCurrentPlace(), anche l'app deve mostrare le attribuzioni. Consulta la documentazione su attribuzioni.