首页 > 解决方案 > 更改 Android 别名会产生“应用程序已停止工作”错误,即使它在 Android API 25 的模拟器中正确更改它

问题描述

我有以下代码将我的应用程序的默认名称及其相关图标更改为新名称和图标。

try {

            getPackageManager().setComponentEnabledSetting(
                    new ComponentName("com.applications.social.myapp", "com.applications.social.myapp.MainActivityFlavorOne"),
                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);


            getPackageManager().setComponentEnabledSetting(
                    new ComponentName("com.applications.social.myapp", "com.applications.social.myapp.MainActivityFlavorZero"),
                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);


        } catch (Exception ex) {

        }    


        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        catch (Exception e)
        {

        }

另一方面,这是在清单文件上定义别名的方式:

   <activity-alias
            android:screenOrientation="portrait"
            android:name=".MainActivityFlavorZero"
            android:label="MyLabel"
            android:icon="@mipmap/notification_icon"
            android:enabled="true"
            android:targetActivity="com.applications.social.myapp.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="MyLabel2"
            android:name=".MainActivityFlavorOne"
            android:enabled="false"
            android:icon="@mipmap/lantern"
            android:targetActivity="com.applications.social.myapp.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>

有几件事让我认为这是一个模拟器错误而不是代码中的失败,这些:

1) 到目前为止,问题出现在 Android API 25 的模拟器中,但相同的代码在具有 API 19 和 23 的物理设备以及具有 API 22 和 24 的模拟器中运行良好。

2)相反的代码(将从 MainActivityFlavorOne 更改为 MainActivityFlavorZero 的代码)始终有效。

3)从第一次设置更改 MainActivityFlavorOne 时发生错误,在第一次设置时它始终有效。

4)即使出现错误,应用程序的图标和名称也会在应用程序屏幕中更改(并且确实提供了所需的行为),所以并不是代码不能用于实际目的,只是错误出现一次由于代码而预期的其余行为会发生。

但无论如何,我想看看是否有人遇到过类似的事情,并可以提出解决错误的方法。

标签: androidalias

解决方案


好吧,我不会称这完全是一个“真正的”解决方案,但对我来说就足够了。

通过将目标 sdk 版本设置为 24 并使用它构建应用程序不再给出该错误,因此很明显这是依赖于 API 的东西。


推荐阅读