Apa tujuan dari “android.intent.category.DEFAULT”?

104

Apa tujuan penggunaan android.intent.category.DEFAULTdi bidang Kategori Filter Maksud?

Pravy
sumber
2
Pepatah Anda ini adalah titik masuk default untuk aplikasi Anda. Lihat: developer.android.com/reference/android/content/…
Blundell
@Blundell: jadi jika maksud implisit datang, aktivitas dengan default sebagai kategori dalam filter maksud akan dipanggil?
Pravy
1
Saya percaya ini digunakan untuk menyiratkan ini adalah aktivitas yang akan digunakan ya "ini untuk digunakan dalam filter maksud yang ditentukan dalam paket"
Blundell
jika lebih dari satu aktivitas berisi default sebagai kategorinya, dalam filter maksud masing-masing aktivitas mana yang akan dipanggil?
Pravy
Jika mereka memiliki filter maksud yang berbeda, itu akan bergantung pada maksudnya.
Blundell

Jawaban:

112

Kategori digunakan untuk Maksud implisit. Jadi, Jika Aktivitas Anda bisa dimulai dengan Maksud implisit saat tidak ada kategori spesifik lain yang ditetapkan ke aktivitas, filter Maksud aktivitas harus menyertakan kategori ini. (meskipun Anda memiliki kategori lain di filter Intent). Jika Anda yakin bahwa aktivitas Anda harus dipanggil dengan Kategori lain, jangan gunakan Default.

Menyetel Kategori ke Default tidak berarti bahwa Aktivitas ini akan digunakan secara default saat aplikasi Anda diluncurkan. Aktivitas hanya mengatakan kepada sistem bahwa " Oh, saya bisa memulai, bahkan jika kategori Intent pemula disetel ke Tidak ada sama sekali! "

Özgür
sumber
27
Ini sebenarnya penjelasan yang bisa dimengerti. Bandingkan jawaban ini dengan dokumen: "Setel jika aktivitas harus menjadi opsi untuk tindakan default (tekan tengah) untuk dilakukan pada sepotong data. Menyetel ini akan menyembunyikan aktivitas apa pun dari pengguna tanpa disetel saat melakukan tindakan pada beberapa data "Betapa sulitnya menulis deskripsi yang dapat dipahami ...
Andreas
Saya tidak yakin tentang mandatnya karena tampaknya opsional karena aktivitas tanpa filter maksud apa pun masih bisa disebut sebagai aktivitas implisit
humblerookie
6
Dokumentasi sekarang menjadi lebih jelas IMO: Android otomatis menerapkan kategori CATEGORY_DEFAULT ke semua maksud implisit yang diteruskan ke startActivity () dan startActivityForResult (). Jadi, jika Anda ingin aktivitas Anda menerima maksud implisit, itu harus menyertakan kategori untuk "android.intent.category.DEFAULT" dalam filter maksudnya.
shkschneider
2
@tokopedia Saya sudah mencobanya dan tidak berhasil tanpa kategori DEFAULT. Jika Anda tidak percaya saya menguji diri Anda sendiri.
Bob Ueland
2
Andai saja semua tutorial ditulis dengan cara ini. Mengapa kami masih menggunakan bahasa kayu di tahun 2018?
SudoPlz
24

Kategori ini terutama digunakan untuk maksud implisit. Jika aktivitas Anda ingin dimulai dengan maksud implisit, itu harus menyertakan kategori ini dalam filternya.

Saya pikir istilah "default" harus dipahami sebagai " kandidat default ". Jika tindakan pada sepotong data menyelesaikan beberapa aktivitas, Android akan menampilkan semua kandidat kepada pengguna dan pengguna dapat memilih default pilihannya.

Referensi:

http://developer.android.com/guide/components/intents-filters.html

Ekstrak dari halaman itu:

Android memperlakukan semua maksud implisit yang diteruskan kestartActivity () seolah-olah mengandung setidaknya satu kategori: "android.intent.category.DEFAULT" (konstanta CATEGORY_DEFAULT). Oleh karena itu, aktivitas yang bersedia menerima maksud implisit harus menyertakan "android.intent.category.DEFAULT" di filter maksudnya. (Filter dengan setelan "android.intent.action.MAIN" dan "android.intent.category.LAUNCHER" adalah pengecualian. Filter menandai aktivitas yang memulai tugas baru dan yang direpresentasikan di layar peluncur. Filter tersebut dapat menyertakan "android.intent .category.DEFAULT "di daftar kategori, tetapi tidak perlu.)

Bruno Ranschaert
sumber
@ Comptrol, jawaban Anda tidak lagi di bawah. Itu naik. :-)
Ellen Spertus
Ya, tapi saya mengembalikannya ke keadaan semula. Jadi saya tidak mengubah apa pun sama sekali.
Özgür
1
Saya menemukan jawaban ini lebih membantu untuk filter maksud pemahaman situasi saya saat ini. Terima kasih.
Neon Warge
1

Ini sebenarnya untuk memastikan aktivitas Anda yang lain dapat dipanggil saat aplikasi sedang berjalan. LAUNCHER akan menjadikan aktivitas yang memilikinya sebagai aktivitas pertama yang dimulai. Untuk menggunakan maksud untuk sampai ke aktivitas lain, mereka harus terdaftar sebagai aktivitas "aktual" dengan meletakkan DEFAULT. Itu dari apa yang saya tahu jadi jangan mengutip saya jika itu salah.

CHT
sumber
3
Anda harus berusaha memberikan referensi untuk klaim Anda. "jangan mengutip saya jika salah" tidak memungkinkan Anda untuk menimpa aturan ini.
verybadalloc
Referensi yang saya miliki adalah proyek yang saya kerjakan saat saya belajar tentang pengkodean Android. Jika Anda menginginkan file sumber, saya akan dengan senang hati mengirimkannya.
CHT
1

Aktivitas perlu mendukung CATEGORY_DEFAULT agar dapat ditemukan oleh Context.startActivity ().

Untuk menerima maksud implisit, Anda harus menyertakan kategori CATEGORY_DEFAULT dalam filter maksud. Metode startActivity () dan startActivityForResult () memperlakukan semua maksud seolah-olah mereka mendeklarasikan kategori CATEGORY_DEFAULT. Jika kita tidak mendeklarasikannya dalam filter maksud kita, tidak ada maksud implisit yang akan menyelesaikan aktivitas kita.

Shinoo Goyal
sumber
0

Ini digunakan untuk mendeklarasikan beberapa operasi sebagai aksi default (seperti yang disarankan namanya). Mari pertimbangkan kami memiliki aplikasi notepad (mengacu pada contoh notepad android). Halaman pertama aplikasi terdiri dari daftar semua file notepad. Ketika satu file notepad dipilih, salah satu operasi seperti edit catatan, hapus catatan dll dapat dilakukan. Tetapi saya ingin menjadikan edit sebagai tindakan default saya yang berarti ketika saya menekan tombol tengah keypad saya, jendela edit harus terbuka.

Prerna
sumber
1
Jika Anda melihat contoh Notepad Android, semua Aktivitas ditandai sebagai default: developer.android.com/reference/android/content/Intent.html
Peter Ajtai
0

https://developer.android.com/guide/components/intents-filters

Untuk menerima maksud implisit, Anda harus menyertakan kategori CATEGORY_DEFAULT dalam filter maksud. Metode startActivity () dan startActivityForResult () memperlakukan semua maksud seolah-olah mereka mendeklarasikan kategori CATEGORY_DEFAULT. Jika Anda tidak mendeklarasikan kategori ini dalam filter maksud Anda, tidak ada maksud implisit yang akan menyelesaikan aktivitas Anda.

kreker
sumber