Android-приложение с 2-мя иконками запуска с отдельной задачей Affinity
У меня есть приложение с 2 иконками запуска и 2 различными активностями. Файл манифеста, как показано ниже:
....
<activity
android:name=".MyActivity"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:taskAffinity="my.package.com.MyActivity">
<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=".MySettings"
android:label="@string/settings"
android:icon="@mipmap/ic_launcher"
android:taskAffinity="my.package.com.MySettings">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
....
я хочу MyActivity
быть экраном по умолчанию, который будет открыт после установки, поэтому я использовал .category.DEFAULT
,
action.MAIN
а также category.LAUNCHER
должны показать две отдельные иконки запуска (1 для MyActivity
1 для MySettings
).
Проблема: когда я открываю MyActivity
, MySettings
Экран также открывается. Я хочу, чтобы каждый значок запуска открывал только соответствующую активность. я использовал taskAffinity
для каждого действия, чтобы решить проблему, но это не сработало. Думаю сделать taskAffinity
работа, активность должна начинаться с флага Intent.FLAG_ACTIVITY_NEW_TASK
что я не могу в моем случае (оба являются запусками).
Я также пытался использовать android:launchMode="singleTask"
но это тоже не сработало.
Как заставить каждый значок запуска открывать только свою активность?
ОБНОВЛЕНИЕ: Извините, я понял MyActivity
не открывается MySettings
Казалось, так. MyActivity
не было пользовательского интерфейса, поэтому он показал пустой экран, который похож на MySettings
, taskAffinity
работает правильно. я добавил android:theme="@android:style/Theme.NoDisplay"
в MyActivity
скрыть интерфейс
2 ответа
Просто используйте два разных изображения для запуска ваших приложений.
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MySettings"
android:label="settings"
android:icon="@drawable/ic_launcher2"
android:taskAffinity="my.package.com.MySettings">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Я решил так:
<activity
android:name="andynaz.android.hyperfcalc.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="andynaz.android.hyperfcalc.MainActivity2"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher2">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Я не использовал taskAffinity, но указал полное имя классов Activity (кроме использования двух разных изображений).