第一步:在注冊文件代碼如下
<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)步!