จุดประสงค์ของ“ android.intent.category.DEFAULT” คืออะไร?


104

วัตถุประสงค์ของการใช้android.intent.category.DEFAULTในฟิลด์หมวดหมู่ของตัวกรองเจตนาคืออะไร?


2
คำพูดของคุณนี่เป็นจุดเริ่มต้นสำหรับแอปพลิเคชันของคุณ ดู: developer.android.com/reference/android/content/…
Blundell

@Blundell: ดังนั้นหากเจตนาโดยปริยายมาถึงกิจกรรมที่มีค่าเริ่มต้นเป็นคำบรรยายในตัวกรองความตั้งใจจะถูกเรียก?
Pravy

1
ฉันเชื่อว่ามันใช้เพื่อบอกเป็นนัยว่านี่เป็นกิจกรรมที่จะใช้ใช่ "สำหรับใช้ในตัวกรองความตั้งใจที่ระบุในแพ็คเกจ"
Blundell

หากมากกว่าหนึ่งกิจกรรมมีค่าเริ่มต้นเป็นหมวดหมู่ในเจตนาที่เกี่ยวข้องจะกรองกิจกรรมที่จะเรียก?
Pravy

หากมีตัวกรองจุดประสงค์ที่แตกต่างกันก็จะขึ้นอยู่กับเจตนา
Blundell

คำตอบ:


112

หมวดหมู่ใช้สำหรับเจตนาโดยปริยาย ดังนั้นหากกิจกรรมของคุณสามารถเริ่มต้นได้โดยเจตนาโดยปริยายเมื่อไม่มีการกำหนดหมวดหมู่เฉพาะอื่น ๆ ให้กับกิจกรรมตัวกรองเจตนาของกิจกรรมควรรวมหมวดหมู่นี้ไว้ด้วย (แม้ว่าคุณจะมีหมวดหมู่อื่น ๆ ในตัวกรองเจตนาก็ตาม) หากคุณแน่ใจว่ากิจกรรมของคุณต้องถูกเรียกด้วยหมวดหมู่อื่น ๆ อย่าใช้ค่าเริ่มต้น

การตั้งค่าหมวดหมู่เป็นค่าเริ่มต้นไม่ได้หมายความว่ากิจกรรมนี้จะถูกใช้โดยค่าเริ่มต้นเมื่อแอปของคุณเปิดตัว กิจกรรมบอกกับระบบว่า " โอ้ฉันเริ่มได้แม้ว่าหมวดหมู่ Intent ของผู้เริ่มต้นจะตั้งค่าเป็นNothingเลย! "


27
นี่เป็นคำอธิบายที่เข้าใจได้จริง เปรียบเทียบคำตอบนี้กับเอกสาร: "ตั้งค่าว่ากิจกรรมควรเป็นตัวเลือกสำหรับการดำเนินการเริ่มต้น (กดตรงกลาง) เพื่อดำเนินการกับข้อมูลส่วนหนึ่งหรือไม่การตั้งค่านี้จะซ่อนกิจกรรมใด ๆ จากผู้ใช้โดยไม่ได้ตั้งค่าไว้เมื่อดำเนินการกับบางส่วน data "มันยากแค่ไหนที่จะเขียนคำอธิบายที่เข้าใจได้ ...
Andreas

ฉันไม่แน่ใจเกี่ยวกับคำสั่งของมันแม้ว่าดูเหมือนว่าจะเป็นทางเลือกเนื่องจากกิจกรรมที่ไม่มีตัวกรองเจตนาใด ๆ ยังสามารถเรียกได้ว่าเป็นกิจกรรมโดยปริยาย
humblerookie

6
ขณะนี้เอกสารมีความชัดเจนมากขึ้น IMO: Android ใช้หมวดหมู่ CATEGORY_DEFAULT โดยอัตโนมัติกับเจตนาโดยปริยายทั้งหมดที่ส่งไปยัง startActivity () และ startActivityForResult () ดังนั้นหากคุณต้องการให้กิจกรรมของคุณได้รับความตั้งใจโดยปริยายกิจกรรมนั้นจะต้องมีหมวดหมู่สำหรับ "android.intent.category.DEFAULT" ในตัวกรองความตั้งใจ
shkschneider

2
@humblerookie. ฉันได้ลองแล้วและใช้งานไม่ได้หากไม่มีหมวดหมู่ค่าเริ่มต้น ถ้าคุณไม่เชื่อฉันทดสอบด้วยตัวคุณเอง
Bob Ueland

2
หากมีเพียงบทแนะนำทั้งหมดที่เขียนด้วยวิธีนี้ ทำไมเรายังใช้ภาษาไม้ในปี 2018?
SudoPlz

24

หมวดหมู่นี้ส่วนใหญ่ใช้สำหรับเจตนาโดยปริยาย หากกิจกรรมของคุณต้องการให้เริ่มโดยเจตนาโดยปริยายควรรวมหมวดหมู่นี้ไว้ในตัวกรอง

ฉันคิดว่าคำว่า "ค่าเริ่มต้น" ควรเข้าใจว่าเป็น " ผู้สมัครเริ่มต้น " หากการดำเนินการกับข้อมูลแก้ไขกิจกรรมหลายอย่าง Android จะนำเสนอผู้สมัครทั้งหมดให้กับผู้ใช้และผู้ใช้สามารถเลือกค่าเริ่มต้นที่ต้องการได้

อ้างอิง:

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

ดึงข้อมูลจากหน้านั้น:

Android ถือว่า Intent โดยปริยายทั้งหมดที่ส่งไปยังstartActivity () เหมือนกับว่ามีอย่างน้อยหนึ่งหมวดหมู่: "android.intent.category.DEFAULT" (ค่าคงที่ CATEGORY_DEFAULT) ดังนั้นกิจกรรมที่ยินดีรับเจตนาโดยปริยายจะต้องมี "android.intent.category.DEFAULT" ในตัวกรองความตั้งใจ (ตัวกรองที่มีการตั้งค่า "android.intent.action.MAIN" และ "android.intent.category.LAUNCHER" เป็นข้อยกเว้นโดยจะทำเครื่องหมายกิจกรรมที่เริ่มต้นงานใหม่และจะแสดงบนหน้าจอตัวเรียกใช้ซึ่งอาจรวมถึง "android.intent .category.DEFAULT "ในรายการหมวดหมู่ แต่ไม่จำเป็นต้องทำ)


@Comptrol คำตอบของคุณไม่อยู่ด้านล่างอีกต่อไป มันเพิ่มขึ้น :-)
Ellen Spertus

ใช่ แต่ฉันย้อนกลับไปสู่สถานะเดิม ดังนั้นฉันจึงไม่ได้เปลี่ยนอะไรเลยโดยรวม
Özgür

1
ฉันพบว่าคำตอบนี้มีประโยชน์มากขึ้นสำหรับตัวกรองเจตนาที่เข้าใจสถานการณ์ในปัจจุบันของฉัน ขอบคุณ.
Neon Warge

1

จริง ๆ แล้วเพื่อให้แน่ใจว่าสามารถเรียกกิจกรรมอื่น ๆ ของคุณออกมาได้เมื่อแอปกำลังทำงาน LAUNCHER จะทำให้กิจกรรมที่มีเป็นกิจกรรมแรกที่เริ่มต้น ในการใช้ Intent เพื่อไปยังกิจกรรมอื่น ๆ พวกเขาจะต้องระบุว่าเป็นกิจกรรม "จริง" โดยใส่ DEFAULT นั่นมาจากสิ่งที่ฉันรู้ดังนั้นอย่าอ้างฉันว่ามันผิด


3
คุณควรพยายามให้ข้อมูลอ้างอิงสำหรับการอ้างสิทธิ์ของคุณ "อย่าอ้างว่าฉันผิด" ไม่อนุญาตให้คุณลบล้างกฎนี้
verybadalloc

ข้อมูลอ้างอิงที่ฉันมีคือโครงการที่ฉันทำในขณะที่ฉันศึกษาเกี่ยวกับการเข้ารหัส Android หากคุณต้องการไฟล์ต้นฉบับเรายินดีที่จะส่งให้
CHT

1

กิจกรรมจะต้องสนับสนุน CATEGORY_DEFAULT เพื่อให้สามารถค้นพบได้โดย Context.startActivity ()

ในการรับเจตนาโดยปริยายคุณต้องรวมหมวดหมู่ CATEGORY_DEFAULT ไว้ในตัวกรองความตั้งใจ เมธอด startActivity () และ startActivityForResult () ปฏิบัติต่อ Intent ทั้งหมดราวกับว่าพวกเขาประกาศหมวด CATEGORY_DEFAULT หากเราไม่ประกาศไว้ในตัวกรองความตั้งใจของเราจะไม่มีเจตนาโดยปริยายใดที่จะแก้ไขกิจกรรมของเราได้


0

ใช้เพื่อประกาศการดำเนินการบางอย่างเป็นการดำเนินการเริ่มต้น (ตามชื่อที่แนะนำ) ลองพิจารณาว่าเรามีแอป notepad (อ้างอิงจากตัวอย่าง notepad ของ Android) หน้าแรกของแอพประกอบด้วยรายการไฟล์ notepad ทั้งหมด เมื่อไฟล์ notepad หนึ่งไฟล์ถูกเลือกหนึ่งในการดำเนินการเช่นแก้ไขบันทึกการลบบันทึก ฯลฯ สามารถทำได้ แต่ฉันต้องการแก้ไขเป็นการกระทำเริ่มต้นของฉันซึ่งหมายความว่าเมื่อฉันกดปุ่มตรงกลางของปุ่มกดหน้าต่างแก้ไขควรเปิดอยู่


1
หากคุณดูตัวอย่าง Notepad ของ Android กิจกรรมทั้งหมดจะถูกทำเครื่องหมายเป็นค่าเริ่มต้น: developer.android.com/reference/android/content/Intent.html
Peter Ajtai

0

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

หากต้องการรับ Intent โดยนัยคุณต้องรวมหมวดหมู่ CATEGORY_DEFAULT ไว้ในตัวกรองความตั้งใจ เมธอด startActivity () และ startActivityForResult () ปฏิบัติต่อ Intent ทั้งหมดราวกับว่าพวกเขาประกาศหมวด CATEGORY_DEFAULT หากคุณไม่ประกาศหมวดหมู่นี้ในตัวกรองความตั้งใจของคุณจะไม่มีเจตนาโดยปริยายใดที่จะแก้ไขกิจกรรมของคุณ


-1

ประเภท:

android.intent.category.DEFAULT

ตรงกับเจตนาโดยปริยายใด ๆ ต้องรวมหมวดหมู่นี้สำหรับกิจกรรมของคุณเพื่อรับเจตจำนงโดยปริยายใด ๆ

https://codelabs.developers.google.com/codelabs/android-training-activity-with-implicit-intent/index.html?index=..%2F..%2Fandroid-training#6

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.