# Android动态修改桌面图标
强调强调,设置了 ICON 动态变化的时候,在更新 APP
版本的时候,必须一定要记住将 icon
的版本设置回默认的,否则无法安装新的版本。
使用的方法是:利用 android
下的activity-alias
达到动态更换 Icon 和标题的目的。
# 一、知道如何关闭一个组件
关闭组件其实并不难,只要创建 packageManager
对象和 ComponentName
对象,并调用 packageManager
对象的 setComponentEnabledSetting
方法。
public void setComponentEnabledSetting (ComponentName componentName, int newState, int flags)
componentName
:组件名称newState
:组件新的状态,可以设置三个值,分别是如下:- 不可用状态:COMPONENT_ENABLED_STATE_DISABLED
- 可用状态:COMPONENT_ENABLED_STATE_ENABLED
- 默认状态:COMPONENT_ENABLED_STATE_DEFAULT
flags
:行为标签,值可以是DONT_KILL_APP
或者 0。 0 说明杀死包含该组件的 app
public int getComponentEnabledSetting(ComponentName componentName)//获取组件的状态
# 二、使用 activity-alias 更换 icon
# 1、在AndroidManifast.xml
文件中设置 activity-alias
需要注意的是:
假设要更换多个 icon
那么需要提前将所有可能的 icon
做好,并且设置为activity-alias
因为上述的两个 activity-alias
都独立的设置了<intent-filter>
,且 targetActivity
都是为 MainActivity
,那么MainActivity
就不需要再设置<intent-filter>
了,如果设置了,就会导致程序被杀死。
默认新的 icon
的 activity-alias
是 enable
# 2、在代码中通过关闭和开启组件更新 icon
注意的是:
通过 ComponentName
来获取组件
通过 setComponentEnableSetting()
方法来设置组件是否可用;关键是里面的三个参数:第二个就是 PackageManager
.COMPONENT_ENABLED_STATE_ENABLED
,表示可用;PackageManager.COMPONENT_ENABLED_STATE_DISABLED
,表示不可用。
# 三、动态设置 icon 注意事项
在更换了 icon
之后,需要大约 5s 左右的时间系统的 Launcher
才会刷新,才可见 icon 的改变
- 假设现在的 APP 版本是 1.0,不管是否更换了 icon,那么在继续按照 1.0 版本的 APP 时时不存在问题的;
- 假设现在要安装 1.2 版本,如果已经存在 APP 版本是 1.0,且 icon 还是使用的默认的(也就是 activity-alias 设置为 enable 的那个),那么更新版本是不存在问题的。
- 假设现在安装 1.2 版本,已经存在的 1.0 版本的 icon 换成了新的,且没有切换回默认的,则无法安装 APP。(会报错:
Error while executing: am start -n "com.mrgao.test/com.mrgao.test.default" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.mrgao.test/.default }
Error type 3
Error: Activity class {com.mrgao.test/com.mrgao.test.default} does not exist.
Error while Launching activity)
综上所述,设置了 ICON 动态变化的时候,在更新 APP 版本的时候,必须一定要记住将 icon 的版本设置回默认的,否则无法安装新的版本。
- 本文链接: https://mrgaogang.github.io/android/Android%E5%8A%A8%E6%80%81%E4%BF%AE%E6%94%B9%E6%A1%8C%E9%9D%A2%E5%9B%BE%E6%A0%87.html
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 许可协议。转载请注明出处!