AndroidManifest.xml中的两个主要活动

问题描述 投票:15回答:2

我想在我的应用程序中有两个主要活动。所以在我的清单中我说:

<activity
    android:name="mypackage1.MainActivity"
    android:label="@string/title_activity_main">

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

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity
    android:name="mypackage2.MainActivity2"
    android:label="@string/title_activity_main2">

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

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

</activity>

我的应用程序菜单中创建了两个图标。但是当我点击它们时,第一个活动MainActivity总是会启动。是否可以进行两项主要活动?如果是这样,我做了什么错了?谢谢

android android-manifest
2个回答
18
投票

LAUNCHER意图过滤器决定了应用程序抽屉/启动器中显示的内容。这就是为什么你会看到两个图标。

但是,您还设置了DEFAULT intent过滤器,它为整个包设置了默认的Activity。由于您设置了两次,因此您会遇到第一个/最新注册的优先级问题。当您删除DEFAULT过滤器时,您将能够启动您在启动器中单击的任何内容。

简而言之,从两个活动中删除以下行:

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

13
投票

是的,只需在你的清单中将两个或更多的<activity>s标记为LAUNCHER。此外,您必须在两个Launcher-Activities上设置android:taskAffinity属性,该属性指定要启动的确切包和活动。

<activity android:label="MyApp" android:name=".MyApp" android:taskAffinity="com.example.MainActivity">
        <intent-filter>
            <action android:name=".MyApp"/>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
</activity>


<activity android:label="Settings" android:name=".Settings" android:taskAffinity="com.example.SettingsActivity" >
    <intent-filter>
        <action android:name=".Settings"/>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>
© www.soinside.com 2019 - 2024. All rights reserved.