gpt4 book ai didi

android - 调用 setComponentEnabledSetting 以使用 Activity Alias 后应用程序关闭

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:14:11 25 4
gpt4 key购买 nike

在我的应用程序中,我想根据收到的通知更改应用程序的图标。即,如果收到 2 条通知,则其中带有“2”的应用程序图标将显示在设备的主屏幕上。

为此,我使用了 Activity 别名。我为 Activity 别名添加了以下 Intent 过滤器:

    <intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

为了激活 Activity 别名,我使用了以下代码:

这是为了启用 Activity 别名:

 ComponentName componentName = new ComponentName("PACKAGE_NAME_HERE",
lastEnabled);
pm.setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
Utility.setLastEnabled(lastEnabled,context);

这将禁用以前启用的 Activity 别名

componentName = new ComponentName(
"PACKAGE_NAME_HERE", prevLastEnabled);
pm.setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);

但是一旦应用程序图标发生变化,我的应用程序就会毫无异常(exception)地关闭。我在这里使用了 dont kill app,它仍然关闭了应用程序。如果我做错了什么,任何人都可以建议我。谢谢。

最佳答案

您的 Activity 正在关闭,可能是因为您启用/禁用了目标 Activity 。注意App(Application Process)并没有被kill掉。无论如何,这就是我为阻止 Activity 关闭所做的事情:

一般来说,您需要执行以下操作:

  1. 仅对图标使用 Activity 别名
  2. 从目标 Activity 中删除类别“launcher”
  3. 仅启用/禁用 Activity 别名

您的 AndroidManifest.xml 应如下所示:

<activity android:name=".MainActivity" ... >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>

<activity-alias android:name=".No-Icon-Badge"
android:targetActivity=".MainActivity"
android:enabled="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=".Icon-Badge-1"
android:targetActivity=".MainActivity"
android:enabled="false"
... >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>

<activity-alias android:name=".Icon-Badge-2"
android:targetActivity=".MainActivity"
android:enabled="false"
... >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>

...

所以您的 MainActivity 已启用(保持这种状态),但没有 LAUNCHER 类别,因此它不会显示。此外,第一个 Activity 别名已启用(这是您的默认设置),所有其他 Activity 别名均已禁用。

祝你好运!

关于android - 调用 setComponentEnabledSetting 以使用 Activity Alias 后应用程序关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28436280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com