L'SDK Places per Android fornisce alla tua app informazioni dettagliate sui luoghi, tra cui il nome e l'indirizzo, la posizione geografica specificata come coordinate di latitudine/longitudine, il tipo di luogo (ad es. discoteca, negozio di animali domestici, museo) e altro ancora. Per accedere a queste informazioni per un luogo specifico, puoi utilizzare l'ID luogo, un identificatore stabile che identifica in modo univoco un luogo.
Dettagli del luogo
L'oggetto
Place
fornisce informazioni su un luogo specifico. Puoi ottenere un oggetto
Place
nei seguenti modi:
- Chiama
PlacesClient.fetchPlace()
: consulta la guida su come trovare un luogo tramite l'ID. - Chiama
PlacesClient.findCurrentPlace()
– consulta la guida su come ottenere il luogo corrente.
Quando richiedi un luogo, devi specificare i dati del luogo da restituire. A tale scopo, passa un elenco di valori Place.Field che specificano i dati da restituire. Questo elenco è un aspetto importante da considerare perché influisce sul costo di ogni richiesta.
Poiché i risultati dei dati dei luoghi non possono essere vuoti, vengono restituiti solo i risultati dei luoghi con dati. Ad esempio, se un luogo richiesto non ha foto, il campo photos
non sarà presente nel risultato.
L'esempio seguente passa un elenco di tre valori Place.Field per specificare i dati restituiti da una richiesta:
Kotlin
// Specify the fields to return. val placeFields = listOf(Place.Field.NAME, Place.Field.RATING, Place.Field.OPENING_HOURS)
Java
// Specify the fields to return. final List<Place.Field> placeFields = Arrays.asList(Place.Field.NAME, Place.Field.RATING, Place.Field.OPENING_HOURS);
Accedere ai campi di dati dell'oggetto Place
Dopo aver ottenuto l'oggetto Place
, utilizza i relativi metodi per accedere ai campi di dati specificati nella richiesta. Se il campo non è presente nell'oggetto Place
,
il metodo correlato restituisce null. Di seguito sono riportati alcuni esempi di metodi disponibili.
getAddress()
: l'indirizzo del luogo in formato leggibile.getAddressComponents()
: unList
di componenti dell'indirizzo per questo luogo. Questi componenti vengono forniti allo scopo di estrarre informazioni strutturate sull'indirizzo di un luogo, ad esempio per trovare la città in cui si trova un luogo. Non utilizzare questi componenti per la formattazione degli indirizzi. Chiamate invecegetAddress()
, che fornisce un indirizzo formattato localizzato.getId()
: l'identificatore testuale del luogo. Scopri di più sugli ID luogo nel resto di questa pagina.getLatLng()
: la posizione geografica del luogo, specificata come coordinate di latitudine e longitudine.getName()
: il nome del luogo.getOpeningHours()
: ilOpeningHours
del luogo. ChiamaOpeningHours.getWeekdayText()
per restituire un elenco di stringhe che rappresentano gli orari di apertura e chiusura per ogni giorno della settimana. ChiamaOpeningHours.getPeriods()
per restituire un elenco di oggettiperiod
con informazioni più dettagliate equivalenti ai dati forniti dagetWeekdayText()
.L'oggetto
Place
contiene anche il metodogetCurrentOpeningHours()
che restituisce l'orario di apertura di un luogo nei prossimi sette giorni egetSecondaryOpeningHours()
che restituisce l'orario di apertura secondario di un luogo nei prossimi sette giorni.isOpen()
: un valore booleano che indica se il luogo è attualmente aperto. Se non viene specificato alcun orario, il valore predefinito è l'ora corrente.isOpen
verrà restituito solo se sono disponibili siaPlace.Field.UTC_OFFSET
chePlace.Field.OPENING_HOURS
. Per garantire risultati accurati, richiede i campiPlace.Field.BUSINESS_STATUS
ePlace.Field.UTC_OFFSET
nella richiesta di luogo originale. Se non viene richiesta, si presume che l'attività sia operativa. Guarda questo video per scoprire come utilizzareisOpen
con i dettagli dei luoghi.
Ecco alcuni esempi:
Kotlin
val name = place.name val address = place.address val location = place.latLng
Java
final CharSequence name = place.getName(); final CharSequence address = place.getAddress(); final LatLng location = place.getLatLng();
Ottenere un luogo tramite ID
Un ID luogo è un identificatore di testo che identifica in modo univoco un luogo. Nell'SDK Places per Android, puoi recuperare l'ID di un luogo chiamando Place.getId()
.
Il servizio
Place Autocomplete
restituisce anche un ID luogo per ogni luogo che corrisponde alla query di ricerca e al filtro forniti. Puoi memorizzare l'ID luogo e utilizzarlo per recuperare di nuovo l'oggetto
Place
in un secondo momento.
Per ottenere un luogo tramite ID, chiama
PlacesClient.fetchPlace()
,
passando un FetchPlaceRequest
.
L'API restituisce un
FetchPlaceResponse
in un
Task
.
L'attributo
FetchPlaceResponse
contiene un oggetto
Place
corrispondente all'ID luogo fornito.
L'esempio di codice seguente mostra la chiamata a fetchPlace()
per recuperare i dettagli del luogo specificato.
Kotlin
// Define a Place ID. val placeId = "INSERT_PLACE_ID_HERE" // Specify the fields to return. val placeFields = listOf(Place.Field.ID, Place.Field.NAME) // Construct a request object, passing the place ID and fields array. val request = FetchPlaceRequest.newInstance(placeId, placeFields) placesClient.fetchPlace(request) .addOnSuccessListener { response: FetchPlaceResponse -> val place = response.place Log.i(PlaceDetailsActivity.TAG, "Place found: ${place.name}") }.addOnFailureListener { exception: Exception -> if (exception is ApiException) { Log.e(TAG, "Place not found: ${exception.message}") val statusCode = exception.statusCode TODO("Handle error with given status code") } }
Java
// Define a Place ID. final String placeId = "INSERT_PLACE_ID_HERE"; // Specify the fields to return. final List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.NAME); // Construct a request object, passing the place ID and fields array. final FetchPlaceRequest request = FetchPlaceRequest.newInstance(placeId, placeFields); placesClient.fetchPlace(request).addOnSuccessListener((response) -> { Place place = response.getPlace(); Log.i(TAG, "Place found: " + place.getName()); }).addOnFailureListener((exception) -> { if (exception instanceof ApiException) { final ApiException apiException = (ApiException) exception; Log.e(TAG, "Place not found: " + exception.getMessage()); final int statusCode = apiException.getStatusCode(); // TODO: Handle error with given status code. } });
Recupera lo stato aperto
Il metodo PlacesClient.isOpen(IsOpenRequest request)
restituisce un oggetto IsOpenResponse
che indica se il luogo è attualmente aperto in base all'ora specificata nella chiamata.
Questo metodo accetta un singolo argomento di tipo IsOpenRequest
che contiene:
- Un oggetto
Place
o una stringa che specifica un ID luogo. - Un valore facoltativo che specifica l'ora in millisecondi a partire dal 1970-01-01T00:00:00Z. Se non viene specificato alcun orario, il valore predefinito è l'ora corrente.
Questo metodo richiede che nell'oggetto Place
esistano i seguenti campi:
Place.Field.BUSINESS_STATUS
Place.Field.CURRENT_OPENING_HOURS
Place.Field.OPENING_HOURS
Place.Field.UTC_OFFSET
Se questi campi non sono forniti nell'oggetto Place
o se passi un ID luogo, il metodo utilizza PlacesClient.fetchPlace()
per recuperarli. Per ulteriori informazioni sulla creazione dell'oggetto Place con i campi necessari, consulta Dettagli dei luoghi.
L'esempio seguente determina se un luogo è attualmente aperto. In questo esempio, passi solo
l'ID luogo a isOpen()
:
Kotlin
val isOpenCalendar: Calendar = Calendar.getInstance() val placeId = "ChIJD3uTd9hx5kcR1IQvGfr8dbk" val request: IsOpenRequest = try { IsOpenRequest.newInstance(placeId, isOpenCalendar.timeInMillis) } catch (e: IllegalArgumentException) { e.printStackTrace() return } val isOpenTask: Task<IsOpenResponse> = placesClient.isOpen(request) isOpenTask.addOnSuccessListener { response -> val isOpen = response.isOpen } // ...
Java
@NonNull Calendar isOpenCalendar = Calendar.getInstance(); String placeId = "ChIJD3uTd9hx5kcR1IQvGfr8dbk"; IsOpenRequest isOpenRequest; try { isOpenRequest = IsOpenRequest.newInstance(placeId, isOpenCalendar.getTimeInMillis()); } catch (IllegalArgumentException e) { e.printStackTrace(); return; } Task<IsOpenResponse> placeTask = placesClient.isOpen(isOpenRequest); placeTask.addOnSuccessListener( (response) -> isOpen = response.isOpen()); // ...
L'esempio seguente mostra la chiamata a isOpen()
in cui viene passato un oggetto Place
.
L'oggetto Place
deve contenere un ID luogo valido:
Kotlin
val isOpenCalendar: Calendar = Calendar.getInstance() var place: Place val placeId = "ChIJD3uTd9hx5kcR1IQvGfr8dbk" // Specify the required fields for an isOpen request. val placeFields: List<Place.Field> = listOf( Place.Field.BUSINESS_STATUS, Place.Field.CURRENT_OPENING_HOURS, Place.Field.ID, Place.Field.OPENING_HOURS, Place.Field.UTC_OFFSET ) val placeRequest: FetchPlaceRequest = FetchPlaceRequest.newInstance(placeId, placeFields) val placeTask: Task<FetchPlaceResponse> = placesClient.fetchPlace(placeRequest) placeTask.addOnSuccessListener { placeResponse -> place = placeResponse.place val isOpenRequest: IsOpenRequest = try { IsOpenRequest.newInstance(place, isOpenCalendar.timeInMillis) } catch (e: IllegalArgumentException) { e.printStackTrace() return@addOnSuccessListener } val isOpenTask: Task<IsOpenResponse> = placesClient.isOpen(isOpenRequest) isOpenTask.addOnSuccessListener { isOpenResponse -> val isOpen = isOpenResponse.isOpen } // ... } // ...
Java
@NonNull Calendar isOpenCalendar = Calendar.getInstance(); String placeId = "ChIJD3uTd9hx5kcR1IQvGfr8dbk"; // Specify the required fields for an isOpen request. List<Place.Field> placeFields = new ArrayList<>(Arrays.asList( Place.Field.BUSINESS_STATUS, Place.Field.CURRENT_OPENING_HOURS, Place.Field.ID, Place.Field.OPENING_HOURS, Place.Field.UTC_OFFSET )); FetchPlaceRequest request = FetchPlaceRequest.newInstance(placeId, placeFields); Task<FetchPlaceResponse> placeTask = placesClient.fetchPlace(request); placeTask.addOnSuccessListener( (placeResponse) -> { Place place = placeResponse.getPlace(); IsOpenRequest isOpenRequest; try { isOpenRequest = IsOpenRequest.newInstance(place, isOpenCalendar.getTimeInMillis()); } catch (IllegalArgumentException e) { e.printStackTrace(); return; } Task<IsOpenResponse> isOpenTask = placesClient.isOpen(isOpenRequest); isOpenTask.addOnSuccessListener( (isOpenResponse) -> isOpen = isOpenResponse.isOpen()); // ... }); // ...
Mostrare le attribuzioni nell'app
Quando l'app mostra informazioni sui luoghi, incluse le recensioni, deve mostrare anche eventuali attribuzioni. Per ulteriori informazioni, consulta Attribuzioni.
Ulteriori informazioni sugli ID luogo
L'ID luogo utilizzato nell'SDK Places per Android è lo stesso identificatore utilizzato nell'API Places. Ogni ID luogo può fare riferimento a un solo luogo, ma un singolo luogo può avere più di un ID luogo. Esistono altre circostanze che possono causare l'assegnazione di un nuovo ID luogo a un luogo. Ad esempio, ciò può accadere se un'attività si trasferisce in una nuova sede.
Quando richiedi un luogo specificandone l'ID, puoi stare certo che riceverai sempre lo stesso luogo nella risposta (se il luogo esiste ancora). Tieni presente, tuttavia, che la risposta potrebbe contenere un ID luogo diverso da quello indicato nella richiesta.
Per ulteriori informazioni, consulta la panoramica degli ID luogo.