Langsung ke konten

Paling sering dikunjungi

Terakhir dikunjungi

navigation

Mendapatkan Hasil dari Aktivitas

Bagian pelajaran ini mengajarkan Anda cara

  1. Memulai Aktivitas
  2. Menerima Hasilnya

Anda juga harus membaca

Memulai aktivitas lain tidak harus satu arah. Anda juga bisa memulai aktivitas lain dan menerima hasilnya. Untuk menerima hasilnya, panggil startActivityForResult() (sebagai ganti startActivity()).

Misalnya, aplikasi Anda bisa memulai aplikasi kamera dan menerima foto yang diambil sebagai hasilnya. Atau, Anda bisa memulai Aplikasi Orang supaya pengguna bisa memilih seorang kontak dan Anda akan menerima detail kontak itu sebagai hasilnya.

Tentu saja, aktivitas yang merespons harus didesain untuk mengembalikan hasilnya. Bila mengembalikan hasil, aktivitas akan mengirimnya sebagai objek Intent lain. Aktivitas Anda akan menerimanya dalam callback onActivityResult().

Catatan: Anda bisa menggunakan maksud eksplisit maupun implisit saat memanggil startActivityForResult(). Saat memulai salah satu aktivitas Anda sendiri untuk menerima hasil, Anda harus menggunakan maksud eksplisit guna memastikan Anda menerima hasil yang diharapkan.

Memulai Aktivitas

Tidak ada yang khusus pada objek Intent yang Anda gunakan saat memulai aktivitas untuk mendapatkan suatu hasil, namun Anda perlu meneruskan argumen integer tambahan ke metode startActivityForResult().

Argumen integer adalah “kode permintaan” yang mengidentifikasi permintaan Anda. Saat Anda menerima hasil Intent, callback akan memberikan kode permintaan yang sama sehingga aplikasi Anda bisa mengidentifikasi hasilnya dengan benar dan menentukan cara menanganinya.

Misalnya, inilah cara memulai aktivitas yang memungkinkan pengguna mengambil sebuah kontak:

static final int PICK_CONTACT_REQUEST = 1;  // The request code
...
private void pickContact() {
    Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts"));
    pickContactIntent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers
    startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
}

Menerima Hasilnya

Bila pengguna selesai dengan aktivitas selanjutnya dan kembali, sistem akan memanggil metode onActivityResult() aktivitas Anda. Metode ini menyertakan tiga argumen:

Misalnya, inilah cara Anda bisa menangani hasil untuk maksud “pilih kontak”:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Check which request we're responding to
    if (requestCode == PICK_CONTACT_REQUEST) {
        // Make sure the request was successful
        if (resultCode == RESULT_OK) {
            // The user picked a contact.
            // The Intent's data Uri identifies which contact was selected.

            // Do something with the contact here (bigger example below)
        }
    }
}

Dalam contoh ini, hasil Intent yang dikembalikan oleh Aplikasi Orang atau Kontak Android memberikan Uri materi yang mengidentifikasi kontak pilihan pengguna.

Agar berhasil menangani hasilnya, Anda harus memahami format hasil Intent nanti. Mudah melakukannya bila aktivitas yang mengembalikan hasil adalah salah satu aktivitas Anda sendiri. Aplikasi yang disertakan bersama platform Android menawarkan API sendiri yang bisa Anda andalkan untuk data hasil tertentu. Misalnya, Aplikasi Orang selalu mengembalikan hasil bersama URI materi yang mengidentifikasi kontak yang dipilih, dan aplikasi Kamera mengembalikan Bitmap dalam ekstra "data" (lihat kelas tentang Menjepret Foto).

Bonus: Membaca data kontak

Kode di atas yang menampilkan cara mendapatkan hasil dari Aplikasi Orang tidak memberikan detail tentang bagaimana sebenarnya membaca data dari hasil, karena hal itu memerlukan pembahasan lebih jauh tentang penyedia materi. Akan tetapi, jika Anda ingin tahu, inilah beberapa kode lainnya yang menampilkan cara kueri data hasil untuk mendapatkan nomor ponsel dari kontak yang dipilih:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Check which request it is that we're responding to
    if (requestCode == PICK_CONTACT_REQUEST) {
        // Make sure the request was successful
        if (resultCode == RESULT_OK) {
            // Get the URI that points to the selected contact
            Uri contactUri = data.getData();
            // We only need the NUMBER column, because there will be only one row in the result
            String[] projection = {Phone.NUMBER};

            // Perform the query on the contact to get the NUMBER column
            // We don't need a selection or sort order (there's only one result for the given URI)
            // CAUTION: The query() method should be called from a separate thread to avoid blocking
            // your app's UI thread. (For simplicity of the sample, this code doesn't do that.)
            // Consider using CursorLoader to perform the query.
            Cursor cursor = getContentResolver()
                    .query(contactUri, projection, null, null, null);
            cursor.moveToFirst();

            // Retrieve the phone number from the NUMBER column
            int column = cursor.getColumnIndex(Phone.NUMBER);
            String number = cursor.getString(column);

            // Do something with the phone number...
        }
    }
}

Catatan: Sebelum Android 2.3 (API level 9), melakukan kueri pada Contacts Provider (seperti yang ditampilkan di atas) mengharuskan aplikasi mendeklarasikan izin READ_CONTACTS (lihat Keamanan dan Izin). Akan tetapi, mulai dengan Android 2.3, Aplikasi Orang/Kontak memberi izin sementara pada aplikasi Anda untuk membaca dari Penyedia Kontak bila aplikasi mengembalikan hasil kepada Anda. Izin sementara ini berlaku hanya untuk kontak tertentu yang diminta, sehingga Anda tidak bisa melakukan kueri kontak selain yang ditetapkan oleh Uri maksud, kecuali jika Anda mendeklarasikan izin READ_CONTACTS.

Situs ini menggunakan cookies untuk menyimpan preferensi Anda tentang bahasa di situs tertentu dan opsi tampilan.

Dapatkan berita dan tips terbaru dari developer Android yang akan membantu Anda mencapai kesuksesan di Google Play.

* Wajib Diisi

Hore!

Ikuti Google Developers di WeChat

Buka situs ini dalam bahasa ?

Anda meminta halaman dalam bahasa , namun preferensi bahasa untuk situs ini adalah .

Ingin mengubah preferensi bahasa dan mengakses situs ini dalam bahasa ? Jika nanti Anda ingin mengubah preferensi bahasa, gunakan menu bahasa di bagian bawah setiap halaman.

Kelas ini memerlukan tingkat API atau yang lebih tinggi

Dokumen ini tersembunyi karena level API yang Anda pilih untuk dokumentasi ini adalah . Anda dapat mengubah level API dokumentasi dengan pemilih di atas menu navigasi sebelah kiri.

Untuk informasi lebih lanjut tentang menentukan level API yang diperlukan aplikasi Anda, baca Mendukung Versi Platform Yang Berbeda.

Take a short survey?
Help us improve the Android developer experience. (April 2018 — Developer Survey)