Bagaimana cara membuat intent untuk Activity lain?
Kapan menggunakan ACTION_VIEW vs ACTION_SEND?
Mengapa perlu memeriksa resolveActivity()?
Bagaimana cara mengirim data ekstra dengan intent?
Reference Points
Android Development with Kotlin (Slides 3-9, 50)
Pengertian Intent dan Fungsinya
Intent adalah mekanisme di Android untuk meminta aksi dari komponen aplikasi lain, biasanya digunakan untuk navigasi antar Activity. Setiap intent mengandung dua informasi utama: aksi yang ingin dilakukan (seperti melihat, mengedit, atau mengirim) dan data yang menjadi target operasi tersebut.
Contoh analogi: Bayangkan intent seperti surat permintaan yang berisi jenis pekerjaan (aksi) dan dokumen yang perlu diproses (data). Sistem Android akan meneruskan “surat” ini ke komponen yang mampu menanganinya.
Intent menjadi tulang punggung navigasi di Android karena memungkinkan:
Komunikasi antar Activity dalam satu aplikasi
Integrasi dengan aplikasi pihak ketiga (misalnya membuka peta atau galeri foto)
Eksekusi tindakan sistem (seperti berbagi konten atau pencarian web)
Explicit Intent untuk Navigasi Internal
Explicit intent digunakan ketika kita mengetahui secara pasti komponen tujuan. Format dasar pembuatan explicit intent:
val intent = Intent(context, TargetActivity::class.java)startActivity(intent)
Untuk mengirim data ke Activity tujuan, gunakan metode putExtra():
fun bukaDetailCatatan() {val intent = Intent(this, DetailActivity::class.java)intent.putExtra("ID_CATATAN", idCatatan) // Mengirim data IDstartActivity(intent)}
Contoh kasus nyata: Aplikasi e-commerce menggunakan explicit intent untuk membuka halaman detail produk dari daftar produk, dengan mengirim ID produk sebagai data ekstra.
Implicit Intent untuk Aksi Umum
Implicit intent digunakan saat kita ingin sistem menemukan komponen yang sesuai secara otomatis berdasarkan jenis aksi. Contoh khas:
Pentingnya pemeriksaan resolveActivity(): Metode ini memverifikasi apakah ada aplikasi yang bisa menangani intent sebelum dijalankan, mencegah crash jika tidak ada handler yang tersedia. Jika hasilnya null, sebaiknya tampilkan pesan error atau alternatif lain.
Mekanisme StartActivity dan Data Return
Proses navigasi Activity menggunakan startActivity() melibatkan:
Sistem Android mencari Activity yang cocok dengan intent
Membuat instance Activity baru dan menampilkannya
Menyimpan Activity sebelumnya di back stack
Untuk menerima hasil dari Activity tujuan, gunakan startActivityForResult():
// Memulai Activity dengan request codestartActivityForResult(intent, REQUEST_CODE)// Menangani hasil di Activity asaloverride fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {val hasil = data?.getStringExtra("HASIL")// Proses hasil}}
Contoh penggunaan: Memilih kontak dari daftar kontak sistem dan menerima informasi kontak yang dipilih.
Summary
Intent berfungsi sebagai mekanisme navigasi utama di Android dengan dua jenis utama: eksplisit untuk target spesifik dalam aplikasi, dan implisit untuk aksi umum yang bisa ditangani aplikasi lain. Pengiriman data antar Activity menggunakan putExtra() dengan key-value pairs, sementara pemeriksaan resolveActivity() penting untuk mencegah crash. Explicit intent menggunakan konstruktor dengan class tujuan eksplisit, sedangkan implicit intent mendefinisikan aksi dan tipe data untuk dicocokkan sistem. Pemahaman kedua jenis intent ini penting untuk membangun alur navigasi yang efektif.
Additional Information
Intent Filters untuk Aplikasi Pihak Ketiga
Agar aplikasi bisa menangani implicit intent dari aplikasi lain, perlu mendeklarasikan intent filter di AndroidManifest.xml:
Sistem akan mencocokkan komponen berdasarkan action, category, dan data yang dideklarasikan. Jika beberapa aplikasi cocok, sistem akan menampilkan dialog pemilihan aplikasi.
Keamanan dan Batasan Intent
Exported Activity: Activity yang mengekspor intent filter harus mempertimbangkan keamanan karena bisa diakses aplikasi lain
Permission: Bisa membatasi akses dengan permission custom
Data Validation: Selalu validasi data yang diterima dari intent eksternal
PendingIntent: Untuk operasi yang dijalankan nanti dengan hak akses aplikasi pengirim
Penanganan Error dan Edge Cases
ActivityNotFoundException: Terjadi saat tidak ada Activity yang cocok untuk explicit intent
SecurityException: Saat mencoba mengakses Activity tanpa permission
Data overflow: Hindari mengirim data terlalu besar via intent (lebih dari 1MB)
Background limits: Pada Android 8+ (API 26+), startService dari background dibatasi
Best Practices
Gunakan explicit intent untuk komunikasi internal aplikasi
Selalu tangkap SecurityException saat memanggil intent eksternal
Batasi data di intent (gunakan ViewModel untuk data besar)
Gunakan FLAG_ACTIVITY_NEW_TASK untuk memulai Activity dari non-UI context
Implementasikan deep linking dengan skema URI khusus
Eksperimen Mandiri
Buat aplikasi dengan dua Activity yang saling mengirim data dengan berbagai tipe (String, Parcelable, Serializable)
Implementasikan implicit intent untuk membuka URL, peta, dan berbagi teks
Uji error handling dengan mematikan fitur yang diperlukan (misal: nonaktifkan semua browser untuk ACTION_VIEW)
Bandingkan performa pengiriman data besar via intent vs ViewModel
Tools dan Referensi
Android Studio Intent Tool: adb shell am start untuk testing intent