Intent memungkinkan Anda memulai aktivitas di aplikasi lain dengan menjelaskan
tindakan yang ingin Anda lakukan, seperti "melihat peta" atau "mengambil
foto", dalam objek Intent
. Jenis intent ini
disebut intent implisit karena tidak menentukan komponen
aplikasi yang akan dimulai, tetapi menentukan tindakan dan menyediakan
beberapa data yang akan digunakan untuk melakukan tindakan tersebut.
Saat Anda memanggil startActivity()
atau startActivityForResult()
dan meneruskan intent implisit, sistem
akan menyelesaikan
intent ke aplikasi yang dapat menangani intent dan memulai
Activity
yang sesuai. Jika ada lebih dari satu aplikasi
yang dapat menangani intent, sistem akan menampilkan dialog kepada pengguna untuk
memilih aplikasi yang akan digunakan.
Halaman ini menjelaskan beberapa intent implisit yang dapat Anda gunakan untuk melakukan tindakan umum, yang disusun menurut jenis aplikasi yang menangani intent tersebut. Setiap bagian juga menunjukkan cara membuat filter intent untuk memberitahukan kemampuan aplikasi Anda dalam melakukan tindakan tersebut.
Perhatian: Jika tidak ada aplikasi di perangkat yang dapat
menerima intent implisit, aplikasi akan error saat memanggil startActivity()
. Untuk memverifikasi lebih dahulu apakah
ada aplikasi yang akan menerima intent tersebut, panggil resolveActivity()
di objek Intent
Anda. Jika hasilnya bukan nol, setidaknya ada
satu aplikasi yang dapat menangani intent, dan aman untuk memanggil startActivity()
. Jika hasilnya
null, jangan gunakan intent dan, jika memungkinkan, nonaktifkan
fitur yang memanggil intent.
Jika Anda tidak memahami cara membuat intent atau filter intent, baca Intent dan Filter Intent terlebih dahulu.
Untuk mempelajari cara memicu intent yang tercantum di halaman ini dari host pengembangan, lihat bagian Memverifikasi intent dengan Android Debug Bridge.
Google Voice Actions
Google Voice Actions memicu beberapa intent yang tercantum di halaman ini sebagai respons terhadap perintah suara. Untuk informasi selengkapnya, lihat Mulai Menggunakan Voice Actions Sistem.
Jam alarm
Berikut adalah tindakan umum untuk aplikasi jam alarm, termasuk informasi yang Anda perlukan untuk membuat filter intent guna mengiklankan kemampuan aplikasi Anda untuk melakukan setiap tindakan.
Membuat alarm
Untuk membuat alarm baru, gunakan tindakan ACTION_SET_ALARM
dan tentukan detail alarm seperti waktu dan pesan menggunakan tambahan berikut.
Catatan: Hanya jam, menit, dan pesan tambahan yang tersedia di Android 2.3 (API level 9) dan yang lebih rendah. Tambahan lainnya tersedia di versi platform yang lebih tinggi.
- Tindakan
ACTION_SET_ALARM
- URI Data
- Tidak ada
- Jenis MIME
- Tidak ada
- Tambahan
-
EXTRA_HOUR
- Jam untuk alarm.
EXTRA_MINUTES
- Menit untuk alarm.
EXTRA_MESSAGE
- Pesan kustom untuk mengidentifikasi alarm.
EXTRA_DAYS
ArrayList
yang menyertakan setiap hari kerja saat alarm ini berulang. Setiap hari harus dideklarasikan dengan bilangan bulat dari classCalendar
, sepertiMONDAY
.Untuk alarm satu kali, jangan tentukan ekstra ini.
EXTRA_RINGTONE
- URI
content:
yang menentukan nada dering yang akan digunakan dengan alarm, atauVALUE_RINGTONE_SILENT
jika tidak ada nada dering.Untuk menggunakan nada dering default, jangan tetapkan tambahan ini.
EXTRA_VIBRATE
- Boolean yang menentukan apakah akan bergetar untuk alarm ini atau tidak.
EXTRA_SKIP_UI
- Boolean yang menentukan apakah aplikasi yang merespons harus melewati UI-nya saat menyetel alarm. Jika benar, aplikasi harus mengabaikan UI konfirmasi dan menyetel alarm yang ditentukan.
Contoh intent:
Kotlin
fun createAlarm(message: String, hour: Int, minutes: Int) { val intent = Intent(AlarmClock.ACTION_SET_ALARM).apply { putExtra(AlarmClock.EXTRA_MESSAGE, message) putExtra(AlarmClock.EXTRA_HOUR, hour) putExtra(AlarmClock.EXTRA_MINUTES, minutes) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void createAlarm(String message, int hour, int minutes) { Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM) .putExtra(AlarmClock.EXTRA_MESSAGE, message) .putExtra(AlarmClock.EXTRA_HOUR, hour) .putExtra(AlarmClock.EXTRA_MINUTES, minutes); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Untuk memanggil intent ACTION_SET_ALARM
, aplikasi Anda harus memiliki
izin SET_ALARM
:
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
Contoh filter intent:
<activity ...> <intent-filter> <action android:name="android.intent.action.SET_ALARM" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Membuat timer
Untuk membuat penghitung mundur, gunakan tindakan ACTION_SET_TIMER
dan tentukan detail
timer seperti durasi dengan menggunakan tambahan berikut.
Catatan: Intent ini tersedia di Android 4.4 (API level 19) dan yang lebih tinggi.
- Tindakan
ACTION_SET_TIMER
- URI Data
- Tidak ada
- Jenis MIME
- Tidak ada
- Tambahan
-
EXTRA_LENGTH
- Durasi timer dalam detik.
EXTRA_MESSAGE
- Pesan khusus untuk mengidentifikasi timer.
EXTRA_SKIP_UI
- Boolean yang menentukan apakah aplikasi yang merespons harus melewati UI-nya saat menyetel timer. Jika benar, aplikasi harus melewatkan UI konfirmasi dan memulai timer yang ditetapkan.
Contoh intent:
Kotlin
fun startTimer(message: String, seconds: Int) { val intent = Intent(AlarmClock.ACTION_SET_TIMER).apply { putExtra(AlarmClock.EXTRA_MESSAGE, message) putExtra(AlarmClock.EXTRA_LENGTH, seconds) putExtra(AlarmClock.EXTRA_SKIP_UI, true) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void startTimer(String message, int seconds) { Intent intent = new Intent(AlarmClock.ACTION_SET_TIMER) .putExtra(AlarmClock.EXTRA_MESSAGE, message) .putExtra(AlarmClock.EXTRA_LENGTH, seconds) .putExtra(AlarmClock.EXTRA_SKIP_UI, true); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Untuk memanggil intent ACTION_SET_TIMER
, aplikasi Anda harus memiliki
izin SET_ALARM
:
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
Contoh filter intent:
<activity ...> <intent-filter> <action android:name="android.intent.action.SET_TIMER" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Menampilkan semua alarm
Untuk menampilkan daftar alarm, gunakan tindakan
ACTION_SHOW_ALARMS
.
Meskipun tidak banyak aplikasi yang memanggil intent ini, karena terutama digunakan oleh aplikasi sistem, aplikasi apa pun yang berperilaku sebagai jam alarm dapat mengimplementasikan filter intent ini dan merespons dengan menampilkan daftar alarm saat ini.
Catatan: Intent ini tersedia di Android 4.4 (API level 19) dan yang lebih tinggi.
- Tindakan
ACTION_SHOW_ALARMS
- URI Data
- Tidak ada
- Jenis MIME
- Tidak ada
Contoh filter intent:
<activity ...> <intent-filter> <action android:name="android.intent.action.SHOW_ALARMS" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Kalender
Menambahkan acara adalah tindakan umum untuk aplikasi kalender. Buat filter intent untuk mengiklankan kemampuan aplikasi Anda untuk melakukan tindakan ini menggunakan informasi di bagian berikut.
Menambahkan kejadian kalender
Untuk menambahkan acara baru ke kalender pengguna, gunakan
aksi
ACTION_INSERT
dan tentukan URI data menggunakan
Events.CONTENT_URI
.
Kemudian Anda dapat menetapkan berbagai detail acara menggunakan tambahan berikut.
- Tindakan
ACTION_INSERT
- URI Data
Events.CONTENT_URI
- Jenis MIME
"vnd.android.cursor.dir/event"
- Tambahan
-
EXTRA_EVENT_ALL_DAY
- Boolean yang menentukan apakah peristiwa berlangsung seharian.
EXTRA_EVENT_BEGIN_TIME
- Waktu mulai peristiwa (milidetik sejak waktu patokan).
EXTRA_EVENT_END_TIME
- Waktu berakhir peristiwa (milidetik sejak waktu patokan).
TITLE
- Judul acara.
DESCRIPTION
- Deskripsi acara.
EVENT_LOCATION
- Lokasi acara.
EXTRA_EMAIL
- Daftar alamat email yang dipisahkan koma yang menentukan peserta undangan.
Masih banyak detail peristiwa yang dapat ditentukan menggunakan konstanta yang ditentukan dalam class
CalendarContract.EventsColumns
.
Contoh intent:
Kotlin
fun addEvent(title: String, location: String, begin: Long, end: Long) { val intent = Intent(Intent.ACTION_INSERT).apply { data = Events.CONTENT_URI putExtra(Events.TITLE, title) putExtra(Events.EVENT_LOCATION, location) putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin) putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void addEvent(String title, String location, long begin, long end) { Intent intent = new Intent(Intent.ACTION_INSERT) .setData(Events.CONTENT_URI) .putExtra(Events.TITLE, title) .putExtra(Events.EVENT_LOCATION, location) .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin) .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Contoh filter intent:
<activity ...> <intent-filter> <action android:name="android.intent.action.INSERT" /> <data android:mimeType="vnd.android.cursor.dir/event" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Kamera
Berikut adalah tindakan umum untuk aplikasi kamera, termasuk informasi yang Anda perlukan untuk membuat filter intent guna mengiklankan kemampuan aplikasi Anda untuk melakukan setiap tindakan.
Memotret atau merekam video dan mengembalikannya
Untuk membuka aplikasi kamera dan menerima foto atau video yang dihasilkan, gunakan tindakan ACTION_IMAGE_CAPTURE
atau ACTION_VIDEO_CAPTURE
. Tetapkan juga lokasi URI tempat Anda
ingin kamera menyimpan foto atau video, dalam tambahan
EXTRA_OUTPUT
.
- Tindakan
ACTION_IMAGE_CAPTURE
atau
ACTION_VIDEO_CAPTURE
- Skema URI Data
- Tidak ada
- Jenis MIME
- Tidak ada
- Tambahan
-
EXTRA_OUTPUT
- Lokasi URI tempat aplikasi kamera menyimpan file foto atau video (sebagai objek
Uri
).
Saat aplikasi kamera berhasil menampilkan
fokus ke aktivitas Anda—dengan kata lain, aplikasi Anda menerima callback onActivityResult()
—Anda
dapat mengakses foto atau video di URI yang Anda tentukan
dengan nilai EXTRA_OUTPUT
.
Catatan: Saat Anda menggunakan ACTION_IMAGE_CAPTURE
untuk mengambil foto, kamera mungkin juga menampilkan
salinan atau thumbnail yang diperkecil untuk foto dalam hasil Intent
, yang disimpan sebagai Bitmap
di kolom tambahan bernama
"data"
.
Contoh intent:
Kotlin
const val REQUEST_IMAGE_CAPTURE = 1 val locationForPhotos: Uri = ... fun capturePhoto(targetFilename: String) { val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE).apply { putExtra(MediaStore.EXTRA_OUTPUT, Uri.withAppendedPath(locationForPhotos, targetFilename)) } if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_IMAGE_CAPTURE) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) { val thumbnail: Bitmap = data.getParcelableExtra("data") // Do other work with full size photo saved in locationForPhotos. ... } }
Java
static final int REQUEST_IMAGE_CAPTURE = 1; static final Uri locationForPhotos; public void capturePhoto(String targetFilename) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.withAppendedPath(locationForPhotos, targetFilename)); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { Bitmap thumbnail = data.getParcelableExtra("data"); // Do other work with full size photo saved in locationForPhotos. ... } }
Untuk melakukannya saat menggunakan Android 12 (API level 31) atau yang lebih baru, lihat contoh intent berikut.
Contoh intent:
Kotlin
val REQUEST_IMAGE_CAPTURE = 1 private fun dispatchTakePictureIntent() { val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE) } catch (e: ActivityNotFoundException) { // Display error state to the user. } }
Java
static final int REQUEST_IMAGE_CAPTURE = 1; private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } catch (ActivityNotFoundException e) { // Display error state to the user. } } </section></div>
Untuk informasi selengkapnya tentang cara menggunakan intent ini untuk mengambil foto, termasuk
cara membuat Uri
yang sesuai untuk lokasi output, baca
Mengambil foto atau
Mengambil video.
Contoh filter intent:
<activity ...> <intent-filter> <action android:name="android.media.action.IMAGE_CAPTURE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Saat menangani intent ini, minta aktivitas Anda memeriksa tambahan EXTRA_OUTPUT
dalam Intent
yang masuk, lalu simpan gambar atau video yang diambil di
lokasi yang ditentukan oleh tambahan tersebut dan panggil setResult()
dengan Intent
yang menyertakan thumbnail yang dikompresi dalam
tambahan bernama "data"
.
Memulai aplikasi kamera dalam mode gambar diam
Untuk membuka aplikasi kamera dalam mode gambar diam, gunakan tindakan INTENT_ACTION_STILL_IMAGE_CAMERA
.
- Tindakan
INTENT_ACTION_STILL_IMAGE_CAMERA
- Skema URI Data
- Tidak ada
- Jenis MIME
- Tidak ada
- Tambahan
- Tidak ada
Contoh intent:
Kotlin
private fun dispatchTakePictureIntent() { val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE) } catch (e: ActivityNotFoundException) { // Display error state to the user. } }
Java
public void capturePhoto(String targetFilename) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.withAppendedPath(locationForPhotos, targetFilename)); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); } }
Contoh filter intent:
<activity ...> <intent-filter> <action android:name="android.media.action.STILL_IMAGE_CAMERA" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Memulai aplikasi kamera dalam mode video
Untuk membuka aplikasi kamera dalam mode video, gunakan tindakan INTENT_ACTION_VIDEO_CAMERA
.
- Tindakan
INTENT_ACTION_VIDEO_CAMERA
- Skema URI Data
- Tidak ada
- Jenis MIME
- Tidak ada
- Tambahan
- Tidak ada
Contoh intent:
Kotlin
fun capturePhoto() { val intent = Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA) if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_IMAGE_CAPTURE) } }
Java
public void capturePhoto() { Intent intent = new Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); } }
Contoh filter intent:
<activity ...> <intent-filter> <action android:name="android.media.action.VIDEO_CAMERA" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Aplikasi kontak/orang
Berikut adalah tindakan umum untuk aplikasi pengelolaan kontak, termasuk informasi yang Anda perlukan untuk membuat filter intent guna memberitahukan kemampuan aplikasi Anda dalam melakukan setiap tindakan.
Pilih kontak
Untuk meminta pengguna memilih kontak dan memberi aplikasi Anda akses ke semua informasi kontak,
gunakan tindakan ACTION_PICK
dan tentukan jenis MIME ke
Contacts.CONTENT_TYPE
.
Hasil Intent
yang dikirimkan ke callback onActivityResult()
berisi
URI content:
yang mengarah ke kontak yang dipilih. Responsnya memberikan
izin sementara pada aplikasi Anda untuk membaca kontak tersebut menggunakan Contacts Provider API, meskipun
aplikasi Anda tidak menyertakan izin READ_CONTACTS
.
Tips: Jika Anda hanya memerlukan akses ke informasi kontak tertentu, seperti nomor telepon atau alamat email, lihat bagian berikutnya tentang cara memilih data kontak tertentu.
- Tindakan
ACTION_PICK
- Skema URI Data
- Tidak ada
- Jenis MIME
Contacts.CONTENT_TYPE
Contoh intent:
Kotlin
const val REQUEST_SELECT_CONTACT = 1 fun selectContact() { val intent = Intent(Intent.ACTION_PICK).apply { type = ContactsContract.Contacts.CONTENT_TYPE } if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_SELECT_CONTACT) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_SELECT_CONTACT && resultCode == RESULT_OK) { val contactUri: Uri = data.data // Do something with the selected contact at contactUri. //... } }
Java
static final int REQUEST_SELECT_CONTACT = 1; public void selectContact() { Intent intent = new Intent(Intent.ACTION_PICK); intent.setType(ContactsContract.Contacts.CONTENT_TYPE); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_SELECT_CONTACT); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_SELECT_CONTACT && resultCode == RESULT_OK) { Uri contactUri = data.getData(); // Do something with the selected contact at contactUri. ... } }
Untuk informasi tentang cara mengambil detail kontak setelah Anda memiliki URI kontak, baca Mengambil detail untuk kontak.
Saat mengambil URI kontak menggunakan intent ini, biasanya Anda tidak
memerlukan izin
READ_CONTACTS
untuk membaca detail dasar kontak tersebut, seperti nama tampilan dan
apakah kontak diberi bintang. Namun, jika Anda mencoba
membaca data yang lebih spesifik tentang kontak tertentu—seperti
nomor telepon atau alamat email mereka—Anda memerlukan izin
READ_CONTACTS
.
Memilih data kontak tertentu
Untuk meminta pengguna memilih informasi tertentu dari kontak, seperti
nomor telepon, alamat email, atau jenis data lainnya, gunakan
aksi ACTION_PICK
dan tentukan jenis MIME ke salah satu
jenis konten berikut, seperti
CommonDataKinds.Phone.CONTENT_TYPE
untuk mendapatkan nomor telepon kontak.
Catatan: Dalam banyak kasus, aplikasi Anda harus memiliki izin
READ_CONTACTS
untuk melihat informasi spesifik tentang kontak tertentu.
Jika Anda hanya perlu mengambil satu jenis data dari kontak, teknik ini dengan
CONTENT_TYPE
dari
class ContactsContract.CommonDataKinds
lebih efisien daripada
menggunakan Contacts.CONTENT_TYPE
, seperti yang ditunjukkan di bagian sebelumnya. Hasilnya memberi Anda akses langsung
ke data yang diinginkan tanpa mengharuskan Anda melakukan kueri yang lebih kompleks ke Penyedia Kontak.
Hasil Intent
yang dikirim ke callback onActivityResult()
Anda berisi
URI content:
yang mengarah ke data kontak yang dipilih. Responsnya memberikan
izin sementara pada aplikasi Anda untuk membaca data kontak tersebut meskipun aplikasi Anda tidak menyertakan izin READ_CONTACTS
.
- Tindakan
ACTION_PICK
- Skema URI Data
- Tidak ada
- Jenis MIME
-
CommonDataKinds.Phone.CONTENT_TYPE
- Memilih dari kontak dengan nomor telepon.
CommonDataKinds.Email.CONTENT_TYPE
- Memilih dari kontak dengan alamat email.
CommonDataKinds.StructuredPostal.CONTENT_TYPE
- Memilih dari kontak dengan alamat pos.
Atau salah satu dari banyak nilai
CONTENT_TYPE
lainnya di bagianContactsContract
.
Contoh intent:
Kotlin
const val REQUEST_SELECT_PHONE_NUMBER = 1 fun selectContact() { // Start an activity for the user to pick a phone number from contacts. val intent = Intent(Intent.ACTION_PICK).apply { type = CommonDataKinds.Phone.CONTENT_TYPE } if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_SELECT_PHONE_NUMBER && resultCode == Activity.RESULT_OK) { // Get the URI and query the content provider for the phone number. val contactUri: Uri = data.data val projection: Array<String> = arrayOf(CommonDataKinds.Phone.NUMBER) contentResolver.query(contactUri, projection, null, null, null).use { cursor -> // If the cursor returned is valid, get the phone number. if (cursor.moveToFirst()) { val numberIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER) val number = cursor.getString(numberIndex) // Do something with the phone number. ... } } } }
Java
static final int REQUEST_SELECT_PHONE_NUMBER = 1; public void selectContact() { // Start an activity for the user to pick a phone number from contacts. Intent intent = new Intent(Intent.ACTION_PICK); intent.setType(CommonDataKinds.Phone.CONTENT_TYPE); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_SELECT_PHONE_NUMBER && resultCode == RESULT_OK) { // Get the URI and query the content provider for the phone number. Uri contactUri = data.getData(); String[] projection = new String[]{CommonDataKinds.Phone.NUMBER}; Cursor cursor = getContentResolver().query(contactUri, projection, null, null, null); // If the cursor returned is valid, get the phone number. if (cursor != null && cursor.moveToFirst()) { int numberIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER); String number = cursor.getString(numberIndex); // Do something with the phone number. //... } } }
Melihat kontak
Untuk menampilkan detail kontak yang diketahui, gunakan tindakan ACTION_VIEW
dan tentukan kontak dengan URI content:
sebagai data intent.
Ada dua cara utama untuk mengambil URI kontak terlebih dahulu:
- Gunakan URI kontak yang ditampilkan oleh tindakan
ACTION_PICK
yang ditampilkan di bagian sebelumnya. Pendekatan ini tidak memerlukan izin aplikasi apa pun. - Akses daftar semua kontak secara langsung, seperti dijelaskan dalam Mengambil daftar
kontak. Pendekatan ini memerlukan izin
READ_CONTACTS
.
- Tindakan
ACTION_VIEW
- Skema URI Data
content:<URI>
- Jenis MIME
- Tidak ada. Jenis ini diambil dari URI kontak.
Contoh intent:
Kotlin
fun viewContact(contactUri: Uri) { val intent = Intent(Intent.ACTION_VIEW, contactUri) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void viewContact(Uri contactUri) { Intent intent = new Intent(Intent.ACTION_VIEW, contactUri); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Mengedit kontak yang ada
Untuk mengedit kontak yang diketahui, gunakan tindakan ACTION_EDIT
, tentukan kontak dengan URI content:
sebagai data intent, dan sertakan informasi kontak yang diketahui dalam tambahan yang ditentukan oleh konstanta di ContactsContract.Intents.Insert
.
Ada dua cara utama untuk pengambilan awal URI kontak:
- Gunakan URI kontak yang ditampilkan oleh tindakan
ACTION_PICK
yang ditampilkan di bagian sebelumnya. Pendekatan ini tidak memerlukan izin aplikasi apa pun. - Akses daftar semua kontak secara langsung, seperti dijelaskan dalam Mengambil daftar
kontak. Pendekatan ini memerlukan izin
READ_CONTACTS
.
- Tindakan
ACTION_EDIT
- Skema URI Data
content:<URI>
- Jenis MIME
- Jenis ini diambil dari URI kontak.
- Tambahan
- Satu atau beberapa tambahan yang ditentukan dalam
ContactsContract.Intents.Insert
sehingga Anda dapat mengisi kolom detail kontak.
Contoh intent:
Kotlin
fun editContact(contactUri: Uri, email: String) { val intent = Intent(Intent.ACTION_EDIT).apply { data = contactUri putExtra(ContactsContract.Intents.Insert.EMAIL, email) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void editContact(Uri contactUri, String email) { Intent intent = new Intent(Intent.ACTION_EDIT); intent.setData(contactUri); intent.putExtra(Intents.Insert.EMAIL, email); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Untuk informasi selengkapnya tentang cara mengedit kontak, baca Memodifikasi kontak menggunakan intent.
Menyisipkan kontak
Untuk menyisipkan kontak baru, gunakan tindakan ACTION_INSERT
, tetapkan Contacts.CONTENT_TYPE
sebagai jenis MIME, dan sertakan semua informasi kontak yang diketahui dalam tambahan yang ditetapkan oleh konstanta di ContactsContract.Intents.Insert
.
- Tindakan
ACTION_INSERT
- Skema URI Data
- Tidak ada
- Jenis MIME
Contacts.CONTENT_TYPE
- Tambahan
- Satu atau beberapa tambahan yang ditentukan dalam
ContactsContract.Intents.Insert
.
Contoh intent:
Kotlin
fun insertContact(name: String, email: String) { val intent = Intent(Intent.ACTION_INSERT).apply { type = ContactsContract.Contacts.CONTENT_TYPE putExtra(ContactsContract.Intents.Insert.NAME, name) putExtra(ContactsContract.Intents.Insert.EMAIL, email) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void insertContact(String name, String email) { Intent intent = new Intent(Intent.ACTION_INSERT); intent.setType(Contacts.CONTENT_TYPE); intent.putExtra(Intents.Insert.NAME, name); intent.putExtra(Intents.Insert.EMAIL, email); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Untuk informasi selengkapnya tentang cara menyisipkan kontak, baca Memodifikasi kontak menggunakan intent.
Menulis email dengan lampiran opsional adalah tindakan umum untuk aplikasi email. Buat filter intent untuk mengiklankan kemampuan aplikasi Anda untuk melakukan tindakan ini menggunakan informasi di bagian berikut.
Menulis email dengan lampiran opsional
Untuk menulis email, gunakan salah satu tindakan berikut berdasarkan apakah Anda akan menyertakan lampiran atau tidak, dan sertakan detail email seperti penerima dan subjek menggunakan kunci tambahan yang tercantum.
- Tindakan
ACTION_SENDTO
(untuk tanpa lampiran) atau
ACTION_SEND
(untuk satu lampiran) atau
ACTION_SEND_MULTIPLE
(untuk beberapa lampiran)- Skema URI Data
- Tidak ada
- Jenis MIME
-
"text/plain"
"*/*"
- Tambahan
-
Intent.EXTRA_EMAIL
- Array string semua alamat email penerima "Kepada".
Intent.EXTRA_CC
- Array string semua alamat email penerima "CC".
Intent.EXTRA_BCC
- Array string semua alamat email penerima "BCC".
Intent.EXTRA_SUBJECT
- String dengan subjek email.
Intent.EXTRA_TEXT
- String dengan isi email.
Intent.EXTRA_STREAM
Uri
yang mengarah ke lampiran. Jika menggunakan tindakanACTION_SEND_MULTIPLE
, ini adalahArrayList
yang berisi beberapa objekUri
.
Contoh intent:
Kotlin
fun composeEmail(addresses: Array<String>, subject: String, attachment: Uri) { val intent = Intent(Intent.ACTION_SEND).apply { type = "*/*" putExtra(Intent.EXTRA_EMAIL, addresses) putExtra(Intent.EXTRA_SUBJECT, subject) putExtra(Intent.EXTRA_STREAM, attachment) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void composeEmail(String[] addresses, String subject, Uri attachment) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("*/*"); intent.putExtra(Intent.EXTRA_EMAIL, addresses); intent.putExtra(Intent.EXTRA_SUBJECT, subject); intent.putExtra(Intent.EXTRA_STREAM, attachment); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Jika Anda ingin memastikan bahwa intent hanya ditangani oleh aplikasi email, bukan
aplikasi pesan teks atau aplikasi sosial, gunakan tindakan ACTION_SENDTO
dan sertakan skema data "mailto:"
seperti yang ditunjukkan dalam contoh berikut:
Kotlin
fun composeEmail(addresses: Array<String>, subject: String) { val intent = Intent(Intent.ACTION_SENDTO).apply { data = Uri.parse("mailto:") // Only email apps handle this. putExtra(Intent.EXTRA_EMAIL, addresses) putExtra(Intent.EXTRA_SUBJECT, subject) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void composeEmail(String[] addresses, String subject) { Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setData(Uri.parse("mailto:")); // Only email apps handle this. intent.putExtra(Intent.EXTRA_EMAIL, addresses); intent.putExtra(Intent.EXTRA_SUBJECT, subject); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Contoh filter intent:
<activity ...> <intent-filter> <action android:name="android.intent.action.SEND" /> <data android:type="*/*" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.SENDTO" /> <data android:scheme="mailto" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Penyimpanan file
Berikut adalah tindakan umum untuk aplikasi penyimpanan file, termasuk informasi yang Anda perlukan untuk membuat filter intent guna memberitahukan kemampuan aplikasi Anda dalam melakukan setiap tindakan.
Mengambil tipe file tertentu
Untuk meminta pengguna memilih file seperti dokumen atau foto dan menampilkan referensi ke
aplikasi Anda, gunakan tindakan ACTION_GET_CONTENT
dan tentukan jenis
MIME yang Anda inginkan. Referensi file yang ditampilkan ke aplikasi Anda bersifat sementara terhadap daur hidup
aktivitas Anda saat ini, jadi jika ingin mengaksesnya nanti, Anda harus mengimpor salinan yang dapat Anda baca nanti.
Intent ini juga memungkinkan pengguna membuat file baru dalam proses. Misalnya, alih-alih memilih foto yang sudah ada, pengguna dapat mengambil foto baru dengan kamera.
Intent hasil yang dikirim ke metode onActivityResult()
Anda menyertakan data dengan URI yang mengarah ke file tersebut.
URI dapat berupa apa saja, seperti URI http:
, URI file:
, atau URI
content:
. Namun, jika Anda ingin membatasi file yang dapat dipilih hanya untuk file yang dapat diakses
dari penyedia konten (URI content:
) dan yang tersedia sebagai aliran file dengan
openFileDescriptor()
,
tambahkan
kategori CATEGORY_OPENABLE
ke intent Anda.
Di Android 4.3 (API level 18) dan yang lebih tinggi,
Anda juga dapat mengizinkan pengguna memilih beberapa file dengan menambahkan
EXTRA_ALLOW_MULTIPLE
ke intent, yang ditetapkan ke true
.
Selanjutnya, Anda dapat mengakses setiap file yang dipilih dalam objek ClipData
yang ditampilkan oleh getClipData()
.
- Tindakan
ACTION_GET_CONTENT
- Skema URI Data
- Tidak ada
- Jenis MIME
- Jenis MIME yang sesuai dengan jenis file yang perlu dipilih pengguna.
- Tambahan
-
EXTRA_ALLOW_MULTIPLE
- Boolean yang mendeklarasikan apakah pengguna dapat memilih lebih dari satu file sekaligus.
EXTRA_LOCAL_ONLY
- Boolean yang mendeklarasikan apakah file yang ditampilkan harus tersedia langsung dari perangkat, bukan memerlukan download dari layanan jarak jauh.
- Kategori (opsional)
-
CATEGORY_OPENABLE
- Untuk hanya menampilkan file "yang dapat dibuka" yang dapat direpresentasikan sebagai aliran file
dengan
openFileDescriptor()
.
Contoh intent untuk mengambil foto:
Kotlin
const val REQUEST_IMAGE_GET = 1 fun selectImage() { val intent = Intent(Intent.ACTION_GET_CONTENT).apply { type = "image/*" } if (intent.resolveActivity(packageManager) != null) { startActivityForResult(intent, REQUEST_IMAGE_GET) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_IMAGE_GET && resultCode == Activity.RESULT_OK) { val thumbnail: Bitmap = data.getParcelableExtra("data") val fullPhotoUri: Uri = data.data // Do work with photo saved at fullPhotoUri. ... } }
Java
static final int REQUEST_IMAGE_GET = 1; public void selectImage() { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_IMAGE_GET); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_GET && resultCode == RESULT_OK) { Bitmap thumbnail = data.getParcelable("data"); Uri fullPhotoUri = data.getData(); // Do work with photo saved at fullPhotoUri. ... } }
Contoh filter intent untuk menampilkan foto:
<activity ...> <intent-filter> <action android:name="android.intent.action.GET_CONTENT" /> <data android:type="image/*" /> <category android:name="android.intent.category.DEFAULT" /> <!-- The OPENABLE category declares that the returned file is accessible from a content provider that supportsOpenableColumns
andContentResolver.openFileDescriptor()
. --> <category android:name="android.intent.category.OPENABLE" /> </intent-filter> </activity>
Membuka tipe file tertentu
Daripada mengambil salinan file yang harus Anda impor ke aplikasi, dengan menggunakan tindakan ACTION_GET_CONTENT
, saat menjalankan Android
4.4 atau yang lebih tinggi, Anda dapat meminta untuk membuka file yang dikelola oleh aplikasi lain
menggunakan tindakan ACTION_OPEN_DOCUMENT
dan menentukan jenis MIME.
Agar pengguna dapat membuat dokumen baru yang dapat ditulis aplikasi Anda, gunakan tindakan ACTION_CREATE_DOCUMENT
.
Misalnya, alih-alih
memilih dari dokumen PDF yang ada, intent ACTION_CREATE_DOCUMENT
memungkinkan pengguna memilih tempat yang mereka inginkan untuk membuat dokumen baru, seperti dalam aplikasi lain
yang mengelola penyimpanan dokumen. Kemudian, aplikasi Anda akan menerima lokasi URI tempat
dapat menulis dokumen baru.
Sedangkan intent yang dikirim ke metode onActivityResult()
Anda dari tindakan ACTION_GET_CONTENT
mungkin
mengembalikan URI dari jenis apa pun, intent hasil dari ACTION_OPEN_DOCUMENT
dan ACTION_CREATE_DOCUMENT
selalu menentukan file yang dipilih sebagai URI content:
yang didukung oleh DocumentsProvider
. Anda dapat membuka file dengan openFileDescriptor()
dan membuat kueri detailnya menggunakan kolom dari DocumentsContract.Document
.
URI yang ditampilkan memberi aplikasi Anda akses baca jangka panjang ke file, mungkin juga
dengan akses tulis. Tindakan ACTION_OPEN_DOCUMENT
terutama berguna saat Anda ingin membaca file yang ada tanpa membuat salinan ke dalam aplikasi
atau saat Anda ingin membuka dan mengedit file langsung di tempat.
Anda juga dapat mengizinkan pengguna memilih beberapa file dengan menambahkan
EXTRA_ALLOW_MULTIPLE
ke intent, yang ditetapkan ke true
.
Jika pengguna hanya memilih satu item, Anda dapat mengambil item tersebut dari getData()
.
Jika pengguna memilih lebih dari satu item, getData()
akan menampilkan null dan Anda harus
mengambil setiap item dari objek ClipData
yang ditampilkan oleh getClipData()
.
Catatan: Intent Anda harus menentukan jenis MIME dan
harus mendeklarasikan kategori CATEGORY_OPENABLE
. Jika
sesuai, Anda dapat menentukan lebih dari satu jenis MIME dengan menambahkan array jenis MIME dengan
EXTRA_MIME_TYPES
tambahan—jika melakukannya, Anda harus menetapkan
jenis MIME utama di setType()
ke "*/*"
.
- Tindakan
ACTION_OPEN_DOCUMENT
atau
ACTION_CREATE_DOCUMENT
- Skema URI Data
- Tidak ada
- Jenis MIME
- Jenis MIME yang sesuai dengan jenis file yang perlu dipilih pengguna.
- Tambahan
-
EXTRA_MIME_TYPES
- Array jenis MIME yang sesuai dengan jenis file yang diminta oleh
aplikasi Anda. Saat menggunakan tambahan ini, Anda harus menetapkan jenis MIME utama di
setType()
ke"*/*"
. EXTRA_ALLOW_MULTIPLE
- Boolean yang mendeklarasikan apakah pengguna dapat memilih lebih dari satu file sekaligus.
EXTRA_TITLE
- Untuk digunakan dengan
ACTION_CREATE_DOCUMENT
untuk menentukan nama file awal. EXTRA_LOCAL_ONLY
- Boolean yang mendeklarasikan apakah file yang ditampilkan harus tersedia langsung dari perangkat, bukan memerlukan download dari layanan jarak jauh.
- Kategori
-
CATEGORY_OPENABLE
- Untuk hanya menampilkan file "yang dapat dibuka" yang dapat direpresentasikan sebagai aliran file
dengan
openFileDescriptor()
.
Contoh intent untuk mengambil foto:
Kotlin
const val REQUEST_IMAGE_OPEN = 1 fun selectImage2() { val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply { type = "image/*" addCategory(Intent.CATEGORY_OPENABLE) } // Only the system receives the ACTION_OPEN_DOCUMENT, so no need to test. startActivityForResult(intent, REQUEST_IMAGE_OPEN) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == REQUEST_IMAGE_OPEN && resultCode == Activity.RESULT_OK) { val fullPhotoUri: Uri = data.data // Do work with full size photo saved at fullPhotoUri. ... } }
Java
static final int REQUEST_IMAGE_OPEN = 1; public void selectImage() { Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); intent.setType("image/*"); intent.addCategory(Intent.CATEGORY_OPENABLE); // Only the system receives the ACTION_OPEN_DOCUMENT, so no need to test. startActivityForResult(intent, REQUEST_IMAGE_OPEN); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_OPEN && resultCode == RESULT_OK) { Uri fullPhotoUri = data.getData(); // Do work with full size photo saved at fullPhotoUri. ... } }
Aplikasi pihak ketiga tidak dapat merespons intent dengan
tindakan ACTION_OPEN_DOCUMENT
. Sebagai gantinya, sistem akan menerima intent
ini dan menampilkan semua file yang tersedia dari berbagai aplikasi dalam antarmuka pengguna terpadu.
Untuk menyediakan file aplikasi di UI ini dan mengizinkan aplikasi lain membukanya, Anda harus mengimplementasikan
DocumentsProvider
dan menyertakan filter intent untuk
PROVIDER_INTERFACE
("android.content.action.DOCUMENTS_PROVIDER"
), seperti ditunjukkan dalam contoh berikut:
<provider ... android:grantUriPermissions="true" android:exported="true" android:permission="android.permission.MANAGE_DOCUMENTS"> <intent-filter> <action android:name="android.content.action.DOCUMENTS_PROVIDER" /> </intent-filter> </provider>
Untuk informasi selengkapnya tentang cara membuat file yang dikelola oleh aplikasi Anda agar dapat dibuka dari aplikasi lain, baca Membuka file menggunakan framework akses penyimpanan.
Tindakan lokal
Memanggil mobil adalah tindakan lokal yang umum. Buat filter intent untuk mengiklankan kemampuan aplikasi Anda untuk melakukan tindakan ini menggunakan informasi di bagian berikut.
Panggil ojek
Untuk memanggil taksi, gunakan tindakan
ACTION_RESERVE_TAXI_RESERVATION
.
Catatan: Aplikasi harus meminta konfirmasi dari pengguna sebelum menyelesaikan tindakan ini.
- Tindakan
ACTION_RESERVE_TAXI_RESERVATION
- URI Data
- Tidak ada
- Jenis MIME
- Tidak ada
- Tambahan
- Tidak ada
Contoh intent:
Kotlin
fun callCar() { val intent = Intent(ReserveIntents.ACTION_RESERVE_TAXI_RESERVATION) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void callCar() { Intent intent = new Intent(ReserveIntents.ACTION_RESERVE_TAXI_RESERVATION); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Contoh filter intent:
<activity ...> <intent-filter> <action android:name="com.google.android.gms.actions.RESERVE_TAXI_RESERVATION" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Maps
Menampilkan lokasi pada peta adalah tindakan umum untuk aplikasi peta. Buat filter intent untuk mengiklankan kemampuan aplikasi Anda untuk melakukan tindakan ini menggunakan informasi di bagian berikut.
Menampilkan lokasi di peta
Untuk membuka peta, gunakan tindakan ACTION_VIEW
dan tentukan
informasi lokasi dalam data intent dengan salah satu skema berikut.
- Tindakan
ACTION_VIEW
- Skema URI Data
-
geo:latitude,longitude
- Menampilkan peta pada garis bujur dan lintang yang diberikan.
Contoh:
"geo:47.6,-122.3"
geo:latitude,longitude?z=zoom
- Menampilkan peta pada garis bujur dan lintang yang diberikan pada tingkat zoom tertentu. Tingkat zoom
1 menampilkan seluruh Bumi, yang berpusat pada lat,lng yang ditentukan. Tingkat zoom tertinggi (terdekat) adalah 23.
Contoh:
"geo:47.6,-122.3?z=11"
geo:0,0?q=lat,lng(label)
- Menampilkan peta pada garis bujur dan lintang yang diberikan dengan label string.
Contoh:
"geo:0,0?q=34.99,-106.61(Treasure)"
geo:0,0?q=my+street+address
- Menampilkan lokasi untuk "alamat jalan saya", yang dapat berupa kueri alamat atau lokasi tertentu.
Contoh:
"geo:0,0?q=1600+Amphitheatre+Parkway%2C+CA"
Catatan: Semua string yang diteruskan dalam URI
geo
harus dienkode. Misalnya, string1st & Pike, Seattle
menjadi1st%20%26%20Pike%2C%20Seattle
. Spasi dalam string dienkode dengan%20
atau diganti dengan tanda plus (+
).
- Jenis MIME
- Tidak ada
Contoh intent:
Kotlin
fun showMap(geoLocation: Uri) { val intent = Intent(Intent.ACTION_VIEW).apply { data = geoLocation } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void showMap(Uri geoLocation) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(geoLocation); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Contoh filter intent:
<activity ...> <intent-filter> <action android:name="android.intent.action.VIEW" /> <data android:scheme="geo" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Musik atau video
Berikut adalah tindakan umum untuk aplikasi musik dan video, termasuk informasi yang Anda perlukan untuk membuat filter intent guna mengiklankan kemampuan aplikasi Anda untuk melakukan setiap tindakan.
Memutar file media
Untuk memutar file musik, gunakan tindakan ACTION_VIEW
dan
tetapkan lokasi URI file dalam data intent.
- Tindakan
ACTION_VIEW
- Skema URI Data
-
file:<URI>
content:<URI>
http:<URL>
- Jenis MIME
-
"audio/*"
"application/ogg"
"application/x-ogg"
"application/itunes"
- Atau apa saja yang mungkin diperlukan aplikasi Anda.
Contoh intent:
Kotlin
fun playMedia(file: Uri) { val intent = Intent(Intent.ACTION_VIEW).apply { data = file } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void playMedia(Uri file) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(file); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Contoh filter intent:
<activity ...> <intent-filter> <action android:name="android.intent.action.VIEW" /> <data android:type="audio/*" /> <data android:type="application/ogg" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Memutar musik berdasarkan kueri penelusuran
Untuk memutar musik berdasarkan kueri penelusuran, gunakan
intent INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
. Aplikasi mungkin memicu
intent ini sebagai respons terhadap perintah suara pengguna untuk memutar musik. Aplikasi penerima untuk intent
ini melakukan penelusuran dalam inventarisnya untuk mencocokkan konten yang ada dengan kueri yang diberikan dan
mulai memutar konten tersebut.
Dalam intent ini, sertakan tambahan string
EXTRA_MEDIA_FOCUS
, yang menentukan mode penelusuran yang dimaksud. Misalnya, mode penelusuran dapat menentukan apakah penelusuran tersebut untuk nama artis atau nama lagu.
- Tindakan
INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
- Skema URI Data
- Tidak ada
- Jenis MIME
- Tidak ada
- Tambahan
-
MediaStore.EXTRA_MEDIA_FOCUS
(wajib diisi)-
Menunjukkan mode penelusuran: apakah pengguna menelusuri artis, album, lagu, atau playlist tertentu. Kebanyakan mode penelusuran memerlukan ekstra tambahan. Misalnya, jika pengguna tertarik untuk mendengarkan lagu tertentu, intent ini mungkin memiliki tiga tambahan ekstra: judul lagu, artis, dan album. Intent ini mendukung mode penelusuran berikut untuk setiap nilai
EXTRA_MEDIA_FOCUS
:Apa pun -
"vnd.android.cursor.item/*"
-
Memutar musik apa saja. Aplikasi penerima memutar beberapa musik berdasarkan pilihan pintar, seperti daftar putar terakhir yang didengarkan pengguna.
Ekstra tambahan:
QUERY
(wajib): string kosong. Ekstra ini selalu disediakan untuk kompatibilitas mundur. Aplikasi yang ada yang tidak mengetahui mode penelusuran dapat memproses intent ini sebagai penelusuran tak terstruktur.
Tidak terstruktur -
"vnd.android.cursor.item/*"
-
Memutar lagu, album, atau genre tertentu dari kueri penelusuran tak terstruktur. Aplikasi dapat menghasilkan intent dengan mode penelusuran ini jika tidak dapat mengidentifikasi jenis konten yang ingin didengarkan oleh pengguna. Gunakan mode penelusuran yang lebih spesifik jika memungkinkan.
Ekstra tambahan:
QUERY
(wajib): string yang berisi kombinasi apa pun dari artis, album, nama lagu, atau genre.
Genre -
Audio.Genres.ENTRY_CONTENT_TYPE
-
Memutar musik dari genre tertentu.
Ekstra tambahan:
"android.intent.extra.genre"
(wajib diisi) - Genre.QUERY
(wajib diisi): genre. Ekstra ini selalu disediakan untuk kompatibilitas mundur. Aplikasi yang ada yang tidak mengetahui mode penelusuran dapat memproses intent ini sebagai penelusuran tidak terstruktur.
Artis -
Audio.Artists.ENTRY_CONTENT_TYPE
-
Memutar musik dari artis tertentu.
Ekstra tambahan:
EXTRA_MEDIA_ARTIST
(wajib diisi): artis."android.intent.extra.genre"
: genre.QUERY
(wajib): string yang berisi kombinasi apa saja dari artis atau genre. Ekstra ini selalu disediakan untuk kompatibilitas mundur. Aplikasi yang ada yang tidak mengetahui mode penelusuran dapat memproses intent ini sebagai penelusuran tak terstruktur.
Album -
Audio.Albums.ENTRY_CONTENT_TYPE
-
Memutar musik dari album tertentu.
Ekstra tambahan:
EXTRA_MEDIA_ALBUM
(wajib): album.EXTRA_MEDIA_ARTIST
: artis."android.intent.extra.genre"
: genre.QUERY
(diperlukan): string yang berisi kombinasi apa saja dari album atau artis. Ekstra ini selalu disediakan untuk kompatibilitas mundur. Aplikasi yang ada yang tidak mengetahui mode penelusuran dapat memproses intent ini sebagai penelusuran tak terstruktur.
Lagu -
"vnd.android.cursor.item/audio"
-
Memutar lagu tertentu.
Ekstra tambahan:
EXTRA_MEDIA_ALBUM
: album.EXTRA_MEDIA_ARTIST
: artis."android.intent.extra.genre"
: genre.EXTRA_MEDIA_TITLE
(wajib diisi): nama lagu.QUERY
(wajib): string yang berisi kombinasi apa pun dari album, artis, genre, atau judul. Ekstra ini selalu disediakan untuk kompatibilitas mundur. Aplikasi yang ada yang tidak mengetahui mode penelusuran dapat memproses intent ini sebagai penelusuran tak terstruktur.
Playlist -
Audio.Playlists.ENTRY_CONTENT_TYPE
-
Memutar playlist tertentu atau playlist yang cocok dengan beberapa kriteria yang ditentukan oleh tambahan tambahan.
Ekstra tambahan:
EXTRA_MEDIA_ALBUM
: album.EXTRA_MEDIA_ARTIST
: artis."android.intent.extra.genre"
: genre."android.intent.extra.playlist"
: playlist.EXTRA_MEDIA_TITLE
: nama lagu yang menjadi dasar playlist.QUERY
(wajib): string yang berisi kombinasi apa saja dari album, artis, genre, playlist, atau judul. Ekstra ini selalu disediakan untuk kompatibilitas mundur. Aplikasi yang ada yang tidak mengetahui mode penelusuran dapat memproses intent ini sebagai penelusuran tak terstruktur.
Contoh intent:
Jika pengguna ingin mendengarkan musik dari artis tertentu, aplikasi penelusuran dapat menghasilkan intent berikut:
Kotlin
fun playSearchArtist(artist: String) { val intent = Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH).apply { putExtra(MediaStore.EXTRA_MEDIA_FOCUS, MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) putExtra(MediaStore.EXTRA_MEDIA_ARTIST, artist) putExtra(SearchManager.QUERY, artist) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void playSearchArtist(String artist) { Intent intent = new Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH); intent.putExtra(MediaStore.EXTRA_MEDIA_FOCUS, MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE); intent.putExtra(MediaStore.EXTRA_MEDIA_ARTIST, artist); intent.putExtra(SearchManager.QUERY, artist); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Contoh filter intent:
<activity ...> <intent-filter> <action android:name="android.media.action.MEDIA_PLAY_FROM_SEARCH" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Saat menangani intent ini di aktivitas Anda, periksa nilai
EXTRA_MEDIA_FOCUS
tambahan dalam
Intent
yang masuk untuk menentukan mode penelusuran. Setelah aktivitas Anda mengidentifikasi
mode penelusuran, baca nilai dari tambahan tambahan untuk mode penelusuran tertentu.
Dengan informasi ini, aplikasi Anda selanjutnya dapat melakukan penelusuran di dalam inventarisnya guna memutar
konten yang cocok dengan kueri penelusuran. Hal ini ditunjukkan dalam contoh berikut.
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { ... if (intent.action.compareTo(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH) == 0) { val mediaFocus: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_FOCUS) val query: String? = intent.getStringExtra(SearchManager.QUERY) // Some of these extras might not be available depending on the search mode. val album: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ALBUM) val artist: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ARTIST) val genre: String? = intent.getStringExtra("android.intent.extra.genre") val playlist: String? = intent.getStringExtra("android.intent.extra.playlist") val title: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_TITLE) // Determine the search mode and use the corresponding extras. when { mediaFocus == null -> { // 'Unstructured' search mode (backward compatible) playUnstructuredSearch(query) } mediaFocus.compareTo("vnd.android.cursor.item/*") == 0 -> { if (query?.isNotEmpty() == true) { // 'Unstructured' search mode. playUnstructuredSearch(query) } else { // 'Any' search mode. playResumeLastPlaylist() } } mediaFocus.compareTo(MediaStore.Audio.Genres.ENTRY_CONTENT_TYPE) == 0 -> { // 'Genre' search mode. playGenre(genre) } mediaFocus.compareTo(MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) == 0 -> { // 'Artist' search mode. playArtist(artist, genre) } mediaFocus.compareTo(MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE) == 0 -> { // 'Album' search mode. playAlbum(album, artist) } mediaFocus.compareTo("vnd.android.cursor.item/audio") == 0 -> { // 'Song' search mode. playSong(album, artist, genre, title) } mediaFocus.compareTo(MediaStore.Audio.Playlists.ENTRY_CONTENT_TYPE) == 0 -> { // 'Playlist' search mode. playPlaylist(album, artist, genre, playlist, title) } } } }
Java
protected void onCreate(Bundle savedInstanceState) { //... Intent intent = this.getIntent(); if (intent.getAction().compareTo(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH) == 0) { String mediaFocus = intent.getStringExtra(MediaStore.EXTRA_MEDIA_FOCUS); String query = intent.getStringExtra(SearchManager.QUERY); // Some of these extras might not be available depending on the search mode. String album = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ALBUM); String artist = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ARTIST); String genre = intent.getStringExtra("android.intent.extra.genre"); String playlist = intent.getStringExtra("android.intent.extra.playlist"); String title = intent.getStringExtra(MediaStore.EXTRA_MEDIA_TITLE); // Determine the search mode and use the corresponding extras. if (mediaFocus == null) { // 'Unstructured' search mode (backward compatible). playUnstructuredSearch(query); } else if (mediaFocus.compareTo("vnd.android.cursor.item/*") == 0) { if (query.isEmpty()) { // 'Any' search mode. playResumeLastPlaylist(); } else { // 'Unstructured' search mode. playUnstructuredSearch(query); } } else if (mediaFocus.compareTo(MediaStore.Audio.Genres.ENTRY_CONTENT_TYPE) == 0) { // 'Genre' search mode. playGenre(genre); } else if (mediaFocus.compareTo(MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) == 0) { // 'Artist' search mode. playArtist(artist, genre); } else if (mediaFocus.compareTo(MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE) == 0) { // 'Album' search mode. playAlbum(album, artist); } else if (mediaFocus.compareTo("vnd.android.cursor.item/audio") == 0) { // 'Song' search mode. playSong(album, artist, genre, title); } else if (mediaFocus.compareTo(MediaStore.Audio.Playlists.ENTRY_CONTENT_TYPE) == 0) { // 'Playlist' search mode. playPlaylist(album, artist, genre, playlist, title); } } }
Catatan baru
Membuat catatan adalah tindakan umum untuk aplikasi pencatat. Buat filter intent untuk memberitahukan kemampuan aplikasi Anda dalam melakukan tindakan ini menggunakan informasi di bagian berikut.
Membuat catatan
Untuk membuat catatan baru, gunakan
ACTION_CREATE_NOTE
dan tentukan detail catatan seperti subjek dan teks menggunakan tambahan berikut.
Catatan: Aplikasi harus meminta konfirmasi dari pengguna sebelum menyelesaikan tindakan ini.
- Tindakan
-
ACTION_CREATE_NOTE
- Skema URI Data
- Tidak ada
- Jenis MIME
-
PLAIN_TEXT_TYPE
- "*/*"
- Tambahan
-
-
EXTRA_NAME
- String yang menunjukkan judul atau subjek catatan.
-
EXTRA_TEXT
- String yang menunjukkan teks catatan.
-
- Tindakan
-
ACTION_DIAL
- Membuka aplikasi telepon atau dialer.ACTION_CALL
- Melakukan panggilan telepon (memerlukan izinCALL_PHONE
)
- Skema URI Data
-
tel:<phone-number>
voicemail:<phone-number>
- Jenis MIME
- Tidak ada
tel:2125551212
tel:(212) 555 1212
- Tindakan
-
"com.google.android.gms.actions.SEARCH_ACTION"
- Mendukung kueri penelusuran dari Google Voice Actions.
- Tambahan
-
QUERY
- String yang berisi kueri penelusuran.
- Tindakan
ACTION_WEB_SEARCH
- Skema URI Data
- Tidak ada
- Jenis MIME
- Tidak ada
- Tambahan
-
SearchManager.QUERY
- String penelusuran.
- Tindakan
-
ACTION_SETTINGS
ACTION_WIRELESS_SETTINGS
ACTION_AIRPLANE_MODE_SETTINGS
ACTION_WIFI_SETTINGS
ACTION_APN_SETTINGS
ACTION_BLUETOOTH_SETTINGS
ACTION_DATE_SETTINGS
ACTION_LOCALE_SETTINGS
ACTION_INPUT_METHOD_SETTINGS
ACTION_DISPLAY_SETTINGS
ACTION_SECURITY_SETTINGS
ACTION_LOCATION_SOURCE_SETTINGS
ACTION_INTERNAL_STORAGE_SETTINGS
ACTION_MEMORY_CARD_SETTINGS
Untuk layar setelan tambahan yang tersedia, lihat dokumentasi
Settings
. - Skema URI Data
- Tidak ada
- Jenis MIME
- Tidak ada
- Tindakan
ACTION_SENDTO
atau
ACTION_SEND
atau
ACTION_SEND_MULTIPLE
- Skema URI Data
-
sms:<phone_number>
smsto:<phone_number>
mms:<phone_number>
mmsto:<phone_number>
Semua skema ini ditangani dengan cara yang sama.
- Jenis MIME
-
"text/plain"
"image/*"
"video/*"
- Tambahan
-
"subject"
- String untuk subjek pesan (biasanya hanya untuk MMS).
"sms_body"
- String untuk pesan teks.
EXTRA_STREAM
Uri
yang mengarah ke gambar atau video yang akan dilampirkan. Jika menggunakan tindakanACTION_SEND_MULTIPLE
, ekstra ini adalahArrayList
dari objekUri
yang mengarah ke gambar atau video yang akan dilampirkan.
- Tindakan
ACTION_VIEW
- Skema URI Data
http:<URL>
https:<URL>
- Jenis MIME
-
"text/plain"
"text/html"
"application/xhtml+xml"
"application/vnd.wap.xhtml+xml"
- Siapkan perangkat Android untuk pengembangan atau gunakan perangkat virtual.
- Pasang versi aplikasi Anda yang menangani intent yang ingin didukung.
- Memicu intent menggunakan
adb
:adb shell am start -a <ACTION> -t <MIME_TYPE> -d <DATA> \ -e <EXTRA_NAME> <EXTRA_VALUE> -n <ACTIVITY>
Contoh:
adb shell am start -a android.intent.action.DIAL \ -d tel:555-5555 -n org.example.MyApp/.MyActivity
- Jika Anda mendefinisikan filter intent yang diperlukan, tangani intent tersebut.
Contoh intent:
Kotlin
fun createNote(subject: String, text: String) { val intent = Intent(NoteIntents.ACTION_CREATE_NOTE).apply { putExtra(NoteIntents.EXTRA_NAME, subject) putExtra(NoteIntents.EXTRA_TEXT, text) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void createNote(String subject, String text) { Intent intent = new Intent(NoteIntents.ACTION_CREATE_NOTE) .putExtra(NoteIntents.EXTRA_NAME, subject) .putExtra(NoteIntents.EXTRA_TEXT, text); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Contoh filter intent:
<activity ...> <intent-filter> <action android:name="com.google.android.gms.actions.CREATE_NOTE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="*/*" /> </intent-filter> </activity>
Ponsel
Memulai panggilan adalah tindakan umum untuk aplikasi ponsel. Buat filter intent untuk mengiklankan kemampuan aplikasi Anda untuk melakukan tindakan ini menggunakan informasi di bagian berikut.
Memulai panggilan telepon
Untuk membuka aplikasi ponsel dan menghubungi nomor telepon, gunakan tindakan ACTION_DIAL
dan tentukan nomor telepon menggunakan
skema URI berikut. Saat aplikasi ponsel dibuka, nomor telepon akan ditampilkan,
dan pengguna harus mengetuk tombol Panggil untuk memulai panggilan telepon.
Untuk melakukan panggilan telepon secara langsung, gunakan tindakan ACTION_CALL
dan tentukan nomor telepon menggunakan skema URI berikut. Saat dibuka, aplikasi telepon
akan memulai panggilan telepon. Pengguna tidak perlu mengetuk tombol Panggil.
Tindakan ACTION_CALL
mengharuskan Anda menambahkan
izin CALL_PHONE
ke file manifes:
<uses-permission android:name="android.permission.CALL_PHONE" />
Nomor telepon yang valid adalah nomor yang ditentukan dalam IETF RFC 3966. Contoh yang valid meliputi berikut ini:
Dialer aplikasi Telepon bagus saat menormalkan skema, seperti
nomor telepon. Jadi, skema yang dijelaskan tidak mutlak diperlukan dalam
metode Uri.parse()
.
Namun, jika Anda belum mencoba skema atau tidak yakin apakah skema tersebut
dapat ditangani, gunakan metode
Uri.fromParts()
.
Contoh intent:
Kotlin
fun dialPhoneNumber(phoneNumber: String) { val intent = Intent(Intent.ACTION_DIAL).apply { data = Uri.parse("tel:$phoneNumber") } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void dialPhoneNumber(String phoneNumber) { Intent intent = new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:" + phoneNumber)); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Telusuri
Berikut adalah tindakan umum untuk aplikasi penelusuran, termasuk informasi yang Anda perlukan untuk membuat filter intent guna mengiklankan kemampuan aplikasi Anda dalam melakukan setiap tindakan.
Menelusuri dengan menggunakan aplikasi tertentu
Untuk mendukung penelusuran dalam konteks aplikasi Anda, deklarasikan filter intent dalam aplikasi dengan
tindakan SEARCH_ACTION
, seperti yang ditunjukkan dalam contoh filter intent berikut.
Catatan: Sebaiknya jangan gunakan SEARCH_ACTION
untuk penelusuran aplikasi.
Sebagai gantinya, terapkan tindakan
GET_THING
untuk memanfaatkan dukungan bawaan Asisten Google untuk penelusuran dalam aplikasi. Untuk mengetahui informasi selengkapnya, lihat
dokumentasi
Action Aplikasi Asisten Google.
Contoh filter intent:
<activity android:name=".SearchActivity"> <intent-filter> <action android:name="com.google.android.gms.actions.SEARCH_ACTION"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
Melakukan penelusuran web
Untuk memulai penelusuran web, gunakan tindakan ACTION_WEB_SEARCH
dan tentukan string penelusuran dalam tambahan SearchManager.QUERY
.
Contoh intent:
Kotlin
fun searchWeb(query: String) { val intent = Intent(Intent.ACTION_WEB_SEARCH).apply { putExtra(SearchManager.QUERY, query) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void searchWeb(String query) { Intent intent = new Intent(Intent.ACTION_WEB_SEARCH); intent.putExtra(SearchManager.QUERY, query); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Setelan
Untuk membuka layar di aplikasi Setelan sistem saat aplikasi Anda mengharuskan pengguna untuk mengubah sesuatu, gunakan salah satu tindakan intent berikut:
Contoh intent:
Kotlin
fun openWifiSettings() { val intent = Intent(Settings.ACTION_WIFI_SETTINGS) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void openWifiSettings() { Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Pesan teks
Menulis pesan SMS/MMS dengan lampiran adalah tindakan umum untuk aplikasi pesan teks. Buat filter intent untuk mengiklankan kemampuan aplikasi Anda untuk melakukan tindakan ini menggunakan informasi di bagian berikut.
Menulis pesan SMS/MMS dengan lampiran
Untuk memulai pesan teks SMS atau MMS, gunakan salah satu tindakan intent berikut dan tentukan detail pesan seperti nomor telepon, subjek, dan isi pesan menggunakan kunci tambahan berikut.
Contoh intent:
Kotlin
fun composeMmsMessage(message: String, attachment: Uri) { val intent = Intent(Intent.ACTION_SENDTO).apply { type = HTTP.PLAIN_TEXT_TYPE putExtra("sms_body", message) putExtra(Intent.EXTRA_STREAM, attachment) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void composeMmsMessage(String message, Uri attachment) { Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setType(HTTP.PLAIN_TEXT_TYPE); intent.putExtra("sms_body", message); intent.putExtra(Intent.EXTRA_STREAM, attachment); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Jika Anda ingin memastikan bahwa intent Anda hanya ditangani oleh aplikasi pesan teks, dan bukan
aplikasi email atau sosial lainnya, gunakan tindakan ACTION_SENDTO
dan sertakan skema data "smsto:"
seperti yang ditunjukkan dalam contoh berikut:
Kotlin
fun composeMmsMessage(message: String, attachment: Uri) { val intent = Intent(Intent.ACTION_SEND).apply { data = Uri.parse("smsto:") // Only SMS apps respond to this. putExtra("sms_body", message) putExtra(Intent.EXTRA_STREAM, attachment) } if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void composeMmsMessage(String message, Uri attachment) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setData(Uri.parse("smsto:")); // Only SMS apps respond to this. intent.putExtra("sms_body", message); intent.putExtra(Intent.EXTRA_STREAM, attachment); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Contoh filter intent:
<activity ...> <intent-filter> <action android:name="android.intent.action.SEND" /> <data android:type="text/plain" /> <data android:type="image/*" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Catatan: Jika Anda mengembangkan aplikasi pesan SMS/MMS, Anda harus
mengimplementasikan filter intent untuk beberapa tindakan tambahan agar tersedia sebagai
aplikasi SMS default di Android 4.4 dan yang lebih tinggi. Untuk informasi selengkapnya, lihat dokumentasi
di Telephony
.
Browser web
Memuat URL web adalah tindakan umum untuk aplikasi browser web. Buat filter intent untuk mengiklankan kemampuan aplikasi Anda untuk melakukan tindakan ini menggunakan informasi di bagian berikut.
Memuat URL web
Untuk membuka halaman web, gunakan tindakan ACTION_VIEW
dan tentukan URL web dalam data intent.
Contoh intent:
Kotlin
fun openWebPage(url: String) { val webpage: Uri = Uri.parse(url) val intent = Intent(Intent.ACTION_VIEW, webpage) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } }
Java
public void openWebPage(String url) { Uri webpage = Uri.parse(url); Intent intent = new Intent(Intent.ACTION_VIEW, webpage); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
Contoh filter intent:
<activity ...> <intent-filter> <action android:name="android.intent.action.VIEW" /> <!-- Include the host attribute if you want your app to respond only to URLs with your app's domain. --> <data android:scheme="http" android:host="www.example.com" /> <category android:name="android.intent.category.DEFAULT" /> <!-- The BROWSABLE category is required to get links from web pages. --> <category android:name="android.intent.category.BROWSABLE" /> </intent-filter> </activity>
Tips: Jika aplikasi Android Anda menyediakan fungsi yang mirip dengan situs web, sertakan filter intent untuk URL yang mengarah ke situs Anda. Kemudian, jika pengguna sudah menginstal aplikasi Anda, link dari email atau halaman web lain yang mengarah ke situs web Anda akan membuka aplikasi Android Anda, bukan halaman web Anda. Pelajari lebih lanjut di Menangani Link Aplikasi Android.
Mulai Android 12 (API level 31), intent web generik berubah menjadi aktivitas dalam aplikasi Anda hanya jika aplikasi disetujui untuk domain tertentu yang terdapat dalam intent web tersebut. Jika aplikasi Anda untuk domain tidak disetujui, intent web akan ditetapkan ke aplikasi browser default pengguna.
Memverifikasi intent dengan Android Debug Bridge
Untuk memverifikasi apakah aplikasi Anda merespons intent yang ingin didukung, Anda dapat menggunakan
alat adb
untuk memicu intent tertentu dengan melakukan
hal berikut:
Untuk informasi selengkapnya, lihat Memberikan perintah shell.