安卓实现动态改变app的图标
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源码。