Intent memungkinkan Anda memulai aktivitas di aplikasi lain dengan menjelaskan
tindakan yang ingin dilakukan, seperti "melihat peta" atau "mengambil
gambar", dalam objek Intent
. Jenis intent ini
disebut intent implisit karena tidak menentukan komponen aplikasi
yang akan dimulai, tetapi menetapkan tindakan dan menyediakan
beberapa data untuk melakukan tindakan.
Saat Anda memanggil startActivity()
atau startActivityForResult()
dan meneruskan intent implisit, sistem
akan me-resolve
intent ke aplikasi yang dapat menangani intent tersebut dan memulai
Activity
yang sesuai. Jika ada lebih dari satu aplikasi
yang dapat menangani intent tersebut, 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 terlebih dahulu bahwa
ada aplikasi yang dapat menerima intent, panggil resolveActivity()
pada objek Intent
Anda. Jika hasilnya non-null, setidaknya ada
satu aplikasi yang dapat menangani intent tersebut, dan aman untuk memanggil startActivity()
. Jika hasilnya
null, jangan gunakan intent tersebut dan, jika memungkinkan, nonaktifkan
fitur yang memanggil intent tersebut.
Jika Anda belum memahami cara membuat intent atau filter intent, baca Intent dan Filter Intent terlebih dahulu.
Untuk mempelajari cara mengaktifkan intent yang tercantum pada halaman ini dari host pengembangan Anda, lihat bagian Memverifikasi intent dengan Android Debug Bridge.
Google Voice Actions
Google Voice Actions mengaktifkan beberapa intent yang tercantum di halaman ini sebagai respons terhadap perintah suara. Untuk mengetahui informasi selengkapnya, lihat Memulai Voice Actions Sistem.
Jam alarm
Berikut adalah tindakan umum untuk aplikasi jam alarm, termasuk informasi yang diperlukan untuk membuat filter intent guna memberitahukan kemampuan aplikasi Anda dalam 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 tambahan jam, menit, dan pesan yang tersedia di Android 2.3 (API level 9) dan yang lebih rendah. Tambahan lainnya tersedia dalam 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 khusus untuk mengidentifikasi alarm.
EXTRA_DAYS
ArrayList
termasuk setiap hari kerja saat alarm ini diulang. Setiap hari harus dideklarasikan dengan bilangan bulat dari classCalendar
, sepertiMONDAY
.Untuk alarm satu kali, jangan tentukan tambahan 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.
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 menggunakan tambahan berikut.
Catatan: Intent ini tersedia di Android 4.4 (level API 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 kustom untuk mengidentifikasi timer.
EXTRA_SKIP_UI
- Boolean yang menentukan apakah aplikasi yang merespons harus melewati UI-nya saat menyetel timer. Jika true (benar), aplikasi harus mengabaikan UI konfirmasi dan memulai timer yang ditentukan.
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 (level API 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 memberitahukan kemampuan aplikasi Anda dalam melakukan tindakan ini menggunakan informasi di bagian berikut.
Menambahkan acara kalender:
Untuk menambahkan peristiwa baru ke kalender pengguna, gunakan tindakan 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 ini berlangsung sepanjang hari.
EXTRA_EVENT_BEGIN_TIME
- Waktu mulai peristiwa (milidetik sejak epoch).
EXTRA_EVENT_END_TIME
- Waktu berakhir peristiwa (milidetik sejak epoch).
TITLE
- Judul acara.
DESCRIPTION
- Deskripsi acara.
EVENT_LOCATION
- Lokasi acara.
EXTRA_EMAIL
- Daftar alamat email yang dipisahkan koma untuk menentukan tamu undangan.
Banyak detail peristiwa lainnya 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 memberitahukan kemampuan aplikasi Anda dalam 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
. Tentukan juga lokasi URI tempat
kamera akan menyimpan foto atau video, pada 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 mengetahui informasi selengkapnya tentang cara menggunakan intent ini guna 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.
Memilih 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 dikirim ke callback onActivityResult()
Anda berisi URI
content:
yang mengarah ke kontak yang dipilih. Responsnya memberikan
izin sementara kepada aplikasi Anda untuk membaca kontak tersebut menggunakan Contact Provider API, meskipun
aplikasi 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 emailnya, 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 tindakan ACTION_PICK
dan tetapkan 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
akan lebih efisien daripada
menggunakan Contacts.CONTENT_TYPE
, seperti 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. Respons tersebut memberikan
izin sementara kepada aplikasi Anda untuk membaca data kontak tersebut meskipun aplikasi tidak menyertakan izin READ_CONTACTS
.
- Tindakan
ACTION_PICK
- Skema URI Data
- Tidak ada
- Jenis MIME
-
CommonDataKinds.Phone.CONTENT_TYPE
- Pilih dari kontak dengan nomor telepon.
CommonDataKinds.Email.CONTENT_TYPE
- Memilih dari kontak dengan alamat email.
CommonDataKinds.StructuredPostal.CONTENT_TYPE
- Pilih 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 ditunjukkan di bagian sebelumnya. Pendekatan ini tidak memerlukan izin aplikasi apa pun. - Akses daftar semua kontak secara langsung, seperti yang 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 semua informasi kontak yang diketahui dalam tambahan yang ditentukan oleh
konstanta di ContactsContract.Intents.Insert
.
Ada dua cara utama untuk mengambil URI kontak terlebih dahulu:
- Gunakan URI kontak yang ditampilkan oleh tindakan
ACTION_PICK
yang ditunjukkan di bagian sebelumnya. Pendekatan ini tidak memerlukan izin aplikasi apa pun. - Akses daftar semua kontak secara langsung, seperti yang dijelaskan dalam Mengambil daftar kontak. Pendekatan ini memerlukan izin
READ_CONTACTS
.
- Tindakan
ACTION_EDIT
- Skema URI Data
content:<URI>
- Jenis MIME
- Jenis ini disimpulkan 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 Mengubah 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 Mengubah kontak menggunakan intent.
Menulis email dengan lampiran opsional adalah tindakan umum untuk aplikasi email. Buat filter intent untuk memberitahukan kemampuan aplikasi Anda dalam 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 diinginkan. Referensi file yang ditampilkan ke aplikasi bersifat sementara untuk siklus proses aktivitas
saat ini, jadi jika ingin mengaksesnya nanti, Anda harus mengimpor salinan yang dapat dibaca nanti.
Intent ini juga memungkinkan pengguna membuat file baru dalam prosesnya. Misalnya, bukan 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 pun, 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 (level API 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 harus 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, bukannya 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, menggunakan tindakan ACTION_GET_CONTENT
. Saat menjalankan Android 4.4 atau versi lebih tinggi, Anda dapat meminta untuk membuka file yang dikelola oleh aplikasi lain menggunakan tindakan ACTION_OPEN_DOCUMENT
dan menentukan jenis MIME.
Agar pengguna juga dapat membuat dokumen baru yang dapat menjadi tujuan penulisan aplikasi Anda, gunakan tindakan ACTION_CREATE_DOCUMENT
.
Misalnya, sebagai ganti
memilih dari dokumen PDF yang sudah ada, intent ACTION_CREATE_DOCUMENT
memungkinkan pengguna memilih tempat mereka ingin membuat dokumen baru, seperti di dalam aplikasi lain
yang mengelola penyimpanan dokumen. Aplikasi Anda kemudian menerima lokasi URI tempat dokumen baru dapat ditulis.
Sementara intent yang dikirim ke metode onActivityResult()
Anda dari tindakan ACTION_GET_CONTENT
mungkin
menampilkan URI jenis apa pun, intent yang dihasilkan 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 mengkueri 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
sangat berguna jika Anda ingin membaca file yang sudah ada tanpa membuat salinan ke dalam aplikasi
atau saat Anda ingin membuka dan mengedit file 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 menetapkan jenis MIME dan harus mendeklarasikan kategori CATEGORY_OPENABLE
. Jika sesuai, Anda dapat menentukan lebih dari satu jenis MIME dengan menambahkan array jenis MIME dengan tambahan EXTRA_MIME_TYPES
. Jika demikian, Anda harus menetapkan jenis MIME utama dalam 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 harus dipilih pengguna.
- Tambahan
-
EXTRA_MIME_TYPES
- Array jenis MIME yang sesuai dengan jenis file yang diminta aplikasi Anda. Jika menggunakan tambahan ini, Anda harus menetapkan jenis MIME utama dalam
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, bukannya 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 mengetahui informasi selengkapnya tentang cara membuat file yang dikelola oleh aplikasi Anda dapat dibuka dari aplikasi lain, baca Membuka file menggunakan framework akses penyimpanan.
Tindakan lokal
Menelepon mobil merupakan tindakan setempat yang umum. Buat filter intent untuk memberitahukan kemampuan aplikasi Anda dalam melakukan tindakan ini menggunakan informasi di bagian berikut.
Memanggil mobil
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 memberitahukan kemampuan aplikasi Anda dalam 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 menunjukkan 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 lokasi atau alamat 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 diperlukan untuk membuat filter intent guna memberitahukan kemampuan aplikasi Anda dalam melakukan setiap tindakan.
Memutar file media
Untuk memutar file musik, gunakan tindakan ACTION_VIEW
dan
tentukan 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 pun yang 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 di dalam inventarisnya untuk mencocokkan konten yang ada dengan kueri yang ditentukan dan
mulai memutar konten tersebut.
Dalam intent ini, sertakan tambahan string EXTRA_MEDIA_FOCUS
, yang menentukan mode penelusuran yang diinginkan. Misalnya, mode penelusuran dapat menentukan apakah
penelusuran mencari 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 mencari artis, album, lagu, atau playlist tertentu. Kebanyakan mode penelusuran memerlukan ekstra tambahan. Misalnya, jika pengguna tertarik untuk mendengarkan lagu tertentu, intent tersebut mungkin memiliki tiga tambahan tambahan: 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 musik berdasarkan pilihan cerdas, seperti playlist terakhir yang didengarkan pengguna.
Ekstra tambahan:
QUERY
(wajib): string kosong. Tambahan ini selalu disediakan untuk kompatibilitas mundur. Aplikasi yang sudah ada yang tidak mengetahui mode penelusuran dapat memproses intent ini sebagai penelusuran tidak 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 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. Tambahan ini selalu disediakan untuk kompatibilitas mundur. Aplikasi yang sudah 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 pun dari artis atau genre. Tambahan ini selalu disediakan untuk kompatibilitas mundur. Aplikasi yang sudah ada yang tidak mengetahui mode penelusuran dapat memproses intent ini sebagai penelusuran tidak terstruktur.
Album -
Audio.Albums.ENTRY_CONTENT_TYPE
-
Memutar musik dari album tertentu.
Ekstra tambahan:
EXTRA_MEDIA_ALBUM
(wajib diisi): album.EXTRA_MEDIA_ARTIST
: artis."android.intent.extra.genre"
: genre.QUERY
(wajib): string yang berisi kombinasi apa pun dari album atau artis. Tambahan ini selalu disediakan untuk kompatibilitas mundur. Aplikasi yang sudah ada yang tidak mengetahui mode penelusuran dapat memproses intent ini sebagai penelusuran tidak 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. Tambahan ini selalu disediakan untuk kompatibilitas mundur. Aplikasi yang sudah ada yang tidak mengetahui mode penelusuran dapat memproses intent ini sebagai penelusuran tidak 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
: judul lagu yang menjadi dasar playlist.QUERY
(wajib): string yang berisi kombinasi apa pun dari album, artis, genre, playlist, atau judul. Tambahan ini selalu disediakan untuk kompatibilitas mundur. Aplikasi yang sudah ada yang tidak mengetahui mode penelusuran dapat memproses intent ini sebagai penelusuran tidak 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 dalam aktivitas Anda, periksa nilai
tambahan EXTRA_MEDIA_FOCUS
dalam Intent
yang masuk untuk menentukan mode penelusuran. Setelah aktivitas Anda mengidentifikasi
mode penelusuran, baca nilai tambahan tambahan untuk mode penelusuran tersebut.
Dengan informasi ini, aplikasi Anda dapat melakukan penelusuran di dalam inventarisnya untuk 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 tindakan
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 telepon.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
, tambahan 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.
- Aktifkan 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 memberitahukan kemampuan aplikasi Anda dalam melakukan tindakan ini menggunakan informasi di bagian berikut.
Memulai panggilan telepon
Untuk membuka aplikasi telepon dan menghubungi nomor telepon, gunakan tindakan ACTION_DIAL
dan tentukan nomor telepon menggunakan
skema URI berikut. Saat aplikasi telepon terbuka, nomor telepon akan ditampilkan,
dan pengguna harus mengetuk tombol Call untuk memulai panggilan telepon.
Untuk melakukan panggilan telepon secara langsung, gunakan tindakan ACTION_CALL
dan tentukan nomor telepon menggunakan skema URI berikut. Ketika aplikasi telepon terbuka, panggilan telepon akan dimulai. Pengguna tidak perlu mengetuk tombol Call.
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 telepon yang ditetapkan dalam IETF RFC 3966. Contoh yang valid meliputi berikut ini:
Telepon aplikasi Telepon dapat menormalisasi skema, seperti
nomor telepon. Jadi, skema yang dijelaskan tidak sepenuhnya diperlukan dalam
metode Uri.parse()
.
Namun, jika Anda belum mencoba suatu skema atau tidak yakin apakah
skema 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 memberitahukan kemampuan aplikasi Anda dalam melakukan setiap tindakan.
Menelusuri dengan menggunakan aplikasi tertentu
Untuk mendukung penelusuran dalam konteks aplikasi Anda, deklarasikan filter intent di aplikasi Anda dengan
tindakan SEARCH_ACTION
, seperti yang ditunjukkan dalam contoh filter intent berikut.
Catatan: Kami tidak merekomendasikan penggunaan 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 mengharuskan pengguna 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 memberitahukan kemampuan aplikasi Anda dalam 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 hanya ditangani oleh aplikasi pesan teks, dan bukan aplikasi
email atau sosial lain, 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 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 mengetahui informasi selengkapnya, lihat dokumentasi di Telephony
.
Browser web
Memuat URL web adalah tindakan umum untuk aplikasi browser web. Buat filter intent untuk memberitahukan kemampuan aplikasi Anda dalam 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 telah menginstal aplikasi Anda, link dari email atau halaman web yang mengarah ke situs 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 tidak disetujui untuk domain, intent web akan ditetapkan ke aplikasi browser default pengguna.
Memverifikasi intent dengan Android Debug Bridge
Untuk memverifikasi bahwa aplikasi Anda merespons intent yang ingin didukung, Anda dapat menggunakan
alat adb
untuk mengaktifkan intent tertentu dengan melakukan
hal berikut:
Untuk mengetahui informasi selengkapnya, lihat Memberikan perintah shell.