You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android:启用<activity-alias>时PackageManager.DONT_KILL_APP无法阻止应用关闭

问题:切换启动图标时应用强制关闭(即使使用DONT_KILL_APP)

我创建了带有弃用启动图标的<activity-alias>,当收到后端返回的弃用错误时,启用该别名并禁用原启动入口。图标能按预期切换为弃用图标,但即使传入PackageManager.DONT_KILL_APP参数,应用仍会被强制关闭。

方案1:直接禁用原启动Activity

核心代码

private fun disableDefaultIcon() {
    val defComponentName = ComponentName(applicationContext.packageName, LaunchActivity::class.java.name)
    packageManager.setComponentEnabledSetting(
        defComponentName,
        PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
        PackageManager.DONT_KILL_APP
    )
}

private fun enableDeprecatedIcon() {
    val depComponentName = ComponentName(applicationContext.packageName, "com.company.mon.AliasDeprecatedActivity")
    packageManager.setComponentEnabledSetting(
        depComponentName,
        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
        PackageManager.DONT_KILL_APP
    )
}

方案2:使用双<activity-alias>分别对应默认/弃用图标

AndroidManifest配置

<!-- Activity Alias -->
<activity-alias
    android:name="com.company.mon.AliasDefaultActivity"
    android:enabled="true"
    android:targetActivity=".presentation.workflow.authentication.launch.LaunchActivity"
    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:name="com.company.mon.AliasDeprecatedActivity"
    android:enabled="false"
    android:icon="${round_deprecated_icon_path}"
    android:roundIcon="${round_deprecated_icon_path}"
    android:targetActivity=".presentation.workflow.authentication.launch.LaunchActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity-alias>

核心代码

private fun enableDeprecatedIcon() {
    val depComponentName = ComponentName(applicationContext.packageName, "com.company.mon.AliasDeprecatedActivity")
    packageManager.setComponentEnabledSetting(
        depComponentName,
        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
        PackageManager.DONT_KILL_APP
    )
}

private fun disableDefaultIcon() {
    val defComponentName = ComponentName(applicationContext.packageName, "com.company.mon.AliasDefaultActivity")
    packageManager.setComponentEnabledSetting(
        defComponentName,
        PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
        PackageManager.DONT_KILL_APP
    )
}

两种方案均出现相同问题:图标切换成功,但应用直接关闭,无报错。已知这可能是PackageManager.DONT_KILL_APP的系统bug,求可行的解决方法。

内容的提问来源于stack exchange,提问作者Eazy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 03:12:33