Android动态修改icon--让你的app浪起来

公司APP最近做活动(12.12)要换APP图标,产品说活动前上一个版,放12.12的icon,等活动过了再更新一个版,换成平常的图标。


顿时我就生气了,淘宝京东都可以动态换icon,直接让我写死?

这不是对技术的蔑视吗?埋头研究动态换icon,准备写成功后摔产品脸上。

哈哈哈yy的题外话。不过产品是让我写死,我就自己去研究动态换。

     

       下面开始正题、百度了下了解android可以根据activity-alias来设置桌面可以存在多个icon,那直接通过设置某个activity-alias显示其他隐藏即可实现。下面上代码

       1、在xml添加多个activity-alias、删除mainActivity标签的属性

 

        
            
                
                
            
        

        
            
                
                
            
        


如上图 指向的targetActivity可以是不同的,这样启动的activity也是不是一样的,主要的是name要和代码中保持一致

2、代码中控制活动和普通图标的切换


 /**
     * @param useCode =1、为活动图标 =2 为用普通图标 =3、不启用判断
     */
    private void switchIcon(int useCode) {

        try {
            //要跟manifest的activity-alias 的name保持一致
            String icon_tag = "com.weechan.shidexianapp.icon_tag";
            String icon_tag_1212 = "com.weechan.shidexianapp.icon_tag_1212";

            if (useCode != 3) {

                PackageManager pm = getPackageManager();

                ComponentName normalComponentName = new ComponentName(
                        getBaseContext(),
                        icon_tag);
                //正常图标新状态
                int normalNewState = useCode == 2 ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
                        : PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
                if (pm.getComponentEnabledSetting(normalComponentName) != normalNewState) {//新状态跟当前状态不一样才执行
                    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) {
        }
    }

上图的icon_tag和icon_tag_1212要和你xml中的activity-alias的name保持一致


补坑。。activity-alias的name是不能改的,如果当前版本的是icon_tag_1212,下版本改成icon_tag_act,就会导致系统找icon_tag_1212找不到,导致桌面无图标,应用打不开!!!此坑严重请注意


你可能感兴趣的:(Android动态修改icon--让你的app浪起来)