最近项目需求要做一个动态更换APP应用图标的功能,刚开始还纳闷产品为什么要求要这样的功能呢?突然想到百度地图,京东、淘宝没到双11 双12的时候都会动态更换应用图标,于是开始自己研究看怎么事项这个功能,在网上百度了一下,给了我一个启发,现在写出来记录一下。 在这之前我们先来了解一下设计到的知识: 1.activity-alias 在AndroidMainifest中,有两个属性: // 决定应用程序最先启动的Activity android.intent.action.MAIN // 决定应用程序是否显示在程序列表里 android.intent.category.LAUNCHER
另外,还有一个activity-alias属性,这个属性可以用于创建多个不同的入口,相信做过系统Setting和Launcher开发的开发者在系统的源码中应该见过很多。 2.PM.setComponentEnabledSetting PackageManager是一个大统领类,可以管理所有的系统组件,当然,如果Root了,你还可以管理其它App的所有组件,一些系统优化工具就是通过这个方式来禁用一些后台Service的。
使用方式异常简单: private void enableComponent(ComponentName componentName) { mPm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); }
private void disableComponent(ComponentName componentName) { mPm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); }
根据
PackageManager.COMPONENT_ENABLED_STATE_ENABLED
PackageManager.COMPONENT_ENABLED_STATE_DISABLED
这两个标志量和对应的ComponentName,就可以控制一个组件的是否启用。
动态换Icon 有了上面的两个原理,来实现动态更换Icon就只剩下思路问题了。
首先,我们创建一个Activity,作为默认的入口并带着默认的图片,再创建一个双11的activity-alias,指向默认的Activity并带有双11的图片,再创建一个双12的activity-alias,指向默认的Activity并带有双12的图片……等等等。
另外就是activity部分。
这样就OK了!
便于交流请添加 西安Android开发群115812664(已满) 西安Android开发2群:655094235