میتوانید از «کیت توسعه نرمافزار مکانها، ویژه Android (قدیمی)» برای درخواست عکس مکان استفاده کنید تا در برنامهتان نمایش داده شود. عکسهایی که سرویس عکس برمیگرداند از منابع مختلفی میآید، ازجمله عکسهای همیاریشده توسط کاربران و مالکان کسبوکار.
«کیت توسعه نرمافزار مکانها، ویژه Android» (قدیمی) تصویر شطرنجی با حداکثر اندازه ۱۶۰۰ در ۱۶۰۰ پیکسل برمیگرداند.
فرایند بازیابی عکس
برای بازیابی تصویر مکان:
- از جزئیات مکان (قدیمی) برای واکشی شیء
Place(بااستفاده ازfetchPlace()) استفاده کنید. حتماً فیلدPlace.Field PHOTO_METADATASرا در فهرست فیلدها برای گنجاندن در شیءPlaceپاسخ اضافه کنید. - در
OnSuccessListenerبرایFetchPlaceResponse، ازPlace.getPhotoMetadas()برای دریافت شیء فراداده عکس، از نوعPhotoMetadataاز شیء پاسخPlaceاستفاده کنید. - شیء
FetchPhotoRequestایجاد کنید، بهطور اختیاری حداکثر ارتفاع و عرض (به پیکسل) را مشخص کنید. عکسها میتوانند حداکثر ۱۶۰۰ پیکسل عرض یا ارتفاع داشته باشند. - برای درخواست کردن تصویر شطرنجی عکس، از
PlacesClient.fetchPhoto()استفاده کنید. OnSuccessListenerرا اضافه کنید و عکس را ازFetchPhotoResponseدریافت کنید.
دریافت عکس
مثال زیر نحوه دریافت عکس مکان را نشان میدهد:
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. } } }
جاوا
// 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،
میتواند حاوی یکی از دو نوع اسناد اضافی زیر باشد:
- ارجاعها، رشته ارجاعی که توسط
PhotoMetadata.getAttributions()قابلدسترسی است. - AuthorAttributions، یک
AuthorAttributionsشیء که توسطPhotoMetadata.getAuthorAttributions()قابل دسترسی است.
اگر شیء PhotoMetadata برگشتی شامل هریک از انواع ارجاع باشد، باید
ارجاع را در برنامهتان در هر جایی که تصویر را نمایش میدهید بگنجانید. برای اطلاعات بیشتر،
نمایش ارجاعات را ببینید.
استفاده و صورتحساب
برای تماس با fetchPhoto()، یک شناسه کالا عکسهای مکان (قدیمی) کسر میشود.
برای جزئیات بیشتر، صفحه استفاده و صورتحساب را ببینید.