manifest xml文件中有多个android.intent.action.MAIN。

15
我是初学者,接触Android开发不久,我看过很多教程,其中只有一个android.intent.action.MAIN,它主要用于启动应用程序。
但是,在Android应用演示中,我看到了多个android.intent.action.MAIN语句在mainfest.xml中。 有人能解释一下为什么mainfest.xml有多个android.intent.action.MAIN语句吗?
还有,在哪些情况下我们应该在manifest.xml中使用多个MAIN
2个回答

21

它们是程序的不同入口点。例如,我刚刚创建了两个活动,这两个活动都有典型的意图过滤器。

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

原来我的启动屏幕现在有两个不同的图标代表同一个程序,因为这个程序有两个不同的活动。这是有道理的,因为MAIN/LAUNCHER意图过滤器实际上告诉Android该活动是应用程序的启动活动。Android的意图过滤器模型中没有任何东西强制每个应用程序只有一个启动活动。


7
我认为只有MAIN意图过滤器才能允许将该活动作为应用程序的启动活动。如果省略了LAUNCHER,则不会创建任何图标。至少在我的测试设备上是这样观察到的。 - chakrit

0

LAUNCHER是类别,而MAIN是操作。

MAIN定义了一个入口点,指定了应用程序可以启动的方式。例如,考虑一个具有3个活动的应用程序,

  • SplashActivity

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

     <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.CATEGORY_APP_EMAIL" />
     </intent-filter>
    
  • PlayMusicActivity

     <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.CATEGORY_APP_MUSIC" />
     </intent-filter>
    
  • 如果我在主屏幕即启动器上点击应用程序图标,我会看到闪屏活动。

    如果我从消息应用程序中点击电子邮件地址,系统将向我显示支持发送邮件的应用程序列表,包括我的应用程序(基本上它搜索所有应用程序提供的特定意图过滤器组合),当我选择我的应用程序时,将启动EmailActivity。

    如果我打开文件浏览器并单击音频文件,则我的应用程序将被列为打开此文件的选项,并将打开PlayMusicActivity。

    因此,ACTION.MAIN是不同的“入口”点或应用程序可以启动的不同“方式”。

    CATEGORY将告诉它可以是哪种类型的启动。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接