Intent memungkinkan Anda memulai aktivitas di aplikasi lain dengan menjelaskan
tindakan yang ingin Anda lakukan, seperti "melihat peta" atau "ambil
gambar," dalam objek Intent
. Jenis intent ini
disebut intent implisit karena tidak menetapkan aplikasi
untuk memulai, tetapi menentukan tindakan dan memberikan
beberapa data yang akan digunakan untuk melakukan tindakan.
Saat Anda menelepon startActivity()
atau startActivityForResult()
dan meneruskan intent implisit ke sistem,
menyelesaikan
intent ke aplikasi yang dapat menangani intent tersebut dan memulai
Activity
yang sesuai. Jika ada lebih dari satu aplikasi
yang bisa menangani intent tersebut, sistem akan menyajikan dialog kepada pengguna
memilih aplikasi yang akan digunakan.
Halaman ini menjelaskan beberapa intent implisit yang bisa Anda gunakan untuk melakukan tindakan umum, yang disusun menurut jenis aplikasi yang menangani intent. Masing-masing juga menunjukkan cara membuat intent filter 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
aplikasi tersedia untuk menerima intent, panggil resolveActivity()
pada objek Intent
Anda. Jika hasilnya bukan {i>null<i}, setidaknya
satu aplikasi yang dapat menangani intent, dan aman untuk memanggil startActivity()
. Jika hasilnya
adalah
null, jangan gunakan intent tersebut dan, jika memungkinkan, nonaktifkan
fitur yang memanggil intent tersebut.
Jika Anda tidak memahami cara membuat intent atau filter intent, baca Intent dan Intent terlebih dahulu Filter.
Untuk mempelajari cara mengaktifkan intent yang tercantum pada halaman ini dari pengembangan Anda lihat dokumentasi Memverifikasi intent dengan Android Debug Jembatan.
Google Voice Actions
Google Voice Tindakan mengaktifkan 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 memberitahukan kemampuan aplikasi Anda dalam melakukan setiap tindakan.
Membuat alarm
Untuk membuat alarm baru, gunakan ACTION_SET_ALARM
dan menetapkan 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 yang lebih tinggi dari terkelola sepenuhnya.
- 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 berulang. Setiap hari harus dideklarasikan dengan bilangan bulat dariCalendar
, 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 timer
detail 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 ACTION_SHOW_ALARMS
tindakan.
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 kejadian kalender
Untuk menambahkan acara baru ke kalender pengguna, gunakan
ACTION_INSERT
dan tetapkan 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 kejadian lainnya yang bisa ditetapkan dengan menggunakan konstanta yang didefinisikan 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 Anda akan
seperti kamera untuk menyimpan foto atau video, di EXTRA_OUTPUT
tambahan.
- 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 foto atau
file video (sebagai objek
Uri
).
Saat aplikasi kamera berhasil ditampilkan
berfokus pada aktivitas—dengan kata lain, aplikasi akan menerima callback onActivityResult()
—Anda
dapat mengakses foto atau video di URI yang Anda tentukan
dengan nilai EXTRA_OUTPUT
.
Catatan: Jika Anda menggunakan ACTION_IMAGE_CAPTURE
untuk mengambil foto, kamera mungkin juga mengembalikan
salinan atau thumbnail foto yang diperkecil dalam hasil Intent
, yang disimpan sebagai Bitmap
dalam kolom ekstra 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
Ambil foto atau
Ambil 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, lalu panggil setResult()
dengan Intent
yang menyertakan thumbnail terkompresi dalam
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
Agar pengguna memilih kontak dan memberi aplikasi Anda akses ke semua informasi kontak,
gunakan tindakan ACTION_PICK
dan tetapkan jenis MIME untuk
Contacts.CONTENT_TYPE
.
Hasil Intent
yang dikirimkan ke callback onActivityResult()
berisi
URI content:
yang mengarah ke kontak yang dipilih. Respons memberikan
izin sementara aplikasi Anda untuk membaca kontak tersebut menggunakan Contacts Provider API, meskipun
aplikasi Anda tidak menyertakan izin READ_CONTACTS
.
Tips: Jika Anda memerlukan akses hanya ke kontak tertentu seperti nomor telepon atau alamat email. Lihat bagian berikutnya tentang cara pilih 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 kontak.
Saat mengambil URI kontak menggunakan intent ini, Anda biasanya tidak
memerlukan
READ_CONTACTS
izin akses untuk membaca detail dasar
kontak tersebut, seperti nama tampilan dan
apakah kontak berbintang. Namun, jika Anda mencoba
membaca data yang lebih spesifik tentang kontak tertentu—seperti
nomor telepon atau alamat email mereka—Anda memerlukan READ_CONTACTS
izin akses.
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 menentukan jenis MIME ke satu
dari jenis konten berikut, seperti
CommonDataKinds.Phone.CONTENT_TYPE
untuk mendapatkan nomor telepon kontak.
Catatan: Dalam banyak kasus, aplikasi Anda harus memiliki
READ_CONTACTS
izin untuk melihat informasi khusus tentang kontak tertentu.
Jika Anda hanya perlu mengambil satu jenis data dari sebuah 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 ke data yang diinginkan tanpa mengharuskan Anda melakukan kueri yang lebih kompleks ke Penyedia Kontak.
Hasil Intent
yang dikirimkan ke callback onActivityResult()
berisi
URI content:
yang mengarah ke data kontak yang dipilih. Respons memberikan
aplikasi Anda akan memberikan izin sementara 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 bawahContactsContract
.
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 dikenal, gunakan ACTION_VIEW
dan menetapkan 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
READ_CONTACTS
izin akses.
- 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 dikenal, gunakan ACTION_EDIT
menentukan kontak dengan URI content:
sebagai data maksud, dan menyertakan informasi kontak apa pun
yang diketahui dalam tambahan yang ditetapkan 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
READ_CONTACTS
izin akses.
- Tindakan
ACTION_EDIT
- Skema URI Data
content:<URI>
- Jenis MIME
- Jenis ini disimpulkan dari URI kontak.
- Tambahan
- Satu atau beberapa tambahan yang ditentukan di
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 kontak menggunakan intent.
Menyisipkan kontak
Untuk menyisipkan kontak baru, gunakan tindakan ACTION_INSERT
,
tentukan Contacts.CONTENT_TYPE
sebagai
jenis MIME, dan menyertakan semua informasi kontak
yang diketahui dalam tambahan yang ditentukan 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
(jika 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 dari semua "To" alamat email penerima.
Intent.EXTRA_CC
- Array string semua "CC" alamat email penerima.
Intent.EXTRA_BCC
- Array string semua "BCC" alamat email penerima.
Intent.EXTRA_SUBJECT
- String dengan subjek email.
Intent.EXTRA_TEXT
- String dengan isi email.
Intent.EXTRA_STREAM
Uri
yang mengarah ke lampiran. Jika menggunakanACTION_SEND_MULTIPLE
, ini adalahArrayList
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 Anda hanya ditangani oleh aplikasi email, dan bukan
pesan teks atau aplikasi sosial, lalu 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
aplikasi Anda, gunakan tindakan ACTION_GET_CONTENT
dan tentukan
Jenis MIME. Referensi file yang ditampilkan ke aplikasi Anda bersifat sementara dengan aktivitas saat ini
{i>siklus proses<i}, jadi jika Anda ingin mengaksesnya nanti, Anda harus mengimpor salinan yang dapat Anda baca nanti.
Intent ini juga memungkinkan pengguna membuat file baru dalam prosesnya. Sebagai sebagai ganti 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 content:
URI. 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
sesuai niat Anda.
Pada Android 4.3 (level API 18) dan yang lebih tinggi,
Anda juga dapat memungkinkan pengguna
memilih beberapa file dengan menambahkan
EXTRA_ALLOW_MULTIPLE
ke intent, ditetapkan ke true
.
Anda kemudian dapat mengakses setiap file yang dipilih di ClipData
objek 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, daripada memerlukan download dari layanan jarak jauh.
- Kategori (opsional)
-
CATEGORY_OPENABLE
- Untuk menampilkan hanya "dapat dibuka" file 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
Sebagai ganti mengambil salinan file yang harus Anda impor ke aplikasi, dengan menggunakan tindakan ACTION_GET_CONTENT
, saat berjalan di Android
4.4 atau lebih tinggi, Anda dapat meminta untuk membuka file yang dikelola oleh aplikasi lain dengan
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, daripada
memilih dari dokumen PDF yang sudah ada, ACTION_CREATE_DOCUMENT
memungkinkan pengguna memilih tempat mereka ingin membuat dokumen baru, seperti dalam aplikasi lain
yang mengelola penyimpanan dokumen. Aplikasi Anda kemudian menerima lokasi URI tempat
dapat menulis dokumen baru.
Sedangkan intent dikirim ke onActivityResult()
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
membuat kueri detailnya menggunakan kolom dari DocumentsContract.Document
.
URI yang ditampilkan memberi aplikasi Anda akses baca jangka panjang ke file tersebut, mungkin juga
dengan akses tulis. Tindakan ACTION_OPEN_DOCUMENT
adalah
sangat berguna jika Anda ingin membaca file yang ada tanpa membuat salinan di dalam aplikasi
atau saat Anda ingin membuka
dan mengedit file di tempat.
Anda juga dapat memungkinkan pengguna memilih beberapa file dengan menambahkan
EXTRA_ALLOW_MULTIPLE
ke intent, 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 ClipData
yang ditampilkan oleh getClipData()
.
Catatan: Intent Anda harus menetapkan jenis MIME dan
harus mendeklarasikan kategori CATEGORY_OPENABLE
. Jika
sesuai, Anda bisa menetapkan lebih dari satu tipe MIME dengan menambahkan satu larik tipe MIME bersama
EXTRA_MIME_TYPES
tambahan. Jika melakukannya, Anda harus menyetel
jenis MIME utama dalam setType()
hingga "*/*"
.
- 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 digunakan aplikasi Anda
diminta. Bila Anda menggunakan tambahan ini, Anda harus menetapkan jenis MIME utama di
setType()
hingga"*/*"
. 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, daripada memerlukan download dari layanan jarak jauh.
- Kategori
-
CATEGORY_OPENABLE
- Untuk menampilkan hanya "dapat dibuka" file 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 menerima ini
dan menampilkan semua file yang tersedia dari berbagai aplikasi dalam satu 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 yang 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 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 mengiklankan kebutuhan aplikasi Anda kemampuan untuk melakukan tindakan ini menggunakan informasi di bagian berikutnya.
Panggil ojek
Untuk memanggil taksi, gunakan
ACTION_RESERVE_TAXI_RESERVATION
tindakan.
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. Tertinggi
tingkat zoom (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 Anda perlukan 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
menetapkan 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_ACTION_MEDIA_PLAY_FROM_SEARCH
. Aplikasi mungkin diaktifkan
intent ini sebagai respons terhadap perintah suara pengguna untuk memutar musik. Aplikasi penerima untuk data ini
intent melakukan penelusuran di dalam inventarisnya untuk mencocokkan konten yang ada dengan kueri yang diberikan
mulai memutar konten tersebut.
Dalam intent ini, sertakan string EXTRA_MEDIA_FOCUS
tambahan, yang menentukan mode pencarian yang dimaksud. Misalnya, mode penelusuran dapat menentukan apakah
pencariannya adalah untuk mencari
nama artis atau judul 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 tertentu, atau playlist. Kebanyakan mode penelusuran memerlukan ekstra tambahan. Misalnya, jika pengguna tertarik untuk mendengarkan lagu tertentu, intent tersebut mungkin memiliki tiga ekstra tambahan: judul lagu, artis, dan album. Intent ini mendukung mode pencarian untuk setiap nilai
EXTRA_MEDIA_FOCUS
:Apa pun -
"vnd.android.cursor.item/*"
-
Memutar musik apa saja. Aplikasi penerima memutar musik berdasarkan pilihan cerdas, seperti sebagai {i>playlist<i} terakhir yang didengarkan pengguna.
Ekstra tambahan:
QUERY
(wajib): string kosong. Tambahan ini selalu yang disediakan untuk kompatibilitas mundur. Aplikasi yang ada yang tidak mengetahui mode penelusuran dapat memproses maksud ini sebagai penelusuran tak terstruktur.
Tidak terstruktur -
"vnd.android.cursor.item/*"
-
Memutar lagu, album, atau genre tertentu dari kueri penelusuran tak terstruktur. Aplikasi dapat membuat intent dengan mode penelusuran ini saat mereka tidak bisa mengidentifikasi jenis konten yang ingin dilihat pengguna didengarkan. Gunakan mode penelusuran yang lebih spesifik jika memungkinkan.
Ekstra tambahan:
QUERY
(wajib): string yang berisi kombinasi apa pun artis, album, judul 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 maksud 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 ada yang tidak mengetahui mode penelusuran dapat memproses intent ini sebagai intent tidak terstruktur cari.
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 tindakan kompatibilitas mundur. Aplikasi yang ada yang tidak mengetahui mode penelusuran bisa memproses intent ini sebagai pencarian 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. Tambahan ini selalu disediakan untuk kompatibilitas mundur. Aplikasi yang sudah ada yang tidak mengetahui mode penelusuran dapat memproses penelusuran ini intent sebagai penelusuran tak terstruktur.
Playlist -
Audio.Playlists.ENTRY_CONTENT_TYPE
-
Memutar playlist tertentu atau playlist yang cocok dengan beberapa kriteria yang ditentukan dengan 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 untuk playlist yang menjadi dasar.QUERY
(wajib): string yang berisi kombinasi apa pun album, artis, genre, playlist, atau judul. Tambahan ini selalu yang disediakan untuk kompatibilitas mundur. Aplikasi yang ada yang tidak mengetahui mode penelusuran dapat memproses maksud 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 dalam aktivitas Anda, periksa nilai
Tambahan EXTRA_MEDIA_FOCUS
dalam panggilan masuk
Intent
untuk menentukan mode penelusuran. Setelah aktivitas Anda teridentifikasi
mode pencarian, membaca nilai tambahan
untuk mode pencarian itu.
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
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 (memerlukanCALL_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 yang akan dilampirkan. Jika menggunakan tindakanACTION_SEND_MULTIPLE
, ekstra ini adalahArrayList
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"
- Menyiapkan 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, aplikasi akan menampilkan nomor telepon,
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. Saat aplikasi telepon terbuka,
akan memulai panggilan telepon. Pengguna tidak perlu mengetuk tombol Call.
Tindakan ACTION_CALL
mengharuskan Anda menambahkan
Izin CALL_PHONE
ke file manifes Anda:
<uses-permission android:name="android.permission.CALL_PHONE" />
Nomor telepon yang valid adalah nomor yang ditentukan di IETF RFC 3966. Contoh yang valid meliputi berikut ini:
Aplikasi telepon aplikasi Telepon bagus dalam menormalisasi skema, seperti
nomor telepon Anda. Jadi skema yang dideskripsikan
tidak mutlak diperlukan dalam
Metode Uri.parse()
.
Namun, jika Anda belum mencoba suatu skema atau tidak yakin apakah itu
dapat ditangani, gunakan Uri.fromParts()
metode tersebut.
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, implementasikan metode
GET_THING
tindakan untuk memanfaatkan dukungan bawaan Asisten Google untuk penelusuran dalam aplikasi. Untuk informasi selengkapnya, lihat
Asisten Google
Dokumentasi Action Aplikasi.
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 menentukan string pencarian
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 pesan seperti nomor telepon, subjek, dan isi pesan menggunakan tombol ekstra 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 ingin memastikan bahwa intent Anda hanya ditangani oleh aplikasi pesan teks, dan bukan
email atau aplikasi sosial, lalu 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 informasi selengkapnya, lihat dokumentasi
pukul 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 menentukan 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 Anda, sertakan filter intent untuk URL yang mengarah ke situs web Anda. Lalu: jika pengguna telah menginstal aplikasi Anda, link dari email atau halaman web lain yang mengarah ke situs Anda membuka aplikasi Android, bukan halaman web. 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, web intent ditetapkan ke aplikasi browser default pengguna.
Memverifikasi intent dengan Android Debug Bridge
Untuk memverifikasi apakah aplikasi Anda merespons intent yang ingin didukung, Anda bisa menggunakan metode
Alat adb
untuk mengaktifkan intent tertentu dengan melakukan
hal berikut:
Untuk informasi selengkapnya, lihat Membuat perintah shell.