在我的应用程序中,我想根据收到的通知更改应用程序的图标.即,如果收到2个通知,则其中具有"2"的app图标将显示在设备的主屏幕中.
为此,我使用了活动别名.我为活动别名添加了以下intent过滤器:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
为了使活动别名处于活动状态,我使用了以下代码:
这是为了启用活动别名:
ComponentName componentName = new ComponentName("PACKAGE_NAME_HERE",
lastEnabled);
pm.setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
Utility.setLastEnabled(lastEnabled,context);
Run Code Online (Sandbox Code Playgroud)
这将禁用以前启用的活动别名
componentName = new ComponentName(
"PACKAGE_NAME_HERE", prevLastEnabled);
pm.setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
Run Code Online (Sandbox Code Playgroud)
但是,只要应用程序图标发生变化,我的应用就会毫无例外地关闭.我在这里使用过不要杀app,仍然会关闭应用程序.如果我做错了什么,有人可以建议我.谢谢.
您的活动正在关闭,可能是因为您启用/禁用了目标活动。注意App(应用程序进程)并没有被杀死。无论如何,这就是我为阻止活动关闭所做的事情:
一般来说,您需要执行以下操作:
您的 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>
...
Run Code Online (Sandbox Code Playgroud)
因此,您的 MainActivity 已启用(保持这种状态),但没有 LAUNCHER 类别,因此它不会显示。此外,第一个活动别名已启用(这是默认设置),所有其他活动别名均已禁用。
祝你好运!
| 归档时间: |
|
| 查看次数: |
969 次 |
| 最近记录: |