ความหมายของ android.intent.action.MAIN คืออะไร?


86

ฉันได้เห็นคำอธิบายที่สับสนต่างๆมากมาย ..

<intent-filter>
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

ความหมายของ

<action android:name="android.intent.action.MAIN" />

และ

 <category android:name="android.intent.category.LAUNCHER" />

และ

 <category android:name="android.intent.category.DEFAULT" />

คำตอบ:


74

android.intent.action.MAIN หมายความว่ากิจกรรมนี้เป็นจุดเริ่มต้นของแอปพลิเคชันกล่าวคือเมื่อคุณเปิดแอปพลิเคชันกิจกรรมนี้จะถูกสร้างขึ้น

จากเอกสาร

ACTION_MAIN with category CATEGORY_HOME -- Launch the home screen.

นอกจากนี้จากที่นี่

กิจกรรมการดำเนินการเริ่มต้นเป็นจุดเริ่มต้นหลักไม่คาดหวังว่าจะได้รับข้อมูล

android.intent.category.DEFAULTส่วนใหญ่จะใช้สำหรับเจตนาโดยปริยาย หากกิจกรรมของคุณต้องการเริ่มต้นโดยเจตนาโดยปริยายควรรวมหมวดหมู่นี้ไว้ในตัวกรอง หากกิจกรรมของคุณอาจเริ่มต้นโดยเจตนาโดยนัยเมื่อไม่มีการกำหนดหมวดหมู่ที่เฉพาะเจาะจงตัวกรองเจตนาควรรวมหมวดหมู่นี้ไว้ด้วย

android.intent.category.LAUNCHER

หมวดหมู่ - ให้ข้อมูลเพิ่มเติมเกี่ยวกับการดำเนินการที่จะดำเนินการ

CATEGORY_LAUNCHER หมายความว่าควรปรากฏใน Launcher เป็นแอปพลิเคชันระดับบนสุด

ดูเอกสาร ..

  1. http://developer.android.com/reference/android/content/Intent.html
  2. http://developer.android.com/guide/topics/manifest/action-element.html

3
ไม่MAIN คนเดียวจะไม่ "เริ่มกิจกรรมที่บ้าน" MAINมีประโยชน์มากมาย
CommonsWare

94

ACTION_MAINถือเป็นจุดเริ่มต้นสำหรับแอปพลิเคชัน มักจะรวมตัวกับCATEGORY_LAUNCHERใน<intent-filter>เพื่อบ่งชี้ถึงกิจกรรมที่ควรปรากฏในตัวเปิดที่บ้านของหน้าจอหรือในสิ่งอื่นที่คิดว่าตัวเองจะเป็นตัวเปิด "ตัวเรียกใช้งาน" ดังกล่าวสามารถค้นหาPackageManagerโดยใช้queryIntentActivities()เพื่อค้นหากิจกรรมดังกล่าวและแสดงให้ผู้ใช้เห็น

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

เมื่อIntentใช้กับstartActivity()ถ้าไม่ได้อยู่แล้วในหมวดหมู่นี้ก็จะถูกวางลงIntent CATEGORY_DEFAULTดังนั้น<activity> <intent-filter>จำเป็นต้องระบุบางอย่าง <category>โดยใช้<category android:name="android.intent.category.DEFAULT" />ถ้าไม่มีอะไรอื่น


1
โหวตแล้ว! ฉันรู้ว่าคุณจะตอบคำถามนี้และฉันรออ่านคำตอบที่ชัดเจนและกระชับ ขอบคุณ
Spurdow

6
อืมคุณยังไม่ได้อธิบายว่าทำไมเราถึงต้องการทั้งสองอย่าง ฉันหมายถึง ACTION MAIN = ENTRY POINT เข้าใจแล้ว CATEGORY_LAUCHER = เพื่อระบุว่ากิจกรรมควรปรากฏในตัวเรียกใช้งานของหน้าจอหลักทั้งสองประโยคนี้เหมือนกันเพียง แต่ใช้วลีที่แตกต่างกันใช่หรือไม่
FRR

9
@feresr: ไม่พวกเขาไม่ได้ คุณสามารถบอกได้โดยการอ่านคำตอบรวมถึงย่อหน้าที่สองซึ่งแสดงตัวอย่างการใช้งานที่แตกต่างกันACTION_MAINซึ่งไม่เกี่ยวข้องกับตัวเรียกใช้งานแบบหน้าจอหลัก
CommonsWare

2
@ vgokul129: เนื่องจากตัวเรียกใช้งานหน้าจอหลักมองหากิจกรรมที่มี<intent-filter>ทั้งสอง<action android:name="android.intent.action.MAIN" />และ<category android:name="android.intent.category.LAUNCHER" />.
CommonsWare

2
@ vgokul129: "เพื่อความแม่นยำในระหว่างการคลิกไอคอนในตัวเรียกใช้งานไม่ควรเรียก startActivity (ตั้งใจ)" - เฉพาะในกรณีที่คุณเขียนหน้าจอหลักของคุณเองด้วยตัวเรียกใช้งานของคุณเองที่มีความสามารถเช่นนี้ ลักษณะการทำงานของตัวเรียกใช้งานหน้าจอหลักขึ้นอยู่กับผู้ใช้งานหน้าจอหลักนั้น ส่วนใหญ่มุ่งเน้นไปที่การเริ่มต้นกิจกรรมการเปิดใช้งานโฆษณาเนื่องจากนั่นเป็นบทบาทหลักของตัวเรียกใช้งาน คุณสามารถทำกิจกรรมที่โทรได้finish()ทันที แต่ผู้ใช้จะคิดว่าแอปของคุณเสีย
CommonsWare

2
<action android:name="android.intent.action.MAIN"/>

เป็นกิจกรรมหลักสำหรับแอปพลิเคชันนี้

 <category android:name="android.intent.category.LAUNCHER" />

อยู่ในหมวด LAUNCHER ซึ่งหมายความว่าจะได้รับไอคอนอะไรก็ได้ที่คิดว่าตัวเองเป็น "ตัวเรียกใช้งาน" เช่นหน้าจอหลัก

 <category android:name="android.intent.category.DEFAULT" />

การเรียกใช้ startActivity () จะเพิ่มหมวด DEFAULT เสมอหากไม่มีการระบุหมวดหมู่อื่น

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

ที่มา: The Busy Coders Guide to Android Development

https://commonsware.com/Android/

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