Android开发动态修改Icon以及注意事项

强调强调,设置了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

需要注意的是:
  1. 假设要更换多个icon那么需要提前将所有可能的icon做好,并且设置为activity-alias
  2. 因为上述的两个activity-alias都独立的设置了<intent-filter>,且targetActivity都是为MainActivity,那么MainActivity就不需要再设置<intent-filter>了,如果设置了,就会导致程序被杀死。
  3. 默认新的icon的activity-alias是enable

2、在代码中通过关闭和开启组件更新icon

注意的是:
  1. 通过ComponentName来获取组件
  2. 通过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的版本设置回默认的,否则无法安装新的版本。

猜你喜欢

转载自blog.csdn.net/qq_32400821/article/details/79583703