在我的应用中,我想根据收到的通知更改应用的图标。即如果收到2个通知,则其中包含“2”的应用程序图标将显示在设备的主屏幕中。
为此,我使用了活动别名。我为活动别名添加了以下intent过滤器:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
为了使活动别名处于活动状态,我使用了以下代码:
这是为了启用活动别名:
ComponentName componentName = new ComponentName("PACKAGE_NAME_HERE",
lastEnabled);
pm.setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
Utility.setLastEnabled(lastEnabled,context);
这将禁用以前启用的活动别名
componentName = new ComponentName(
"PACKAGE_NAME_HERE", prevLastEnabled);
pm.setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
但是,只要应用程序图标发生变化,我的应用就会毫无例外地关闭。我在这里使用过不要杀app,仍然会关闭应用程序。如果我做错了什么,请有人建议我。谢谢。
答案 0 :(得分:1)
您的活动正在关闭可能是因为您启用/禁用了目标活动。请注意,应用程序(应用程序进程)尚未被杀死。无论如何,这是我阻止活动关闭的原因:
通常,您希望执行以下操作:
您的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类别,因此它不会显示。此外,第一个活动别名已启用(这是您的默认设置),所有其他活动别名都已禁用。
祝你好运!