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

文章时间久远,仅做参考。

 

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

 

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

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

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

     

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

 

       1、在xml添加多个activity-alias、删除mainActivity标签的<categoryandroid:name="android.intent.category.LAUNCHER" />属性

 

        <activity-alias
            android:name=".icon_tag"
            android:enabled="true"
            android:icon="your icon"
            android:label="your icon"
            android:targetActivity=".activity.WeChatLoginActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>

        <activity-alias
            android:name=".icon_tag_1212"
            android:enabled="false"
            android:icon="your icon"
            android:label="your icon name"
            android:targetActivity=".activity.WeChatLoginActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>

 

 

 

如上图 指向的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找不到,导致桌面无图标,应用打不开!!!此坑严重请注意

 

 

 

 

 

  • 5
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值