شما میتوانید از Places SDK برای اندروید (Legacy) برای درخواست عکس مکان جهت نمایش در برنامه خود استفاده کنید. عکسهایی که توسط سرویس عکسها برگردانده میشوند از منابع مختلفی از جمله صاحبان مشاغل و عکسهای ارائه شده توسط کاربران میآیند.
کیت توسعه نرمافزاری Places برای اندروید (Legacy) یک تصویر بیتمپ با حداکثر اندازه ۱۶۰۰ در ۱۶۰۰ پیکسل برمیگرداند.
فرآیند بازیابی عکس
برای بازیابی تصویر یک مکان:
- از Place Details (Legacy) برای دریافت یک شیء
Placeاستفاده کنید (با استفاده ازfetchPlace()). حتماً فیلدPlace.Field PHOTO_METADATASرا در لیست فیلدهایی که باید در شیءPlaceپاسخ گنجانده شوند، قرار دهید. - در
OnSuccessListenerمربوط بهFetchPlaceResponseخود، ازPlace.getPhotoMetadas()برای دریافت شیء فراداده عکس، از نوعPhotoMetadata، از شیءPlaceپاسخ استفاده کنید. - یک شیء
FetchPhotoRequestایجاد کنید، که به صورت اختیاری حداکثر ارتفاع و عرض (برحسب پیکسل) را مشخص میکند. عکسها میتوانند حداکثر عرض یا ارتفاع ۱۶۰۰ پیکسل داشته باشند. - برای درخواست بیتمپ عکس از
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. } } }
جاوا
// 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() در فایل SKU مربوط به عکسهای یک مکان (قدیمی)، هزینه دریافت میشود. برای جزئیات بیشتر به صفحه نحوه استفاده و پرداخت مراجعه کنید.