El SDK de Places para Android le brinda a tu app información valiosa información sobre lugares, como el nombre y la dirección, la ubicación ubicación especificada como coordenadas de latitud y longitud, el tipo de lugar (como como un club nocturno, una tienda de mascotas, un museo), entre otros. Para acceder a esta información de una puedes usar el id. de sitio, un identificador estable que identifica de forma exclusiva identifica un lugar.
Detalles del lugar
El
Place
proporciona información sobre un lugar específico. Puedes obtener un
Place
objeto de las siguientes maneras:
- Llamada
PlacesClient.fetchPlace()
– Consulta la guía para obtener un lugar por ID: - Llamada
PlacesClient.findCurrentPlace()
– Consulta la guía para obtener el lugar actual.
Cuando solicitas un lugar, debes especificar qué datos del lugar deseas devolver. Para ello, pasa una lista de Place.Field de salida que especifican los datos que se deben mostrar. Esta lista es importante porque afecta costo de cada solicitud.
Debido a que los resultados de datos de lugares no pueden estar vacíos, solo se muestran resultados de lugares con datos
que se devuelve (por ejemplo, si un lugar solicitado no tiene fotos, el valor photos
no estará presente en el resultado).
En el siguiente ejemplo, se pasa una lista de tres Valores Place.Field para especificar los datos que muestra una solicitud:
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);
Accede a los campos de datos de objetos de Places
Después de obtener el objeto Place
, usa sus métodos para acceder al
campos de datos especificados en la solicitud. Si falta el campo en el objeto Place
,
el método relacionado muestra un valor nulo. A continuación, se muestran ejemplos de algunos de los métodos disponibles.
Para obtener una lista completa de todos los métodos, consulta la
Place
Referencia de la API.
getAddress()
: la dirección del lugar, en un formato legible por humanos de un conjunto de datos tengan un formato común.getAddressComponents()
-AList
de componentes de dirección para este lugar. Estos componentes se proporcionan propósito de extraer información estructurada sobre la dirección de un lugar, por ejemplo de búsqueda de la ciudad en la que se encuentra un lugar. No utilices componentes para dar formato a las direcciones; en su lugar, llama agetAddress()
, que proporciona una dirección con formato localizada.getId()
: Es el identificador textual del lugar. Leído para obtener más información sobre los IDs de lugar en el resto de esta página.getLatLng()
: es la ubicación geográfica del lugar. especificadas como coordenadas de latitud y longitud.getName()
: es el nombre del lugar.getOpeningHours()
: elOpeningHours
del lugar. Llama aOpeningHours.getWeekdayText()
para mostrar un una lista de cadenas que representan las horas de apertura y cierre de cada día de la semana. Llama aOpeningHours.getPeriods()
para que se muestre una lista de Objetosperiod
con información más detallada que es equivalentes a los datos proporcionados porgetWeekdayText()
.El objeto
Place
también contiene elgetCurrentOpeningHours()
método que muestra el horario de atención de un lugar durante los próximos siete díasgetSecondaryOpeningHours()
que muestra el horario secundario de funcionamiento de un lugar durante los próximos siete días.isOpen()
: valor booleano que indica si el lugar es abierto actualmente. Si no se especifica la hora, el valor predeterminado será ahora.isOpen
solo se mostrarán si tantoPlace.Field.UTC_OFFSET
como HayPlace.Field.OPENING_HOURS
disponibles. Para garantizar una exactitud resultados, solicita losPlace.Field.BUSINESS_STATUS
y CamposPlace.Field.UTC_OFFSET
en tu solicitud de lugar original. Si no se solicita, se supone que la empresa está operativa. Mira este video para aprender a usarlasisOpen
con Place Details.
Algunos ejemplos simples:
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();
Obtener un sitio por id.
Un ID de lugar es un identificador textual que identifica de forma exclusiva un lugar. En
el SDK de Places para Android, puedes recuperar el ID de un sitio llamando
Place.getId()
El
Servicio Place Autocomplete
También muestra un ID de lugar para cada sitio que coincida con la consulta de búsqueda proporcionada.
y filtrar. Puedes almacenar el id. de sitio y usarlo para recuperar la
Place
de ese objeto de nuevo más adelante.
Para obtener un lugar por ID, llama a
PlacesClient.fetchPlace()
:
pasar un FetchPlaceRequest
La API devuelve un
FetchPlaceResponse
en una
Task
El
FetchPlaceResponse
contiene un
Place
que coincida con el ID de lugar proporcionado.
En el siguiente ejemplo de código, se muestra cómo llamar a fetchPlace()
para
obtener detalles del lugar especificado.
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. } });
Obtener estado de apertura
El PlacesClient.isOpen(IsOpenRequest request)
muestra un objeto IsOpenResponse
que indica si el lugar se
abiertos actualmente según el horario especificado en la llamada.
Este método toma un solo argumento de tipo IsOpenRequest
que contiene lo siguiente:
- Un objeto
Place
o una cadena que especifica un ID de lugar. - Un valor de tiempo opcional que especifica el tiempo en milisegundos desde 1970-01-01T00:00:00Z. Si no se especifica la hora, el valor predeterminado será ahora.
Este método requiere que existan los siguientes campos en el objeto Place
:
Place.Field.BUSINESS_STATUS
Place.Field.CURRENT_OPENING_HOURS
Place.Field.OPENING_HOURS
Place.Field.UTC_OFFSET
Si estos campos no se proporcionan en el objeto Place
o si pasas un ID de lugar,
el método usa
PlacesClient.fetchPlace()
para recuperarlos. Para obtener más información sobre cómo crear el objeto Place con los campos necesarios,
consulta Detalles del lugar.
En el siguiente ejemplo, se determina si un lugar se encuentra abierto en la actualidad. En este ejemplo, solo pasas
el ID de lugar como 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()); // ...
En el siguiente ejemplo, se muestra cómo llamar a isOpen()
, en el que pasas un objeto Place
.
El objeto Place
debe contener un ID de lugar válido:
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()); // ... }); // ...
Mostrar atribuciones en tu aplicación
Cuando tu aplicación muestra información sobre lugares, incluidas opiniones sobre lugares, también debe mostrar ninguna atribución. Para obtener más información, consulta atribuciones.
Más información sobre los id. de sitio
El ID de lugar que se usa en el SDK de Places para Android es el mismo identificador como se usa en la API de Places. Cada id. de sitio puede hacer referencia a un solo sitio, pero un solo sitio puede tener más. de un ID de lugar. Hay otras circunstancias que pueden hacer que un lugar obtener un nuevo ID de lugar. Por ejemplo, esto puede suceder si una empresa se traslada a un nuevo ubicación.
Cuando solicitas un sitio mediante la especificación de un ID de lugar, puedes estar seguro de que siempre recibirás el mismo lugar en la respuesta (si el lugar aún existe). Sin embargo, ten en cuenta que la respuesta puede contener un ID de lugar que diferente de la que aparece en tu solicitud.
Para obtener más información, consulta la Descripción general de los IDs de lugar.