如何更改app的图标

是工作中遇到的问题,一个app锁的应用要求能够更改图标,众所周知更改app图标只能在清单文件上更改,

那我现在要在app内更改图标总不能换资源文件吧,那怎么办?

首先我们要了解一下activity与activity-alisa的区别,我认为唯一的区别就在于activity是一个实体他伴有xml文件,可以更改布局,是一个具体的活动,他可以声明一个活动。

而activity-alisa也可以声明一个活动,但它允许为一个活动创建一个或多个别名,这意味着你可以使用多个不同的名称引用同一个活动。每个<activity-alias>标签必须指定一个唯一的名称,并通过android:targetActivity属性指定目标活动的名称(通常是声明的<activity>标签的名称)。

了解了这个就好办了,下面我将用最笨的方法完成这个需求。

先大致看一下,可以换成这么多的图标,

 <activity
            android:name=".activity.MainActivity"
            android:exported="true" /> <!-- 别名1,特定活动需要的图标如:双11,国庆节等 -->
        <activity-alias
            android:name=".P1Activity"
            android:enabled="false"
            android:exported="true"
            android:icon="@drawable/photo1"
            android:label="@string/app_name"
            android:targetActivity=".activity.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias> <!-- <intent-filter> -->
        <!-- <action android:name="android.intent.action.MAIN" /> -->
        <!-- <category android:name="android.intent.category.LAUNCHER" /> -->
        <!-- </intent-filter> -->
        <!-- </activity> -->
        <!-- 固定设置一个默认的别名,用来替代原MainActivity -->
        <activity-alias
            android:name=".DefaultAliasActivity"
            android:enabled="true"
            android:exported="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:targetActivity=".activity.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

这里我拉出来两个,都是指定的Mainactivity,唯一不同的是对应的icon,简单的说就算我把标签作为res的容器了。

public void setDefaultAlias(String activityname) {
        PackageManager packageManager = getPackageManager();
        ComponentName name2 = new ComponentName(this, "com.heaven.smartapplock.V1Activity");
        packageManager.setComponentEnabledSetting(name2, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
        ComponentName name3 = new ComponentName(this, "com.heaven.smartapplock.V2Activity");
        packageManager.setComponentEnabledSetting(name3, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
        ComponentName name4 = new ComponentName(this, "com.heaven.smartapplock.V3Activity");
        packageManager.setComponentEnabledSetting(name4, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
        ComponentName name5 = new ComponentName(this, "com.heaven.smartapplock.V4Activity");
        packageManager.setComponentEnabledSetting(name5, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
        ComponentName name6 = new ComponentName(this, "com.heaven.smartapplock.P1Activity");
        packageManager.setComponentEnabledSetting(name6, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
        ComponentName name7 = new ComponentName(this, "com.heaven.smartapplock.P2Activity");
        packageManager.setComponentEnabledSetting(name7, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
        ComponentName name8 = new ComponentName(this, "com.heaven.smartapplock.P3Activity");
        packageManager.setComponentEnabledSetting(name8, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
        ComponentName name9 = new ComponentName(this, "com.heaven.smartapplock.P4Activity");
        packageManager.setComponentEnabledSetting(name9, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
        ComponentName name10 = new ComponentName(this, "com.heaven.smartapplock.T1Activity");
        packageManager.setComponentEnabledSetting(name10, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
        ComponentName name11 = new ComponentName(this, "com.heaven.smartapplock.T2Activity");
        packageManager.setComponentEnabledSetting(name11, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
        ComponentName name12 = new ComponentName(this, "com.heaven.smartapplock.T3Activity");
        packageManager.setComponentEnabledSetting(name12, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
        ComponentName name13 = new ComponentName(this, "com.heaven.smartapplock.T4Activity");
        packageManager.setComponentEnabledSetting(name13, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
        ComponentName name14 = new ComponentName(this, "com.heaven.smartapplock.DefaultAliasActivity");
        packageManager.setComponentEnabledSetting(name14, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
        ComponentName name1 = new ComponentName(this, activityname);
        packageManager.setComponentEnabledSetting(name1, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
    }

这是一个最笨蛋的方法,将每个标签的名字对应活动的开关

COMPONENT_ENABLED_STATE_DISABLED//表示无法被启动
COMPONENT_ENABLED_STATE_ENABLED//表示启动
activityname这个参数就是你想要替换的那个icon的标签名(可以理解为标签对应着iocn)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值