Два основных действия в 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>