android動態更新app圖標

第一步:在注冊文件代碼如下

<activity? ?android:name="com.txgapp.ui.LaunchActivity"">

<!--如果activity-alias下面中的android:enabled="true",此處<action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/>必須注釋掉,否則桌面上將會生成兩個應用圖標 -->

</activity>

? ? <activity-alias? android:name="com.txgapp.ui.icon_tag"

? ? ????android:enabled="false"

? ????? android:icon="@mipmap/logo"

? ? ????android:label="@string/app_name"

? ? ????android:targetActivity="com.txgapp.ui.LaunchActivity">

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

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

</activity-alias>

? ? <activity-alias??android:name="com.txgapp.ui.icon_tag_1212"

? ? ????android:enabled="true"

? ? ????android:icon="@drawable/bottom_select_home3x"

? ? ????android:label="@string/app_name"

? ? ????android:targetActivity="com.txgapp.ui.LaunchActivity">

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

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

</activity-alias>

第二步,切換app圖標代碼:

/**

* @param useCode 1、為活動圖標 2 為用普通圖標 3、不啟用判斷

*/

private void switchIcon(int useCode) {

try {

????//要跟manifest的activity-alias 的name保持一致

? ? ? ? String icon_tag ="com.txgapp.ui.icon_tag";

? ? ? ? String icon_tag_1212 ="com.txgapp.ui.icon_tag_1212";

? ? ? ? if (useCode !=3) {

????????????PackageManager pm = getPackageManager();

? ? ? ? ? ? ComponentName normalComponentName =new ComponentName(getBaseContext(),icon_tag);

? ? ? ? ? ? //正常圖標新狀態,此處使用用來修改清單文件中activity-alias下的android:enable的值

? ? ? ? ? ? int normalNewState = useCode ==2 ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED: PackageManager.COMPONENT_ENABLED_STATE_DISABLED;

? ? ? ? ? ? //新狀態跟當前狀態不一樣才執行

? ? ? ? ? ? if (pm.getComponentEnabledSetting(normalComponentName) != normalNewState) {

????????????????//PackageManager.DONT_KILL_APP表示執行此方法時不殺死當前的APP進程

? ? ? ? ? ? ? ? pm.setComponentEnabledSetting(normalComponentName,normalNewState,PackageManager.DONT_KILL_APP);

? ? ? ? ? ? }

? ? ? ? ? ? ComponentName actComponentName =new ComponentName(getBaseContext(),icon_tag_1212);

? ? ? ? ? ? //活動圖標新狀態

? ? ? ? ? ? int actNewState = useCode ==1 ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED;

? ? ? ? ? ? //新狀態跟當前狀態不一樣才執行

? ? ? ? ? ? if (pm.getComponentEnabledSetting(actComponentName) != actNewState) {

????????????????pm.setComponentEnabledSetting(actComponentName,actNewState,PackageManager.DONT_KILL_APP);

? ? ? ? ? ? }

}

}catch (Exception e) {

e.printStackTrace();

? ? }

}

運行結果:(測試手機Honor 6X? android 8.0)

觸發方法之后需要等待系統的Launcher刷新圖標才可以顯示效果來,大概時間在8s左右,期間點擊圖標顯示未安裝此應用,更換完成之后才可以再次點擊應用圖標正常進入。


--------END------

我是靜染星辰,私人微信:azxy986753

歡迎添加微信,互相學習,互相進步!

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

推薦閱讀更多精彩內容