Невозможно установить Alias ​​как средство запуска Activity в эмуляторе с Android API 17, если он не включен с самого начала - PullRequest
0 голосов
/ 30 августа 2018

Я использую псевдонимы двух действий для своей основной деятельности, я определяю это следующим образом:

 <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, который не был протестирован.

...