Puoi utilizzare l'SDK Places for Android per richiedere la visualizzazione di una foto di un luogo nella tua applicazione. Le foto restituite dal servizio di foto provengono da una serie di fonti, tra cui proprietari di attività e foto inviate dagli utenti.
L'SDK Places per Android restituisce un'immagine bitmap con una dimensione massima di 1600 x 1600 pixel.
Procedura di recupero delle foto
Per recuperare un'immagine di un luogo:
- Utilizza Dettagli dei luoghi per recuperare un oggetto
Place
(utilizzafetchPlace()
ofindCurrentPlace()
). Assicurati di includere il campoPlace.Field PHOTO_METADATAS
nell'elenco dei campi da includere nell'oggettoPlace
di risposta. - In
OnSuccessListener
perFetchPlaceResponse
oFindCurrentPlaceResponse
, utilizzaPlace.getPhotoMetadas()
per recuperare l'oggetto dei metadati della foto di tipoPhotoMetadata
dall'oggetto di rispostaPlace
. - Crea un oggetto
FetchPhotoRequest
, specificando facoltativamente l'altezza e la larghezza massime (in pixel). Le foto possono avere una larghezza o un'altezza massima di 1600 pixel. - Usa
PlacesClient.fetchPhoto()
per richiedere la bitmap della foto. - Aggiungi un
OnSuccessListener
e recupera la foto dalFetchPhotoResponse
.
Scatta una foto
L'esempio seguente mostra come ottenere una foto di un luogo:
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. } }); });
Attribuzioni
Nella maggior parte dei casi, le foto dei luoghi possono essere utilizzate senza attribuzione o l'attribuzione richiesta sarà inclusa nell'immagine. Tuttavia, l'oggetto dei metadati della foto, di tipo
PhotoMetadata
,
può contenere uno dei due tipi di attribuzioni aggiuntive:
- Attributions, una stringa di attribuzione a cui si accede tramite
PhotoMetadata.getAttributions()
. - AuthorAttributions, un
AuthorAttributions
oggetto a cui accedePhotoMetadata.getAuthorAttributions()
.
Se l'oggetto PhotoMetadata
restituito include uno dei due tipi di attribuzione, devi includere l'attribuzione nella tua applicazione ovunque venga visualizzata l'immagine. Per ulteriori informazioni, consulta Visualizzazione delle attribuzioni.
Utilizzo e fatturazione
Per le chiamate a fetchPhoto()
viene addebitato uno SKU Foto di luoghi.
Per informazioni dettagliate, consulta la pagina Utilizzo e fatturazione.