天天看點

android動态修改應用圖示和應用名稱

參考連結:http://www.jianshu.com/p/1d83f9a98ffd

今天無意間看到了餓了麼的圖示突然被加上了517的字樣,很好奇是怎麼實作的,就百度了一下實作方式,特此記錄一下。

AndroidManifest.xml

檔案的

application

節點中添加如下代碼:

<activity-alias
        android:name=".activity.Bazaar"  //替換之前Activity的名稱
      android:enabled="false" 
       android:icon="@mipmap/ic_launcher"
        android:label="應用名稱"        
      android:targetActivity=".activity.SplashActivity">    //填寫應用程式入口Activity
    <intent-filter>       
     <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" />  
      </intent-filter>
    </activity-alias>
           

<action android:name="android.intent.action.MAIN" />

決定應用程式最先啟動的Activity 。

<category android:name="android.intent.category.LAUNCHER" />

決定應用程式是否顯示在程式清單裡。

在程式第一個執行的activity中添加:

PackageManager mP;
ComponentName def;
ComponentName mBazaar;

mP = getApplicationContext().getPackageManager();
def = new ComponentName(getBaseContext(),"com.fangbei.umarket.activity.SplashActivity");
mBazaar=new ComponentName(getBaseContext(),"com.fangbei.umarket.activity.Bazaar");

private void enabledComponent(ComponentName name) {    
mP.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
}
private void disableComponent(ComponentName name) {    
mP.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
}
           

COMPONENT_ENABLED_STATE_DISABLED

通過檢視源代碼注釋給的解釋是禁用程式清單中的某個應用圖示

COMPONENT_ENABLED_STATE_ENABLED

則相反

執行此方法改變圖示
private void setIconSc() { 
   disableComponent(def); //禁用之前的圖示
   enabledComponent(mBazaar);}

private void setIconWm() {    
 disableComponent(mBazaar); 
   enabledComponent(def);}//顯示快捷圖示                

假如雙十一快到了就可以添加一個網絡請求,調用上面例子

setIconWm()

方法的判斷是否需要修改應用圖示和名稱!

實作原理

簡單的來說就是建立一個APP的快捷方式,快捷方式必須指向程式入口的Activity,此時這個APP就在桌面有兩個快捷方式,然後在Activity裡面通過PackageManager 類把之前的快捷方式禁用隐藏起來,隻顯示新的快捷方式就實作想要的功能啦,就是這麼簡單!