安卓实现动态改变app的图标

2017-12-25  本文已影响0人  bruce1990

11月,12月想必是每个男人最痛心的时间,因为tb、jd打着双11,双12旗号大肆敛财。作为一个搬砖的,我是最鄙视这种行径的(技术low没在tb,jd工作~~)。额,好像扯得有点远了。最近看到很多像淘宝,京东的app的图标都会动态改变相应的活动图标,我又没看见这些app有更新。所以这个应该是app代码实现的,于是开始找相关资料。发现可以通过activity-alias设置多个app入口。

1.首先看看我的AndroidManifest.xml

第一个activity下的启动入口是我们最熟悉的了。我在下面的activity-alias(别名)写了两个入口Test11和Test12,这里个别名可以随便命名,当然啦要符合安卓的命名规范。那么怎么切换这个入口呢。这里得借助PackageManager这个类的setComponentEnabledSetting这个方法了。其实看到这个命名我们也能猜出来了。就是设置某个组件能否有作用嘛。

```

publicclassMainActivityextendsAppCompatActivity{

privateComponentNamedefault_name;

privateComponentNamedouble_11;

privateComponentNamedouble_12;

privatePackageManagermPm;

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mPm=getApplicationContext().getPackageManager();

default_name=getComponentName();

double_11=newComponentName(getApplicationContext(),"com.example.administrator.changeicon.Test11");

double_12=newComponentName(getApplicationContext(),"com.example.administrator.changeicon.Test12");

}

publicvoidchangeIcon11(Viewview){

disableComponent(default_name);

disableComponent(double_12);

enableComponent(double_11);

}

publicvoidchangeIcon12(Viewview){

disableComponent(default_name);

disableComponent(double_11);

enableComponent(double_12);

}

privatevoidenableComponent(ComponentNamecomponentName){

mPm.setComponentEnabledSetting(componentName,

PackageManager.COMPONENT_ENABLED_STATE_ENABLED,

PackageManager.DONT_KILL_APP);

}

privatevoiddisableComponent(ComponentNamecomponentName){

mPm.setComponentEnabledSetting(componentName,

PackageManager.COMPONENT_ENABLED_STATE_DISABLED,

PackageManager.DONT_KILL_APP);

}

}

```

代码很简单,其实主要知识点就在activity-alias和setComponentEnabledSetting这两处。如果想要深入了解可以去深入研究一下app的启动入口和PackageManager源码。

上一篇下一篇

猜你喜欢

热点阅读