Bạn có thể sử dụng SDK Địa điểm cho Android (Phiên bản cũ) để yêu cầu ảnh về địa điểm và hiển thị ảnh đó trong ứng dụng của mình. Ảnh do dịch vụ ảnh trả về đến từ nhiều nguồn, bao gồm cả ảnh do chủ doanh nghiệp và người dùng đóng góp.
SDK Địa điểm cho Android (Phiên bản cũ) trả về một hình ảnh bitmap có kích thước tối đa là 1600 x 1600 pixel.
Quy trình truy xuất ảnh
Cách truy xuất hình ảnh cho một địa điểm:
- Sử dụng Place Details (Cũ) để tìm nạp đối tượng
Place(bằng cách sử dụngfetchPlace()). Hãy nhớ thêm trườngPlace.Field PHOTO_METADATASvào danh sách các trường cần đưa vào đối tượngPlacephản hồi. - Trong
OnSuccessListenerchoFetchPlaceResponse, hãy sử dụngPlace.getPhotoMetadas()để lấy đối tượng siêu dữ liệu ảnh thuộc loạiPhotoMetadatatừ đối tượng phản hồiPlace. - Tạo đối tượng
FetchPhotoRequest, tuỳ ý chỉ định chiều cao và chiều rộng tối đa (tính bằng pixel). Ảnh có thể có chiều rộng hoặc chiều cao tối đa là 1600px. - Sử dụng
PlacesClient.fetchPhoto()để yêu cầu bitmap ảnh. - Thêm
OnSuccessListenervà lấy ảnh từFetchPhotoResponse.
Chụp ảnh
Ví dụ sau đây minh hoạ cách lấy ảnh về địa điểm:
Kotlin
// 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. } }); });
Phân bổ
Trong hầu hết các trường hợp, bạn có thể sử dụng ảnh về địa điểm mà không cần ghi nhận tác giả hoặc sẽ có thông tin ghi nhận tác giả bắt buộc trong ảnh. Tuy nhiên, đối tượng siêu dữ liệu ảnh thuộc loại PhotoMetadata có thể chứa một trong hai loại thuộc tính bổ sung sau:
- Attributions, một chuỗi phân bổ được truy cập bằng
PhotoMetadata.getAttributions(). - AuthorAttributions, một đối tượng
AuthorAttributionsđược truy cập bằngPhotoMetadata.getAuthorAttributions().
Nếu đối tượng PhotoMetadata được trả về có chứa một trong hai loại thông tin ghi nhận tác giả, thì bạn phải đưa thông tin ghi nhận tác giả vào ứng dụng của mình ở bất cứ nơi nào bạn hiển thị hình ảnh. Để biết thêm thông tin,
hãy xem phần Hiển thị thông tin ghi nhận tác giả.
Mức sử dụng và thanh toán
SKU Ảnh về địa điểm (Cũ) được tính phí cho các lệnh gọi đến fetchPhoto().
Hãy xem trang Mức sử dụng và thanh toán để biết thông tin chi tiết.