Android:PackageManager.DONT_KILL_APP 在启用 <activity-alias> 时不会阻止应用程序关闭

问题描述 投票:0回答:1

我创建了一个带有弃用启动图标的

<activity-alias>
,并且当从后端收到弃用错误时启用别名,同时禁用原始启动活动。当检测到错误时,原始启动图标将按预期更改为弃用启动图标,但是,即使我使用
PackageManager.DONT_KILL_APP
,应用程序也会关闭。以下是我启用和禁用活动别名和启动活动的方法:

    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
        )
    }

我还尝试使用针对启动活动的原始启动图标创建

<activity-alias>
,而不是直接禁用启动活动,但我仍然看到相同的行为,应用程序关闭,图标更改,并且没有错误。这是第二种方法的代码:

        <!-- 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
的错误,但我想知道是否有人知道任何解决方法。

android PackageManager.DONT_KILL_APP 似乎不起作用

应用程序在 setComponentEnabledSetting() 上关闭,其中包含 COMPONENT_ENABLED_STATE_DISABLED 和 PackageManager.DONT_KILL_APP

android kotlin mobile
1个回答
0
投票

我最近尝试做同样的事情,但不幸的是我认为没有解决方法。 Google 的有人提到这是一种预期行为:https://issuetracker.google.com/issues/279505991#comment21

我还没有见过任何应用程序可以在不杀死应用程序的情况下顺利完成此操作。 Telegram 的实现方式是,当您更改图标时,它会保存更改图标之前您所在的屏幕。我想执行此操作的唯一选择是通知用户图标将更改并且“需要重新启动”。

© www.soinside.com 2019 - 2024. All rights reserved.