安卓實現動態改變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源碼。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容