第一步:在注冊文件代碼如下
<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
歡迎添加微信,互相學習,互相進步!