AndroidManifest.xml中的两个主要活动

Gyo*_*der 15 android android-manifest

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

<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>
Run Code Online (Sandbox Code Playgroud)

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

Sha*_*ade 18

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

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

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

<category android:name="android.intent.category.DEFAULT" /> 
Run Code Online (Sandbox Code Playgroud)


poi*_*oae 13

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

<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>
Run Code Online (Sandbox Code Playgroud)

  • 我迟到了派对:将taskAffinity设置在一个启动器活动(A)上解决了一个问题,即点击app抽屉/启动器中的第二个启动器(B)打开应用程序的内存中活动(A)打开预定的活动(B). (14认同)
  • 那么它就像@poitroae建议的那样有效.所以我会接受它是正确的. (2认同)