android動(dòng)態(tài)更新app圖標(biāo)

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

<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"/>必須注釋掉,否則桌面上將會(huì)生成兩個(gè)應(yīng)用圖標(biāo) -->

</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圖標(biāo)代碼:

/**

* @param useCode 1、為活動(dòng)圖標(biāo) 2 為用普通圖標(biāo) 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);

? ? ? ? ? ? //正常圖標(biāo)新狀態(tài),此處使用用來修改清單文件中activity-alias下的android:enable的值

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

? ? ? ? ? ? //新狀態(tài)跟當(dāng)前狀態(tài)不一樣才執(zhí)行

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

????????????????//PackageManager.DONT_KILL_APP表示執(zhí)行此方法時(shí)不殺死當(dāng)前的APP進(jìn)程

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

? ? ? ? ? ? }

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

? ? ? ? ? ? //活動(dòng)圖標(biāo)新狀態(tài)

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

? ? ? ? ? ? //新狀態(tài)跟當(dāng)前狀態(tài)不一樣才執(zhí)行

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

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

? ? ? ? ? ? }

}

}catch (Exception e) {

e.printStackTrace();

? ? }

}

運(yùn)行結(jié)果:(測試手機(jī)Honor 6X? android 8.0)

觸發(fā)方法之后需要等待系統(tǒng)的Launcher刷新圖標(biāo)才可以顯示效果來,大概時(shí)間在8s左右,期間點(diǎn)擊圖標(biāo)顯示未安裝此應(yīng)用,更換完成之后才可以再次點(diǎn)擊應(yīng)用圖標(biāo)正常進(jìn)入。


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

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

歡迎添加微信,互相學(xué)習(xí),互相進(jìn)步!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容