強調強調,設置了ICON動態變化的時候,在更新APP版本的時候,必須一定要記住將icon的版本設置回默認的,否則無法安裝新的版本。
使用的方法是:利用android下的activity-alias達到動態更換Icon和標題的目的。
一、知道如何關閉一個組件
關閉組件其實並不難,只要創建packageManager對象和ComponentName對象,並調用packageManager對象的setComponentEnabledSetting方法。
public void setComponentEnabledSetting (ComponentName componentName, int newState, int flags)
componentName:組件名稱
newState:組件新的狀態,可以設置三個值,分別是如下:
- 不可用狀態:COMPONENT_ENABLED_STATE_DISABLED
- 可用狀態:COMPONENT_ENABLED_STATE_ENABLED
- 默認狀態:COMPONENT_ENABLED_STATE_DEFAULT
flags:行爲標籤,值可以是DONT_KILL_APP或者0。 0說明殺死包含該組件的app
public int getComponentEnabledSetting(ComponentName componentName)//獲取組件的狀態
二、使用activity-alias更換icon
1、在AndroidManifast.xml文件中設置activity-alias
需要注意的是:
- 假設要更換多個icon那麼需要提前將所有可能的icon做好,並且設置爲activity-alias
- 因爲上述的兩個activity-alias都獨立的設置了<intent-filter>,且targetActivity都是爲MainActivity,那麼MainActivity就不需要再設置<intent-filter>了,如果設置了,就會導致程序被殺死。
- 默認新的icon的activity-alias是enable
2、在代碼中通過關閉和開啓組件更新icon
注意的是:
- 通過ComponentName來獲取組件
- 通過setComponentEnableSetting()方法來設置組件是否可用;關鍵是裏面的三個參數:第二個就是PackageManager.COMPONENT_ENABLED_STATE_ENABLED,表示可用;PackageManager.COMPONENT_ENABLED_STATE_DISABLED,表示不可用。
三、動態設置icon注意事項
- 在更換了icon之後,需要大約5s左右的時間系統的Launcher纔會刷新,纔可見icon的改變
- 假設現在的APP版本是1.0,不管是否更換了icon,那麼在繼續按照1.0版本的APP時時不存在問題的;
- 假設現在要安裝1.2版本,如果已經存在APP版本是1.0,且icon還是使用的默認的(也就是activity-alias設置爲enable的那個),那麼更新版本是不存在問題的。
- 假設現在安裝1.2版本,已經存在的1.0版本的icon換成了新的,且沒有切換回默認的,則無法安裝APP。(會報錯:Error while executing: am start -n "com.mrgao.test/com.mrgao.test.default" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.mrgao.test/.default }
Error type 3
Error: Activity class {com.mrgao.test/com.mrgao.test.default} does not exist.
Error while Launching activity)
綜上所述,設置了ICON動態變化的時候,在更新APP版本的時候,必須一定要記住將icon的版本設置回默認的,否則無法安裝新的版本。