Bagian pelajaran ini mengajarkan Anda cara
- Membangun Maksud Implisit
- Memverifikasi Adanya Aplikasi yang akan Menerima Maksud
- Memulai Aktivitas dengan Maksud
- Menampilkan Pemilih Aplikasi
Anda juga harus membaca
Salah satu fitur terpenting Android adalah kemampuan aplikasi mengirim pengguna ke aplikasi lain
berdasarkan “aksi” yang ingin dilakukannya. Misalnya, jika
aplikasi Anda memiliki alamat bisnis yang ingin ditampilkan pada peta, Anda tidak harus membangun
aktivitas dalam aplikasi yang menampilkan peta. Sebagai gantinya, Anda bisa membuat permintaan untuk melihat alamat itu
menggunakan Intent. Sistem Android kemudian memulai aplikasi yang mampu menampilkan
alamat itu pada peta.
Seperti dijelaskan di kelas pertama, Membangun Aplikasi Pertama Anda, Anda harus menggunakan maksud untuk berpindah di antara aktivitas dalam aplikasi Anda sendiri. Secara umum, Anda melakukannya dengan maksud eksplisit, yang mendefinisikan nama kelas persis dari komponen yang ingin Anda mulai. Akan tetapi, bila Anda ingin aplikasi terpisah melakukan suatu aksi, misalnya ”menampilkan peta,” Anda harus menggunakan maksud implisit.
Pelajaran ini menampilkan kepada Anda cara membuat maksud implisit bagi aksi tertentu, dan cara menggunakannya untuk memulai aktivitas yang melakukan aksi itu dalam aplikasi lain.
Membangun Maksud Implisit
Maksud implisit tidak mendeklarasikan nama kelas komponen yang akan dimulai, melainkan mendeklarasikan
aksi yang akan dilakukan. Aksi ini menetapkan hal yang ingin Anda lakukan, misalnya lihat,
edit, kirim, atau ambil sesuatu. Maksud juga sering berisi data yang dikaitkan
dengan aksi, misalnya alamat yang ingin Anda lihat, atau pesan email yang ingin Anda kirim.
Bergantung pada maksud yang ingin Anda buat, data bisa berupa Uri,
salah satu tipe data lain, atau maksud mungkin tidak memerlukan data sama sekali.
Jika data berupa Uri, ada sebuah konstruktor Intent()sederhana yang bisa Anda gunakan untuk mendefinisikan aksi dan
data.
Misalnya, inilah cara membuat maksud untuk memulai panggilan telepon menggunakan data Uri untuk menetapkan nomor ponsel:
Uri number = Uri.parse("tel:5551234");
Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
Bila aplikasi Anda memicu maksud ini dengan memanggil startActivity(), Aplikasi telepon akan memulai panggilan ke nomor ponsel yang diberikan.
Inilah sepasang maksud lain dan aksinya serta pasangan data Uri:
- Melihat peta:
// Map point based on address Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California"); // Or map point based on latitude/longitude // Uri location = Uri.parse("geo:37.422219,-122.08364?z=14"); // z param is zoom level Intent mapIntent = new Intent(Intent.ACTION_VIEW, location); - Melihat laman web:
Uri webpage = Uri.parse("http://www.android.com"); Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);
Jenis maksud implisit lainnya memerlukan data “ekstra” yang menyediakan tipe data berbeda,
misalnya string. Anda bisa menambahkan satu atau beberapa potongan data ekstra yang menggunakan beragam metode putExtra().
Secara default, sistem menentukan tipe MIME yang sesuai dengan yang diperlukan oleh maksud berdasarkan
data Uri yang disertakan. Jika Anda tidak menyertakan Uri dalam
maksud, biasanya Anda harus menggunakan setType() untuk menetapkan tipe
data yang dikaitkan dengan maksud. Menyetel tipe MIME akan menetapkan lebih jauh jenis
aktivitas yang akan menerima maksud.
Inilah beberapa maksud lainnya yang menambahkan data ekstra untuk menetapkan aksi yang diinginkan:
- Mengirim email beserta lampiran:
Intent emailIntent = new Intent(Intent.ACTION_SEND); // The intent does not have a URI, so declare the "text/plain" MIME type emailIntent.setType(HTTP.PLAIN_TEXT_TYPE); emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"jon@example.com"}); // recipients emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Email subject"); emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message text"); emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://path/to/email/attachment")); // You can also attach multiple items by passing an ArrayList of Uris - Membuat acara kalender:
Intent calendarIntent = new Intent(Intent.ACTION_INSERT, Events.CONTENT_URI); Calendar beginTime = Calendar.getInstance().set(2012, 0, 19, 7, 30); Calendar endTime = Calendar.getInstance().set(2012, 0, 19, 10, 30); calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis()); calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis()); calendarIntent.putExtra(Events.TITLE, "Ninja class"); calendarIntent.putExtra(Events.EVENT_LOCATION, "Secret dojo");
Catatan: Maksud untuk acara kalender ini hanya didukung dengan API level 14 dan yang lebih tinggi.
Catatan: Anda perlu mendefinisikan Intent sespesifik mungkin. Misalnya, jika Anda ingin menampilkan gambar
menggunakan maksud ACTION_VIEW, Anda harus menetapkan tipe MIME
image/*. Hal ini mencegah aplikasi yang bisa “menampilkan” tipe data lain (seperti aplikasi peta) agar tidak
terpicu oleh maksud.
Memverifikasi Adanya Aplikasi yang akan Menerima Maksud
Walaupun platform Android menjamin bahwa maksud tertentu akan dicocokkan ke salah satu aplikasi bawaan (misalnya aplikasi Phone, Email, atau Kalender), Anda harus selalu menyertakan langkah verifikasi sebelum memanggil maksud.
Perhatian: Jika Anda memanggil maksud dan tidak ada aplikasi yang tersedia pada perangkat yang bisa menangani maksud itu, aplikasi Anda akan mogok.
Untuk memverifikasi adanya aktivitas yang bisa merespons maksud, panggil queryIntentActivities() untuk mengambil daftar
aktivitas yang mampu menangani Intent Anda. Jika List yang dikembalikan tidak kosong, Anda bisa menggunakan maksud tersebut dengan aman. Misalnya:
PackageManager packageManager =getPackageManager(); Listactivities = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); boolean isIntentSafe = activities.size() > 0;
Jika isIntentSafe berupa true, maka setidaknya ada satu aplikasi yang merespons
maksud. Jika false, maka tidak ada aplikasi yang akan menangani maksud tersebut.
Catatan: Anda harus melakukan pemeriksaan ini bila aktivitas dimulai lebih dahulu jika Anda perlu menonaktifkan fitur yang menggunakan maksud sebelum pengguna berupaya menggunakannya. Jika Anda mengetahui aplikasi tertentu yang bisa menangani maksud, Anda juga bisa memberikan tautan bagi pengguna untuk mengunduh aplikasi itu (lihat cara menautkan ke produk Anda di Google Play).
Memulai Aktivitas dengan Maksud
Gambar 1.Contoh dialog pemilihan yang muncul bila ada lebih dari satu aplikasi yang bisa menangani maksud.
Setelah Anda membuat Intent dan menyetel info ekstra, panggil startActivity() untuk mengirimnya ke sistem. Jika sistem
mengidentifikasi lebih dari satu aktivitas yang bisa menangani maksud, sebuah dialog akan ditampilkan kepada pengguna untuk
memilih aplikasi yang akan digunakan, seperti yang ditampilkan dalam gambar 1. Bila hanya ada satu aktivitas yang menangani
maksud, sistem akan segera memulainya.
startActivity(intent);
Inilah contoh lengkap yang menampilkan cara membuat maksud agar menampilkan peta, memverifikasikan adanya aplikasi yang akan menangani maksud itu, kemudian memulainya:
// Build the intent
Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
// Verify it resolves
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0);
boolean isIntentSafe = activities.size() > 0;
// Start an activity if it's safe
if (isIntentSafe) {
startActivity(mapIntent);
}
Menampilkan Pemilih Aplikasi
Gambar 2. Dialog pemilih.
Perhatikan, bila memulai aktivitas dengan meneruskan Intent Anda ke startActivity() dan ada lebih dari satu aplikasi yang merespons
maksud, pengguna bisa memilih aplikasi yang akan digunakan secara default (dengan memilih kotak centang di bagian bawah
dialog; lihat gambar 1). Ini bagus saat melakukan aksi yang untuk itu biasanya pengguna
ingin selalu menggunakan aplikasi yang sama, misalnya saat membuka laman web (pengguna
cenderung menggunakan satu browser web saja) atau mengambil foto (pengguna cenderung menyukai satu kamera).
Akan tetapi, jika aksi yang akan dilakukan bisa ditangani oleh banyak aplikasi dan pengguna mungkin lebih menyukai aplikasi berbeda untuk setiap kalinya—misalnya aksi “berbagi”, bila pengguna mungkin memiliki beberapa aplikasi yang digunakan untuk berbagi suatu item—Anda harus menampilkan secara eksplisit sebuah dialog pemilih seperti yang ditampilkan dalam gambar 2. Dialog pemilih memaksa pengguna selalu memilih aplikasi yang akan digunakan untuk aksi (pengguna tidak bisa memilih aplikasi default untuk aksi itu).
Untuk menampilkan pemilih, buat Intent menggunakan createChooser() dan teruskan startActivity() padanya. Misalnya:
Intent intent = new Intent(Intent.ACTION_SEND);
...
// Always use string resources for UI text.
// This says something like "Share this photo with"
String title = getResources().getString(R.string.chooser_title);
// Create intent to show chooser
Intent chooser = Intent.createChooser(intent, title);
// Verify the intent will resolve to at least one activity
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(chooser);
}
Ini menampilkan dialog berisi daftar aplikasi yang merespons maksud yang diteruskan ke metode createChooser() dan menggunakan teks yang disediakan sebagai
judul dialog.