Андроид приложение с двумя активити как точки входа
Приложение содержит две activity как точки входа, как описано в манифесте.
<activity
android:name=".ui.screen.main.MainActivity"
android:icon="@mipmap/ic_tracker_launcher" >
<intent-filter android:label="@string/app_name" >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ui.screen.main.MapEnterActivity"
android:icon="@mipmap/ic_watcher_launcher" >
<intent-filter android:label="@string/app_name_watcher" >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Как результат - есть две иконки на рабочем столе устройства. По задумке по нажатию на каждую из иконок должна запускаться соответствующая активити.
Проблема сейчас состоит в том, что если пользователь нажимает "назад" (то есть приложение не убито) и потом хочет запустить другую иконку с другой активностью, то при запуске видит ту же самую активити. Если же приложение принудительно убито пользователем - тогда все получается. Само собой так быть не должно.
Как реализовать чтобы каждая иконка запускала свою активити независимо от вышеописанных факторов?
Спасибо за любые варианты.
Ответы (2 шт):
Описываемая вами функциональность достигается с помощью shortcut, вам надо в res/xml/shortcuts.xml прописать ссылки типа:
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
<! первая активити -->
<shortcut
android:shortcutId="tracker_launcher"
android:enabled="true"
android:icon="@drawable/ic_tracker_laucnher"
android:shortcutShortLabel="@string/tracker_launcher_short_label"
android:shortcutLongLabel="@string/tracker_laucnher_long_label"
<intent
android:action="android.intent.action.VIEW"
android:targetPackage="com.example.myapplication"
android:targetClass=".ui.screen.main.MainActivity" />
</shortcut>
<! вторая активити -->
<shortcut
android:shortcutId="watcher_launcher"
android:enabled="true"
android:icon="@drawable/ic_watcher_laucnher"
android:shortcutShortLabel="@string/watcher_launcher_short_label"
android:shortcutLongLabel="@string/watcher_laucnher_long_label"
<intent
android:action="android.intent.action.VIEW"
android:targetPackage="com.example.myapplication"
android:targetClass=".ui.screen.main.MapEnterActivity" />
</shortcut>
</shortcuts>
Далее к ним создать т.н. Pinned Shortcut (то есть иконки-ссылки в лончере).
Ответили на англоязычном стеке, копирую оттуда.
https://stackoverflow.com/a/64177291/4974229
Нужно добавить параметр android:taskAffinity для каждой activity:
<activity
android:taskAffinity="com.example.MainActivity"
android:name=".ui.screen.main.MainActivity"
android:icon="@mipmap/ic_tracker_launcher" >
<intent-filter android:label="@string/app_name" >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:taskAffinity="com.example.MapEnterActivity"
android:name=".ui.screen.main.MapEnterActivity"
android:icon="@mipmap/ic_watcher_launcher" >
<intent-filter android:label="@string/app_name_watcher" >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>