میتوانید از Places SDK برای Android برای درخواست عکس مکان برای نمایش در برنامه خود استفاده کنید. عکسهای ارائهشده توسط سرویس عکسها از منابع مختلفی از جمله صاحبان مشاغل و عکسهای ارائهشده توسط کاربر میآیند.
فرمت عکس را انتخاب کنید
Places SDK برای Android از دو فرمت برای عکس درخواستی پشتیبانی می کند:
- All Places SDK برای نسخههای اندروید: تصویر بیت مپ را برمیگرداند. تصویر بیت مپ دارای حداکثر اندازه 1600 در 1600 پیکسل است.
- مکانهای SDK برای Android (جدید) نسخه 3.4 و بالاتر: یک URI را به تصویر بیت مپ برمیگرداند. اندازه تصویر بیت مپ حداکثر 4800 در 4800 پیکسل است.
فرآیند بازیابی عکس
برای بازیابی یک تصویر برای یک مکان:
- از Place Details برای واکشی یک شی
Place
استفاده کنید (ازfetchPlace()
یاfindCurrentPlace()
استفاده کنید). حتماً فیلدPlace.Field PHOTO_METADATAS
را در لیست فیلدهایی که باید در شیء پاسخPlace
گنجانده شود، قرار دهید. - در
OnSuccessListener
برایFetchPlaceResponse
یاFindCurrentPlaceResponse
شما:- از
Place.getPhotoMetadas()
برای دریافت شی فوق داده عکس، از نوعPhotoMetadata
از شی پاسخPlace
استفاده کنید. - برای دریافت تصویر بیت مپ:
- یک شی
FetchPhotoRequest
ایجاد کنید، به صورت اختیاری حداکثر ارتفاع و عرض (بر حسب پیکسل) را مشخص کنید. عکس ها می توانند حداکثر عرض یا ارتفاع 1600 پیکسل داشته باشند. - از
PlacesClient.fetchPhoto()
برای درخواست بیت مپ عکس استفاده کنید. - یک
OnSuccessListener
اضافه کنید و عکس را ازFetchPhotoResponse
دریافت کنید.
- یک شی
- برای دریافت URI عکس:
- یک شی
FetchResolvedPhotoUriRequest
برای درخواست ایجاد کنید. عکس ها می توانند حداکثر عرض یا ارتفاع 4800 پیکسل داشته باشند. - از
PlacesClient.fetchResolvedPhotoUri()
برای درخواست URI عکس استفاده کنید. - یک
OnSuccessListener
اضافه کنید و URI عکس را از شیFetchResolvedPhotoUriResponse
دریافت کنید.
- یک شی
- از
به داده های PhotoMetadata اضافه شده در نسخه 3.3.0 و بالاتر دسترسی داشته باشید
Places SDK برای Android (جدید) فیلد AuthorAttributions
را به کلاس PhotoMetadata
اضافه می کند. اگر برنامه شما SDK جدید را فعال میکند، شی PhotoMetadata
که توسط Place.getPhotoMetadas()
برگردانده میشود میتواند حاوی یک یا چند انتساب نویسنده باشد.
هنگامی که شئ PhotoMetadata
حاوی هر گونه انتساب باشد، چه اسناد نویسنده جدید اضافه شده در نسخه 3.3.0 یا اسناد موجود موجود در نسخه 3.2.0 و قبل از آن، باید آنها را همراه با عکس نمایش دهید. برای اطلاعات بیشتر در مورد مدیریت همه انواع اسناد، به اسناد مراجعه کنید.
برای پر کردن شی PhotoMetadata
با اسناد نویسنده، باید:
- وقتی پروژه Google Cloud خود را راهاندازی میکنید، SDK جدید را فعال کنید.
- SDK جدید را در یک فعالیت یا قطعه راهاندازی کنید .
-
Place.Field.PHOTO_METADATAS
را در لیست فیلد درخواست جزئیات مکان قرار دهید. - برای دریافت شیء
Place
PlacesClient.fetchPlace()
و برای دریافت شیPhotoMetadata
Place.getPhotoMetadas()
فراخوانی کنید. فیلد اسناد نویسنده توسطPlacesClient.findCurrentPlace()
پشتیبانی نمی شود. - از
PhotoMetadata.getAuthorAttributions()
برای دریافت اسناد نویسنده استفاده کنید.
عکس بگیر
این بخش نحوه بازیابی عکس را به صورت بیت مپ یا URI توضیح می دهد.
یک عکس مکان را به صورت بیت مپ دریافت کنید
مثال زیر دریافت یک عکس مکان را به صورت بیت مپ نشان می دهد.
کاتلین
// 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.") } } }
جاوا
// 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. } }); });
URI عکس مکان را دریافت کنید
مثال زیر دریافت URI عکس مکان را نشان می دهد.
// 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 FetchResolvedPhotoUriRequest. final FetchResolvedPhotoUriRequest photoRequest = FetchResolvedPhotoUriRequest.builder(photoMetadata) .setMaxWidth(500) // Optional. .setMaxHeight(300) // Optional. .build(); // Request the photo URI placesClient.fetchResolvedPhotoUri(photoRequest).addOnSuccessListener((fetchResolvedPhotoUriResponse) -> { Uri uri = fetchResolvedPhotoUriResponse.getUri(); RequestOptions requestOptions = new RequestOptions().override(Target.SIZE_ORIGINAL); Glide.with(this).load(uri).apply(requestOptions).into(imageView); }).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. } }); });
اسناد
در بیشتر موارد، عکسهای مکان را میتوان بدون ذکر منبع استفاده کرد، یا به عنوان بخشی از تصویر، اسناد مورد نیاز را درج میکند. با این حال، شیء فراداده عکس، از نوع PhotoMetadata
، میتواند شامل یکی از دو نوع اسناد اضافی باشد:
- Attributions ، یک رشته انتساب که توسط
PhotoMetadata.getAttributions()
قابل دسترسی است. - AuthorAttributions ، یک شی
AuthorAttributions
که توسطPhotoMetadata.getAuthorAttributions()
قابل دسترسی است.
اگر شی PhotoMetadata
برگردانده شده شامل هر یک از انواع انتساب است، باید در هر کجا که تصویر را نمایش می دهید، انتساب را در برنامه خود قرار دهید. برای اطلاعات بیشتر، به نمایش اسناد اشاره کنید.
استفاده و صورتحساب
برای تماس با fetchPhoto()
یک Places Photo SKU هزینه می شود. برای جزئیات به صفحه استفاده و صورتحساب مراجعه کنید.