09 Februari 2012

Activity: Menjalankan Activity

Kita bisa menjalankan activity dengan memanggil method startActivity(), memberikan activity tersebut sebuah Intent yang menggambarkan activity yang ingin kita jalankan. Intent akan memberitahukan nama activity atau bisa juga tipe aksi seperti apa yang ingin dijalankan, dan kemudian sistem akan memilih activity yang sesuai untuk keingin kita, bisa saja activity tersebut berasal dari aplikasi lain. Intent bisa juga membawa sejumlah kecil data yang akan digunakan oleh activity yang dijalankan.

Ketika kita bekerja dalam aplikasi kita sendiri, kita lebih sering menjalankan activity yang sudah diketahui. Kita juga bisa melakukan hal ini dengan cara membuat intent yang secara eksplisit menggambarkan activity yang ingin dijalankan, menggunakan nama class. Contoh dibawah ini, bagaimana sebuah aactivity menjalankan activity lain yang bernama ActivitySignIn.

Intent niat = new Intent(this, ActivitySignIn.class);
startActivity(niat);

Namun bagaimanapun, aplikasi kita mungkin ingin melakukan beberapa pekerjaan, misalnya mengirimkan email, mengirimkan sms, atau update status, menggunakan data dari activity kita. Dalam hal ini , aplikasi kita mungkin tidak memiliki activity sendiri untuk melakukan pekerjaan tersebut, sehingga kita perlu menggunakan activity milik aplikasi lain dalam perangkat kita, yang bisa melakukan pekerjaan yang kita diinginkan. Di sinilah intent sangat bermanfaat, kita bisa membuat intent yang menggambarkan pekerjaan seperti apa yang ingin kita lakukan, dan sistem kemudian akan menjalankan activity yang sesuai dari aplikasi lain. Jika ada beberapa activity yang bisa menangani intent tersebut, makan user akan diminta memilih activity mana yang akan digunakan. Sebagai contoh, jika kita ingin agar user bisa mengirim sebuah email, kita bisa membuat intent seperti berikut ini.

Intent niat = new Intent(Intent.ACTION_SEND);
niat.putExtra(Intent.EXTRA_EMAIL, recipientArray);
startActivity(niat);

Tambahan extra berupa EXTRA_EMAIL yang ditambahkan ke intent adalah sebuah string array dari alamat email tujuan pengiriman email tersebut. Ketika sebuah aplikasi email merespon terhadap intent ini, aplikasi email tersebut akan membaca string array yang diberikan oleh extra dan menempatkannya di pengisian "kepada" dari komposisi form email. Dalam situasi ini, activity dari aplikasi email dijalankan, dan ketika user selesai, akan kembali ke activity dari aplikasi kita.


Menjalankan activity karena suatu hasil

Terkadang, kita ingin menerima hasil dari activity yang kita jalankan. Maka, kita menjalankan activity dengan memanggil startActivityForResult(), dan bukannya startActivity(). Kemudian, untuk menerima hasil dari activity yang dijalankan, gunakan method onActivityResult(). Ketika activity yang dijalankan selesai, method tersebut akan mengembalikan sebuah hasil dalam bentuk Intent ke dalam method onActivityResult().

Sebagai contoh, mungkin kita ingin agar user memilih salah satu contact, dan kita ingin melakukan sesuatu dengan informasi yang ada di contact yang dipilih. Berikut ini adalah contoh bagaimana kita membuat sebuah intent dan menangani hasilnya:

private void pilihKontak() {
   /* Membuat sebuah Intent untuk "memilih" sebuah nama kontak, berdasarkan content provider URI */
   Intent niat = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
   startActivityForResult(niat, PICK_CONTACT_REQUEST);
}

@Override
protected void onActivityResult(int kodeRequest, int kodeHasil, Intent data) {
   /* Jika request berjalan lancar(OK), dan request yang dimaksud adalah PICK_CONTACT_REQUEST */
   if (kodeHasil == Activity.RESULT_OK && kodeRequest == PICK_CONTACT_REQUEST) {
      /* Melakukan query kepada content provider milik kontak untuk mengetahui nama kontak */
      Cursor kursor = getContentResolver().query(data.getData(), new String[] {Contacts.DISPLAY_NAME}, null, null, null);
      if (kursor.moveToFirst()) {  // True jika kursor tidak kosong
         int indexKolom = kursor.getColumnIndex(Contacts.DISPLAY_NAME);
         String nama = kursor.getString(indexKolom);
         /* Tempat melakukan sesuatu terhadap nama kontak yang dipilih... */
      }
   }
}

Contoh di atas menunjukan dasar logic yang harus digunakan pada method onActivityResult() agar method tersebut dapat menangani hasil dari sebuah activity. Kondisi (if) yang pertama memeriksa apakah request sukses (jika sukses, kemudian kodeHasil akan menjadi RESULT_OK) dan apakah request terhadap hasil dari respon diketahui. Dalam kasus ini, yang dimaksud adalah kodeRequest cocok dengan parameter kedua yang terkirim bersama dengan startActivityForResult(). Dari sana, kode yang menangani hasil activity setelah query terhadap data, dikembalikan (return) dalam sebuah Intent (parameter data).

Apa yang terjadi adalah, sebuah ContentResolver melakukan query terhadap content provider, yang mana me-return sebuah Cursor sehingga data yang di-query bisa terbaca.


Mematikan activity

Kita bisa mematikan activity dengan memanggil method finish(). Kita juga bisa mematikan activity yang terpisah yang dijalankan sebelumnya dengan memanggil method finishActivity().

Perhatian:Pada sebagian besar kasus, tidak seharusnya kita mematikan activity secara eksplisit menggunakan kedua method tersebut. Seperti yang sudah dibahas sebelumnya mengenai siklus hidup activity, sistem Android mengatur siklus hidup activity untuk kita, jadi kita tidak perlu mematikan activity kita sendiri. Memanggil method tersebut bisa memberikan efek yang merugikan terhadap kelancaran penggunaan perangkat android dan hanya digunakan ketika kita benar-benar menginginkan user tidak bisa kembali ke activity ini.



Tidak ada komentar:

Posting Komentar