Puedes usar el SDK de Places para Android para solicitar una foto de un lugar a mostrar en tu aplicación. Las fotos que devuelve el servicio de fotos provienen de un variedad de fuentes, como propietarios de empresas y fotos aportadas por los usuarios.
El SDK de Places para Android muestra una imagen de mapa de bits con un valor máximo de 1,600 por 1,600 píxeles.
Proceso de recuperación de fotos
Para recuperar una imagen de un lugar, haz lo siguiente:
- Usa Place Details para recuperar un objeto
Place
(usa cualquierafetchPlace()
ofindCurrentPlace()
). Asegúrate de incluir el campoPlace.Field PHOTO_METADATAS
en la lista de campos para incluir en el objetoPlace
de respuesta. - En la
OnSuccessListener
para tuFetchPlaceResponse
oFindCurrentPlaceResponse
, usarPlace.getPhotoMetadas()
para obtener el objeto de metadatos de la foto, del tipoPhotoMetadata
del objeto de respuestaPlace
. - Crea un objeto
FetchPhotoRequest
. De manera opcional, especifica la altura y el ancho máximos (en píxeles). Las fotos pueden tener con un ancho o alto máximos de 1,600 px - Usa
PlacesClient.fetchPhoto()
. para solicitar el mapa de bits de la foto. - Agrega un elemento
OnSuccessListener
y obtén la foto deFetchPhotoResponse
Toma una foto
En el siguiente ejemplo, se muestra cómo obtener una foto de un sitio:
Kotlin
// Define a Place ID. val placeId = "INSERT_PLACE_ID_HERE" // Specify fields. Requests for photos must always have the PHOTO_METADATAS field. val fields = listOf(Place.Field.PHOTO_METADATAS) // Get a Place object (this example uses fetchPlace(), but you can also use findCurrentPlace()) val placeRequest = FetchPlaceRequest.newInstance(placeId, fields) placesClient.fetchPlace(placeRequest) .addOnSuccessListener { response: FetchPlaceResponse -> val place = response.place // Get the photo metadata. val metada = place.photoMetadatas if (metada == null || metada.isEmpty()) { Log.w(TAG, "No photo metadata.") return@addOnSuccessListener } val photoMetadata = metada.first() // Get the attribution text. val attributions = photoMetadata?.attributions // Create a FetchPhotoRequest. val photoRequest = FetchPhotoRequest.builder(photoMetadata) .setMaxWidth(500) // Optional. .setMaxHeight(300) // Optional. .build() placesClient.fetchPhoto(photoRequest) .addOnSuccessListener { fetchPhotoResponse: FetchPhotoResponse -> val bitmap = fetchPhotoResponse.bitmap imageView.setImageBitmap(bitmap) }.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 fields. Requests for photos must always have the PHOTO_METADATAS field. final List<Place.Field> fields = Collections.singletonList(Place.Field.PHOTO_METADATAS); // Get a Place object (this example uses fetchPlace(), but you can also use findCurrentPlace()) final FetchPlaceRequest placeRequest = FetchPlaceRequest.newInstance(placeId, fields); placesClient.fetchPlace(placeRequest).addOnSuccessListener((response) -> { final Place place = response.getPlace(); // Get the photo metadata. final List<PhotoMetadata> metadata = place.getPhotoMetadatas(); if (metadata == null || metadata.isEmpty()) { Log.w(TAG, "No photo metadata."); return; } final PhotoMetadata photoMetadata = metadata.get(0); // Get the attribution text. final String attributions = photoMetadata.getAttributions(); // Create a FetchPhotoRequest. final FetchPhotoRequest photoRequest = FetchPhotoRequest.builder(photoMetadata) .setMaxWidth(500) // Optional. .setMaxHeight(300) // Optional. .build(); placesClient.fetchPhoto(photoRequest).addOnSuccessListener((fetchPhotoResponse) -> { Bitmap bitmap = fetchPhotoResponse.getBitmap(); imageView.setImageBitmap(bitmap); }).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. } }); });
Atribuciones
En la mayoría de los casos, las fotos de lugares se pueden usar sin atribución o tendrán
la atribución requerida incluida como parte de la imagen. Sin embargo, el objeto de metadatos de fotos
PhotoMetadata
:
puede contener cualquiera de estos dos tipos de atribuciones adicionales:
- Atribuciones, una cadena de atribución a la que accede
PhotoMetadata.getAttributions()
- AuthorAttributions, un
AuthorAttributions
al que accedePhotoMetadata.getAuthorAttributions()
.
Si el objeto PhotoMetadata
que se muestra incluye alguno de los tipos de atribución, debes hacer lo siguiente:
incluye la atribución en tu aplicación en cualquier lugar en el que muestres la imagen. Para obtener más información,
consulta Mostrar atribuciones.
Uso y facturación
Se cobra un SKU Places Photo por cada llamada a fetchPhoto()
.
Consulta la página Uso y facturación para obtener más información.