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
相关产品推荐
相关产品推荐

