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左右,期间点击图标显示未安装此应用,更换完成之后才可以再次点击应用图标正常进入。

    原文作者:静染星辰
    原文地址: https://www.jianshu.com/p/34200797a5ff
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞