我看到了很多不同的令人困惑的解释......
<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" />
答案 0 :(得分:83)
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 :(得分:61)
android.intent.action.MAIN
表示此活动是应用程序的入口点,即启动应用程序时,会创建此活动。
来自docs
ACTION_MAIN with category CATEGORY_HOME -- Launch the home screen.
此外,来自here
活动操作作为主要入口点开始,不期望 接收数据。
android.intent.category.DEFAULT 主要用于隐式意图。如果您的活动希望通过隐式意图启动,则应在其过滤器中包含此catetory。 如果您的Activity可能在没有为其分配特定类别时由隐式Intent启动,则其Intent过滤器应包含此类别。
<强> android.intent.category.LAUNCHER 强>
类别 - 提供有关要执行的操作的其他信息。
CATEGORY_LAUNCHER
表示它应作为顶级应用程序出现在Launcher中
参见文档..
答案 2 :(得分:0)
<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)
启动意图时“请求意图”未提供任何类别,则您接收活动也可以接收那些意图。
来源:《 Android开发者忙的程序员指南》