android.intent.action.MAIN是什么意思?


84

我看到了许多不同的令人困惑的赞美诗。

<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" />

Answers:


72

android.intent.action.MAIN 表示此活动是应用程序的入口点,即,当您启动应用程序时,将创建此活动。

来自文档

ACTION_MAIN with category CATEGORY_HOME -- Launch the home screen.

另外,从这里

活动操作作为主要入口点启动,不希望接收数据。

android.intent.category.DEFAULT主要用于隐式意图。如果您的活动希望以隐式意图开始,则应将此类别包含在其过滤器中。如果未分配任何特定类别时,您的活动可能是由隐式Intent启动的,则其Intent过滤器应包括该类别。

android.intent.category.LAUNCHER

类别-提供有关要执行的操作的其他信息。

CATEGORY_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 2014年

92

ACTION_MAIN被认为是该应用程序的入口点。通常,它会与CATEGORY_LAUNCHER中的组合使用,<intent-filter>以指示应显示在主屏幕启动器中的活动,或其他任何将其视为启动器的活动。此类“发布者”可以PackageManager使用查询,queryIntentActivities()来查找此类活动并将其显示给用户。

但是,ACTION_MAIN可以将其与其他类别结合使用以用于其他特殊目的。例如,CATEGORY_CAR_DOCK带有ACTION_MAIN表示当用户将手机放到制造商提供的汽车坞站中时应视为要显示的候选活动。

Intent使用具有startActivity(),如果Intent尚未放入一个类别,它被放置成CATEGORY_DEFAULT。因此,<activity> <intent-filter>需要指定some <category><category android:name="android.intent.category.DEFAULT" />如果没有其他要求的话。


1
赞!我知道您会回答这个问题,而且我一直在等待阅读,这是一个清晰明确的答案。谢谢
Spurdow 2014年

6
嗯,您还没有解释为什么我们需要两者。我的意思是,ACTION MAIN = ENTRY POINT,明白了。CATEGORY_LAUCHER =表示应该在主屏幕的启动器中显示一项活动。这两个句子相同,只是用不同的措词,对吗?
FRR 2015年

9
@feresr:不,不是。您可以通过阅读答案,包括第二段,它提供了一个的例子告诉大家,不同用途的ACTION_MAIN,它涉及主屏式发射器。
CommonsWare 2015年

2
@ vgokul129:因为主屏幕发射专门寻找那些有活动<intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />
CommonsWare

2
@ vgokul129:“确切地说,在启动器中单击图标时,不应调用startActivity(intent)”-仅当您使用提供这种功能的启动器编写自己的主屏幕时。主屏幕启动器的行为取决于该主屏幕的实现者。由于启动器的主要作用是将主要精力集中在启动可发布的活动上。欢迎您立即进行一项活动finish(),但用户会认为您的应用程序已损坏。
CommonsWare

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

是此应用程序的主要活动

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

它属于“发射器”类别,这意味着它会在任何将自己视为“启动器”的事物中获得一个图标,例如主屏幕

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

如果未指定其他类别,则对startActivity()的调用将始终添加DEFAULT类别。

通常,android.intent.category.DEFAULT即使您还有其他类别,也只需添加即可。这将确保,如果在使用开始启动意图时“请求意图”未提供任何类别startActivity(intent),则您的“接收活动”也可以接收这些意图。

资料来源:《 Android开发人员忙的程序员指南》

https://commonsware.com/Android/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.