大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要介绍“android动态更新的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“android动态更新的方法”文章能帮助大家解决问题。
成都创新互联专注于仙居网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供仙居营销型网站建设,仙居网站制作、仙居网页设计、仙居网站官网定制、小程序开发服务,打造仙居网络公司原创品牌,更为您提供仙居网站排名全网营销落地服务。
原理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的图片……等等等。
等等,这样有个问题,那就是这样会在Launcher上显示3个入口,所以,默认我们会把这些activity-alias先禁用,等到要用的时候再启用,养兵千日,用兵一时。
public class MainActivity extends AppCompatActivity { private ComponentName mDefault; private ComponentName mDouble11; private ComponentName mDouble12; private PackageManager mPm; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mDefault = getComponentName(); mDouble11 = new ComponentName( getBaseContext(), "com.xys.changeicon.Test11"); mDouble12 = new ComponentName( getBaseContext(), "com.xys.changeicon.Test12"); mPm = getApplicationContext().getPackageManager(); } public void changeIcon11(View view) { disableComponent(mDefault); disableComponent(mDouble12); enableComponent(mDouble11); } public void changeIcon12(View view) { disableComponent(mDefault); disableComponent(mDouble11); enableComponent(mDouble12); } 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); } }
OK了,禁用默认的Activity后,启用双11的activity-alias,结果不变还是指向了默认的Activity,但图标已经发生了改变。
根据ROM的不同,在禁用了组件之后,会等一会,Launcher会自动刷新图标。
效果参考下图。
关于“android动态更新的方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注创新互联行业资讯频道,小编每天都会为大家更新不同的知识点。