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源碼。