android - 更改 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)即使出现错误,应用程序的图标和名称也会在应用程序屏幕中更改(并且确实提供了所需的行为),所以并不是代码不能用于实际目的,只是错误出现一次由于代码而预期的其余行为会发生。
但无论如何,我想看看是否有人遇到过类似的事情,并可以提出解决错误的方法。
解决方案
好吧,我不会称这完全是一个“真正的”解决方案,但对我来说就足够了。
通过将目标 sdk 版本设置为 24 并使用它构建应用程序不再给出该错误,因此很明显这是依赖于 API 的东西。
推荐阅读
- javascript - 为什么我的 JavaScript 函数只能在索引视图中使用?
- python - 计数 if (COUNTIF) 并添加到 Python 中的数据框
- angularjs - 当我调用它时,角度不会显示我的对象
- php - 将一对十六进制编码的浮点数解码为本机浮点值
- android - 使用 OpenCV 3.2.0 和 Jni 在 Android 上构建错误
- java - 如何在 mongodb-java-driver 中填充引用的文档?
- c++ - 在没有 std::string 的情况下构造字符串
- python - 带有 PeriodIndex 和 DatetimeIndex 的 Pandas DataFrame 上偏移量不同的滚动窗口
- python - 在 Python 中比较嵌套字典的键和值
- wpf - WPF:影响样式触发器的边框