Два основных действия в AndroidManifest.xml

Я хотел бы иметь основные действия в своем приложении.  Поэтому в моем манифесте я положил

<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. Возможно ли иметь два основных вида деятельности? Если да, то что случилось с тем, что я сделал? Благодаря

Ответ 1

Фильтр намерений LAUNCHER - это то, что определяет, что отображается в приложении/ящике приложений. Вот почему вы получаете две иконки.

Однако вы также устанавливаете фильтр намерения DEFAULT, который устанавливает по умолчанию Activity для всего пакета. Поскольку вы устанавливаете его дважды, вы получаете проблему с приоритетом первой/последней регистрации. Когда вы удаляете фильтр DEFAULT, вы сможете запустить все, что вы нажимаете в панели запуска.

Короче говоря, удалите следующую строку из обеих операций:

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

Ответ 2

Да, просто отметьте два или более ваших <activity> как LAUNCHER в вашем манифесте. Кроме того, вы должны установить атрибут android:taskAffinity в обеих ваших активах Launcher, которые определяют точный пакет и активность, которую нужно запустить.

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