上次发版我就改了一行代码!

动态更换应用Icon

产品:我们可以动态更换App在Launcher里面的Icon吗
开发:不可以
产品:我们可以动态更换App在Launcher里面的Icon吗
开发:不可以
产品:我们可以动态更换App在Launcher里面的Icon吗
开发:不可以
产品:我们可以动态更换App在Launcher里面的Icon吗
开发:让我想想……

原理1——activity-alias

在AndroidMainifest中,有两个属性:

另外,还有一个activity-alias属性,这个属性可以用于创建多个不同的入口,相信做过系统Setting和Launcher开发的开发者在系统的源码中应该见过很多。

原理2——PM.setComponentEnabledSetting

PackageManager是一个大统领类,可以管理所有的系统组件,当然,如果Root了,你还可以管理其它App的所有组件,一些系统优化工具就是通过这个方式来禁用一些后台Service的。

使用方式异常简单:

根据PackageManager.COMPONENT_ENABLED_STATE_ENABLED和PackageManager.COMPONENT_ENABLED_STATE_DISABLED这两个标志量和对应的ComponentName,就可以控制一个组件的是否启用。

动态换Icon

有了上面的两个原理,来实现动态更换Icon就只剩下思路问题了。

首先,我们创建一个Activity,作为默认的入口并带着默认的图片,再创建一个双11的activity-alias,指向默认的Activity并带有双11的图片,再创建一个双12的activity-alias,指向默认的Activity并带有双12的图片……等等等。

等等,这样有个问题,那就是这样会在Launcher上显示3个入口,所以,默认我们会把这些activity-alias先禁用,等到要用的时候再启用,养兵千日,用兵一时。

OK了,禁用默认的Activity后,启用双11的activity-alias,结果不变还是指向了默认的Activity,但图标已经发生了改变。

根据ROM的不同,在禁用了组件之后,会等一会,Launcher会自动刷新图标。

效果参考下图。

这里写图片描述

打赏支持我写出更多好文章,谢谢!

打赏作者

打赏支持我写出更多好文章,谢谢!

3 11 收藏 3 评论

关于作者:eclipse_xu

Android 高级开发工程师;《Android群英传》、《Android群英传:神兵利器》作者、慕课网Android讲师;CSDN博客专家 个人主页 · 我的文章 · 13 ·    

相关文章

可能感兴趣的话题



直接登录
最新评论
  • 血腥冬瓜 软件测试 02/25

    这个动态换图标很有想法,一次存好一年的图标 ^_^

    不发新版了

  • . android开发 03/14

    囧 一次存好一年的图标 是个好主意

  • Bezinga 软件工程师 03/20

    很好的一个思路 ,代码实现起来简单。就是要提前思考好一段时间内需要用到图标

跳到底部
返回顶部