Вы можете использовать SDK Places для Android (устаревшая версия), чтобы запросить фотографию места для отображения в вашем приложении. Фотографии, возвращаемые сервисом, поступают из различных источников, включая владельцев бизнеса и фотографии, предоставленные пользователями.
Places SDK для Android (устаревшая версия) возвращает растровое изображение с максимальным размером 1600 на 1600 пикселей.
Процесс поиска фотографий
Чтобы получить изображение для определенного места:
- Используйте Place Details (Legacy) для получения объекта
Place(с помощьюfetchPlace()). Обязательно включите полеPlace.Field PHOTO_METADATASв список полей, которые должны быть включены в ответный объектPlace. - В обработчике
OnSuccessListenerдля вашегоFetchPlaceResponseиспользуйтеPlace.getPhotoMetadas()чтобы получить объект метаданных фотографии типаPhotoMetadataиз объектаPlace, полученного из ответа. - Создайте объект
FetchPhotoRequest, указав при необходимости максимальную высоту и ширину (в пикселях). Фотографии могут иметь максимальную ширину или высоту 1600 пикселей. - Используйте
PlacesClient.fetchPhoto()для запроса растрового изображения фотографии. - Добавьте обработчик
OnSuccessListenerи получите фотографию из объектаFetchPhotoResponse.
Сделайте фото
Следующий пример демонстрирует, как сделать фотографию места:
Котлин
// Define a Place ID. val placeId = PlaceIdProvider.getRandomPlaceId() // 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 metadata = place.photoMetadatas if (metadata == null || metadata.isEmpty()) { Log.w(TAG, "No photo metadata.") return@addOnSuccessListener } val photoMetadata = metadata.first() // Get the attribution text. val attributions = photoMetadata?.attributions binding.placePhotosAttributions.text = attributions // Create a FetchResolvedPhotoUriRequest. val photoRequest = FetchResolvedPhotoUriRequest.builder(photoMetadata) .setMaxWidth(500) // Optional. .setMaxHeight(300) // Optional. .build() placesClient.fetchResolvedPhotoUri(photoRequest) .addOnSuccessListener { fetchPhotoResponse -> val photoUri = fetchPhotoResponse.uri Glide.with(this) .load(photoUri) .into(binding.placePhotosResult) }.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 = PlaceIdProvider.getRandomPlaceId(); // 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(); binding.placePhotosAttributions.setText(attributions); // Create a FetchResolvedPhotoUriRequest. final FetchResolvedPhotoUriRequest photoRequest = FetchResolvedPhotoUriRequest.builder(photoMetadata) .setMaxWidth(500) // Optional. .setMaxHeight(300) // Optional. .build(); placesClient.fetchResolvedPhotoUri(photoRequest).addOnSuccessListener((fetchPhotoResponse) -> { Glide.with(this) .load(fetchPhotoResponse.getUri()) .into(binding.placePhotosResult); }).addOnFailureListener((exception) -> { if (exception instanceof ApiException) { ApiException apiException = (ApiException) exception; Log.e(TAG, "Place not found: " + exception.getMessage()); final int statusCode = apiException.getStatusCode(); // TODO: Handle error with given status code. } }); });
Атрибуция
В большинстве случаев фотографии мест можно использовать без указания авторства, или же необходимое указание авторства будет включено в само изображение. Однако объект метаданных фотографии типа PhotoMetadata может содержать один из двух типов дополнительных указаний авторства:
- Attributions — строка с указанием авторства, доступ к которой осуществляется с помощью
PhotoMetadata.getAttributions(). - AuthorAttributions — объект
AuthorAttributions, доступ к которому осуществляется методомPhotoMetadata.getAuthorAttributions().
Если возвращаемый объект PhotoMetadata содержит какой-либо из этих типов указаний на авторство, вам необходимо включить эти указания в ваше приложение везде, где вы отображаете изображение. Для получения дополнительной информации см. раздел «Отображение указаний на авторство» .
Использование и выставление счетов
За вызовы функции fetchPhoto() для A Place Photos (Legacy) взимается плата. Подробности см. на странице « Использование и оплата» .