Anda sudah siap!

Untuk mulai mengembangkan, masuklah ke dokumentasi developer kami.

Aktifkan Google Places API for Android

Untuk membantu Anda memulai, kami akan memandu Anda melalui Google Developers Console untuk melakukan beberapa hal terlebih dahulu:

  1. Buat atau pilih sebuah proyek
  2. Aktifkan Google Places API for Android
  3. Buat kunci yang sesuai
Lanjutkan

Place Photos

Anda bisa menggunakan Google Places API for Android untuk meminta foto tempat agar ditampilkan dalam aplikasi Anda. Foto yang dikembalikan oleh layanan foto berasal dari berbagai sumber, termasuk pemilik bisnis dan foto kontribusi pengguna Google+. Untuk mengambil gambar suatu tempat, Anda harus melakukan langkah-langkah berikut:

  1. Panggil GeoDataApi.getPlacePhotos(), dengan meneruskan string bersama ID tempat. Ini akan mengembalikan sebuah instance PlacePhotoMetadataResult.
  2. Panggil getPhotoMetadata() pada instance PlacePhotoMetadataResult untuk mendapatkan PlacePhotoMetadataBuffer yang menyimpan daftar instance PlacePhotoMetadata (satu untuk setiap foto).
  3. Panggil get() pada instance PlacePhotoMetadataBuffer, dengan meneruskan integer untuk mengambil instance PlacePhotoMetadata pada indeks yang diberikan.

Google Places API for Android memerlukan akses jaringan, karena itu semua panggilan harus dilakukan di latar belakang, di luar thread UI utama. Karena itu, kami menyarankan pengambilan foto di latar belakang secara asinkron. Sebagai contoh cara melakukannya, lihat Mengambil foto di latar belakang menggunakan AsyncTask, dan Mengambil foto di latar belakang menggunakan ResultCallback.

Cuplikan kode yang disederhanakan berikut ini memperagakan cara mengambil daftar foto untuk suatu tempat.

// Get a PlacePhotoMetadataResult containing metadata for the first 10 photos.
PlacePhotoMetadataResult result = Places.GeoDataApi
      .getPlacePhotos(mGoogleApiClient, placeId).await();
// Get a PhotoMetadataBuffer instance containing a list of photos (PhotoMetadata).
if (result != null && result.getStatus().isSuccess()) {
      PlacePhotoMetadataBuffer photoMetadataBuffer = result.getPhotoMetadata();
}

Cuplikan kode yang disederhanakan berikut ini memperagakan pengambilan instance PlacePhotoMetadata, kemudian menggunakannya untuk mendapatkan gambar bitmap berukuran penuh dan teks atribusi:

// Get the first photo in the list.
PlacePhotoMetadata photo = photoMetadataBuffer.get(0);
// Get a full-size bitmap for the photo.
Bitmap image = photo.getPhoto(mGoogleApiClient).await()
    .getBitmap();
// Get the attribution text.
CharSequence attribution = photo.getAttributions();

Mengambil foto di latar belakang menggunakan AsyncTask

Kami menyarankan agar Anda menggunakan AsyncTask untuk mengimplementasikan foto tempat di aplikasi Anda. Berikut rangkuman langkah-langkah yang diperlukan:

  1. Hubungkan ke Places API.
  2. Buat sebuah kelas tugas yang memperluas AsyncTask guna membungkus panggilan untuk mengambil PlacePhotoMetadata dan meminta gambar.
  3. Buat metode yang membuat instance kelas itu untuk menangani permintaan gambar.

Membuat kelas tugas foto

Kelas contoh berikut ini mengambil ID tempat dan mendapatkan foto pertama dalam daftar yang dikembalikan. Anda bisa menggunakan kelas ini sebagai template untuk kelas yang akan Anda buat dalam aplikasi Anda sendiri.

abstract class PhotoTask extends AsyncTask<String, Void, PhotoTask.AttributedPhoto> {

    private int mHeight;

    private int mWidth;

    public PhotoTask(int width, int height) {
        mHeight = height;
        mWidth = width;
    }

    /**
     * Loads the first photo for a place id from the Geo Data API.
     * The place id must be the first (and only) parameter.
     */
    @Override
    protected AttributedPhoto doInBackground(String... params) {
        if (params.length != 1) {
            return null;
        }
        final String placeId = params[0];
        AttributedPhoto attributedPhoto = null;

        PlacePhotoMetadataResult result = Places.GeoDataApi
                .getPlacePhotos(mGoogleApiClient, placeId).await();

        if (result.getStatus().isSuccess()) {
            PlacePhotoMetadataBuffer photoMetadataBuffer = result.getPhotoMetadata();
            if (photoMetadata.getCount() > 0 && !isCancelled()) {
                // Get the first bitmap and its attributions.
                PlacePhotoMetadata photo = photoMetadata.get(0);
                CharSequence attribution = photo.getAttributions();
                // Load a scaled bitmap for this photo.
                Bitmap image = photo.getScaledPhoto(mGoogleApiClient, mWidth, mHeight).await()
                        .getBitmap();

                attributedPhoto = new AttributedPhoto(attribution, image);
            }
            // Release the PlacePhotoMetadataBuffer.
            photoMetadataBuffer.release();
        }
        return attributedPhoto;
    }

    /**
     * Holder for an image and its attribution.
     */
    class AttributedPhoto {

        public final CharSequence attribution;

        public final Bitmap bitmap;

        public AttributedPhoto(CharSequence attribution, Bitmap bitmap) {
            this.attribution = attribution;
            this.bitmap = bitmap;
        }
    }
}

Menangani permintaan foto

Contoh berikut memperagakan pembuatan metode yang membuat instance kelas contoh (PhotoTask), untuk meminta gambar suatu tempat.

private void placePhotosTask() {
    final String placeId = "ChIJrTLr-GyuEmsRBfy61i59si0"; // Australian Cruise Group

    // Create a new AsyncTask that displays the bitmap and attribution once loaded.
    new PhotoTask(mImageView.getWidth(), mImageView.getHeight()) {
        @Override
        protected void onPreExecute() {
            // Display a temporary image to show while bitmap is loading.
            mImageView.setImageResource(R.drawable.empty_photo);
        }

        @Override
        protected void onPostExecute(AttributedPhoto attributedPhoto) {
            if (attributedPhoto != null) {
                // Photo has been loaded, display it.
                mImageView.setImageBitmap(attributedPhoto.bitmap);

                // Display the attribution as HTML content if set.
                if (attributedPhoto.attribution == null) {
                    mText.setVisibility(View.GONE);
                } else {
                    mText.setVisibility(View.VISIBLE);
                    mText.setText(Html.fromHtml(attributedPhoto.attribution.toString()));
                }

            }
        }
    }.execute(placeId);
}

Mengambil foto di latar belakang menggunakan ResultCallback

Sebagai alternatif untuk AsyncTask, Anda bisa membuat permintaan foto secara asinkron dengan menggunakan ResultCallback. Contoh kode berikut memperagakan cara melakukannya.

private ResultCallback<PlacePhotoResult> mDisplayPhotoResultCallback
        = new ResultCallback<PlacePhotoResult>() {
    @Override
    public void onResult(PlacePhotoResult placePhotoResult) {
        if (!placePhotoResult.getStatus().isSuccess()) {
            return;
        }
        mImageView.setImageBitmap(placePhotoResult.getBitmap());
    }
};

/**
 * Load a bitmap from the photos API asynchronously
 * by using buffers and result callbacks.
 */
private void placePhotosAsync() {
    final String placeId = "ChIJrTLr-GyuEmsRBfy61i59si0"; // Australian Cruise Group
    Places.GeoDataApi.getPlacePhotos(mGoogleApiClient, placeId)
            .setResultCallback(new ResultCallback<PlacePhotoMetadataResult>() {


                @Override
                public void onResult(PlacePhotoMetadataResult photos) {
                    if (!photos.getStatus().isSuccess()) {
                        return;
                    }

                    PlacePhotoMetadataBuffer photoMetadataBuffer = photos.getPhotoMetadata();
                    if (photoMetadataBuffer.getCount() > 0) {
                        // Display the first bitmap in an ImageView in the size of the view
                        photoMetadataBuffer.get(0)
                                .getScaledPhoto(mGoogleApiClient, mImageView.getWidth(),
                                        mImageView.getHeight())
                                .setResultCallback(mDisplayPhotoResultCallback);
                    }
                    photoMetadataBuffer.release();
                }
            });
}

Atribusi

Umumnya, foto tempat bisa digunakan tanpa atribusi, atau mengharuskan dimasukkannya atribusi yang diperlukan sebagai bagian dari gambar. Akan tetapi, jika instance PlacePhotoMetadata yang dikembalikan menyertakan atribusi, maka Anda harus menyertakan atribusi tambahan dalam aplikasi di mana saja Anda menampilkan gambar tersebut. Untuk informasi selengkapnya, lihat Menampilkan Atribusi.

Batas penggunaan

Pengambilan gambar menghabiskan satu unit kuota; tidak ada batas penggunaan untuk pengambilan metadata foto. Lihat dokumentasi mengenai batas penggunaan.

Kirim masukan tentang...

location_on
Google Places API for Android