Android開發動態修改Icon以及注意事項

強調強調,設置了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

需要注意的是:
  1. 假設要更換多個icon那麼需要提前將所有可能的icon做好,並且設置爲activity-alias
  2. 因爲上述的兩個activity-alias都獨立的設置了<intent-filter>,且targetActivity都是爲MainActivity,那麼MainActivity就不需要再設置<intent-filter>了,如果設置了,就會導致程序被殺死。
  3. 默認新的icon的activity-alias是enable

2、在代碼中通過關閉和開啓組件更新icon

注意的是:
  1. 通過ComponentName來獲取組件
  2. 通過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的版本設置回默認的,否則無法安裝新的版本。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章