赞
踩
听说支付宝推出的AR红包推出没几天就被我朝众多大神给搞了。。不能说支付宝App的“不坚挺”,只能说众大神太厉害了
~~
今天继续和大家分享Android中动态更新的内容。上篇博客中我和大家分享了如何实现Android中动态更新View的内容,从中大家也知道了如何使用DexClassLoader来动态加载Apk,以及如果通过Resource来获取外部Apk的资源。没有看的童靴点这里:
本篇博客要和大家分享的内容是如何实现动态更新App图标。这种场景想必大家都见的很多了。尤其是电商App以及现在的旅游App,例如:阿里系手淘,天猫,京东,携程旅游,途牛等等。每次在到重要节日时,你会突然发现他们的App图标变了,在过完节日后又变成了默认图标。并且是悄悄的。然后你一脸懵逼,我并没有更新App哇。。
是的,你真的没有更新App。下面我就和大家分享下如何实现动态更新App图标。
Android系统为我们提供了App可以实现多入口的功能,什么叫多入口呢?顾名思义,就是可以在桌面产生多个图标(多个launch icon),给你一种多个App的感觉,但是这多个launch icon 都指定了同一个入口,即启动的Activity界面是相同的。先来看看效果:
图飞了~~
如何实现多个入口呢?系统为我们提供了activity-alias,来看看如何使用:
在AndroidMainfest.xml配置文件中添加activiry-alias标签属性,上面可以看到比较常用的标签属性,其中targetActivity标注要对接的入口是哪个,就是要启动的Activity,我将其指向了MainActivty,MainActivity就是主入口:
其他属性很简单就不再赘述了。
注意:
1. IconOne中需要使用
android:launchMode="singleTask"
android:clearTaskOnLaunch="true"
否则, 下一次按Home退出后,按另一个icon进入就不会调用onNewIntent();
2. onNewIntent中注意setIntent否则getIntent()会是之前的intent.
3. activity-alias需要和主入口的相同。
4.activity-alias的enable在初始化时设置为false,就会被隐藏(即隐藏入口),如果设置为true,初始化时就会产生两个图标(即默认Activity和activity-alias)。
4.activity-alias的name是不能改的,如果当前版本的是second,下版本改成second_laodongjie,就会导致系统找second找不到,导致桌面无图标,应用打不开.
ok,实现了如何开启多个入口,那么我们就有了一个思路,换图标,只需要将默认的隐藏掉,然后显示新的activity-alias的就可以了哇。如何控制activity-alias的显示隐藏呢?大家要明白,activity就是一个Component组件哇,没错,就是PackageManager。我们可以利用setComponentEnabledSetting方法来开启和关闭组件,此时就可以动态控制桌面上图标的显示和隐藏了。
来看下核心代码:
/***初始化组件*/private voidinitComponent() {mainComponent=getComponentName();laodongjieComponent=newComponentName(getBaseContext(),"com.example.song.wave.SecondActivity");}/***开启*/private voidsetComponentEnable(ComponentNamecomponentEnable) {mPm.setComponentEnabledSetting(componentEnable,PackageManager.COMPONENT_ENABLED_STATE_ENABLED,PackageManager.DONT_KILL_APP);}/***关闭*/private voidsetComponentDisenable(ComponentNamecomponentEnable) {mPm.setComponentEnabledSetting(componentEnable,PackageManager.COMPONENT_ENABLED_STATE_DISABLED,PackageManager.DONT_KILL_APP);} 主要原理就是通过PackManager的flag来控制componentName的显示和隐藏。
此时有童靴可能会问?这怎么能动态的实现呢?没错,一般动态实现我们的思路都是在服务端保存一个图标,然后下载到客户端,此时客户端可以重新设置加载即可。
ok,今天的内容就到这里了,最后依旧奉上源码
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。