Я использую псевдонимы двух действий для своей основной деятельности, я определяю это следующим образом:
<activity
android:screenOrientation="portrait"
android:name="com.applications.-----.-----.InstallationActivity"
android:label="-------"
android:icon="@mipmap/notification_icon"
android:background="@color/common_google_signin_btn_text_dark"
android:windowAnimationStyle="@null"
android:theme="@style/AppTheme.NoActionBar"
android:enabled="true"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
<activity-alias
android:screenOrientation="portrait"
android:name="com.applications.-----.-----.MainActivityFlavorZero"
android:label="-------"
android:icon="@mipmap/notification_icon"
android:enabled="true"
android:targetActivity="com.applications.-----.-----.InstallationActivity"
android:windowAnimationStyle="@null"
android:windowBackground="@color/common_google_signin_btn_text_dark"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:screenOrientation="portrait"
android:label="Lantern"
android:name="com.applications.-----.-----.MainActivityFlavorOne"
android:enabled="false"
android:icon="@mipmap/lantern"
android:targetActivity="com.applications.-----.-----.InstallationActivity"
android:windowAnimationStyle="@null"
android:windowBackground="@color/common_google_signin_btn_text_dark"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
И затем я использую эти коды для включения одного или другого псевдонима активности в зависимости от некоторых обстоятельств:
Первый:
try {
getPackageManager().setComponentEnabledSetting(
new ComponentName("com.applications.-----.-----", "com.applications.-----.-----.MainActivityFlavorOne"),
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
getPackageManager().setComponentEnabledSetting(
new ComponentName("com.applications.-----.-----", "com.applications.-----.-----.MainActivityFlavorZero"),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
//reiniciaapp();
}
catch (Exception ex)
{
}
Второй:
try {
getPackageManager().setComponentEnabledSetting(
new ComponentName("com.applications.-----.-----", "com.applications.-----.-----.MainActivityFlavorOne"),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
getPackageManager().setComponentEnabledSetting(
new ComponentName("com.applications.-----.-----", "com.applications.-----.-----.MainActivityFlavorZero"),
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
//Thread.sleep(10000);
} catch (Exception e) {
String ex=e.toString();
}
Проблема в том, что я могу получить доступ ко второму псевдониму в качестве средства запуска, если я изменю его android: enabled на "true", если средство запуска нигде не видно.
Настройка включена с самого начала ... странно. Пользователь может внезапно найти 2 программы запуска из-за установки одного приложения без какого-либо контекста, что выглядит не слишком хорошо для приложения.
Есть ли какой-нибудь способ заставить лаунчер появляться со вторым псевдонимом без необходимости включать его с самого начала?
PD: В качестве дополнительного примечания этот код работал правильно с API 19 до 26, за исключением API 20, который не был протестирован.