114.Android简单的动态切换app的图标,两种方式

 第一种方式:

1.第一步 通过activity-alias别名实现,manifest 这里写的是一个默认的图标Default和一个需要切换的图标Test,以及一个默认的首页面HomeActivity:

<!-- 默认的图标-->
<activity-alias
    android:name=".activity.Default"
    android:icon="@mipmap/logo"
    android:label="@string/app_name"
    android:targetActivity=".activity.HomeActivity"
    android:enabled="false"
    android:exported="true"
    android:configChanges="orientation|navigation|keyboardHidden"
    android:theme="@style/AppThemeNoAnimation"
    android:launchMode="singleTop"
    android:excludeFromRecents="true"
    android:screenOrientation="portrait">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity-alias>

<!-- 需要切换的图标-->
<activity-alias
    android:name=".activity.Test"
    android:label="短信"
    android:icon="@mipmap/ic_launcher"
    android:targetActivity=".activity.HomeActivity"
    android:enabled="false"
    android:exported="true"
    android:configChanges="orientation|navigation|keyboardHidden"
    android:theme="@style/AppThemeNoAnimation"
    android:launchMode="singleTop"
    android:excludeFromRecents="true"
    android:screenOrientation="portrait">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity-alias>

<!-- 默认activity-->
<activity
    android:name=".activity.HomeActivity"
    android:launchMode="singleTop"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="adjustPan">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

 2.第二步 实现切换代码:

 /**
     * 修改图标和名称的方法
     *
     * @param enable
     */
    public void changeIcon(boolean enable) {
        PackageManager pm = getApplicationContext().getPackageManager();

        if (enable) {
            //显示Test图标
            pm.setComponentEnabledSetting(new ComponentName(
                            getBaseContext(),
                            "com.qiyou.wx.activity.Test"),
                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                    PackageManager.DONT_KILL_APP);

            //去掉Default图标
            pm.setComponentEnabledSetting(new ComponentName(
                            getBaseContext(),
                            "com.qiyou.wx.activity.Default"),
                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP);

            //去掉HomeActivity图标
            pm.setComponentEnabledSetting(new ComponentName(
                            getBaseContext(),
                            "com.qiyou.wx.activity.HomeActivity"),
                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP);
            Log.d("TAG", "换Test的图标");
        } else {
//            //显示Default图标
            pm.setComponentEnabledSetting(new ComponentName(
                            getBaseContext(),
                            "com.qiyou.wx.activity.Default"),
                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                    PackageManager.DONT_KILL_APP);
            //去掉Test图标
            pm.setComponentEnabledSetting(new ComponentName(
                            getBaseContext(),
                            "com.qiyou.wx.activity.Test"),
                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP);

            //去掉HomeActivity图标
            pm.setComponentEnabledSetting(new ComponentName(
                            getBaseContext(),
                            "com.qiyou.wx.activity.HomeActivity"),
                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP);
            Log.d("TAG", "换Default的图标");
        }
    }

3.第三步 代码调用:

//使用Test图标
changeIcon(true);
//使用Default图标
changeIcon(false);

使用Android studio运行时,运行几次就运行不了了,提示找不到活动类:

 出现此错误,解决办法如下:

 

  选择nothing即可

第二种方式:

 1.第一步 通过activity实现,manifest 这里写的是一个默认的HomeActivity和一个需要切换的TestActivity:

<activity
    android:icon="@mipmap/logo"
    android:label="@string/app_name"
    android:name=".activity.HomeActivity"
    android:launchMode="singleTop"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="adjustPan">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity
    android:icon="@mipmap/ic_launcher"
    android:label="Text name"
    android:name=".activity.TextActivity"
    android:launchMode="singleTop"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="adjustPan">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

2.第二步 创建TextActivity并继承默认的HomeActivity:

public class TextActivity extends HomeActivity {

}

3.第三步 切换代码:

/**
 * 修改图标和名称的方法
 *
 * @param enable
 */
public void changeIcon(boolean enable) {
    PackageManager pm = getApplicationContext().getPackageManager();

    if (enable) {
        //显示TextActivity图标
        pm.setComponentEnabledSetting(new ComponentName(
                        getBaseContext(),
                        "com.qiyou.wx.activity.TextActivity"),
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                PackageManager.DONT_KILL_APP);

        //去掉HomeActivity图标
        pm.setComponentEnabledSetting(new ComponentName(
                        getBaseContext(),
                        "com.qiyou.wx.activity.HomeActivity"),
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                PackageManager.DONT_KILL_APP);
        Log.d("TAG", "换TextActivity的图标");
    } else {
       //显示HomeActivity图标
        pm.setComponentEnabledSetting(new ComponentName(
                        getBaseContext(),
                        "com.qiyou.wx.activity.HomeActivity"),
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                PackageManager.DONT_KILL_APP);
        //去掉TextActivity图标
        pm.setComponentEnabledSetting(new ComponentName(
                        getBaseContext(),
                        "com.qiyou.wx.activity.TextActivity"),
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                PackageManager.DONT_KILL_APP);

        Log.d("TAG", "换HomeActivity的图标");
    }
}

4.第四步 代码调用:

//使用TextActivity图标
changeIcon(true);
//使用HomeActivity图标
changeIcon(false);

//如果想要app有多个图标,只需要新建几个activity页面并添加android:documentLaunchMode="intoExisting"    属性即可。

//-------------------------------------------------------------END------------------------------------------------------------