技术咨询、项目合作、广告投放、简历咨询、技术文档下载 点击这里 联系博主

# 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>了,如果设置了,就会导致程序被杀死。 默认新的 iconactivity-aliasenable

# 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 的版本设置回默认的,否则无法安装新的版本

【未经作者允许禁止转载】 Last Updated: 2/4/2024, 6:06:40 AM