Activity Alias 动态改变Launcher Icon - litonghui/TechBlog GitHub Wiki

有没有遇到过需要改变桌面快捷方式需求,比如购物软件会根据活动会修改launcher Icon,6.18 、双11、双12 等等。修改Icon方法有很多种,可以通过ACTION_ADD_SHORT 重建的方式修改Launcher Icon ,当然还有一种 Activity Alia 方式,具体如下所示。

一. 在AndroidManifest 声明权限,并添加正常启动Activity 和 Activity Alias。
   <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>

    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    
    <activity-alias
        android:name=".MainAliasActivity"
        android:targetActivity=".MainActivity"
        android:label="@string/app_name"
        android:icon="@mipmap/ic_like"
        android:enabled="false">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category  android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity-alias>
关于AndroidManifest 中声明注意如下:
1. android.intent.action.MAIN 和 android.intent.category.LAUNCHER是ICON 点击主程序的入口,不需在正常Activity 和 Activity Alias同时声明。
2. android:name 定义之后后面需要用,不需要真真创建Activity
3. android:targetActivity 对应的是点击启动之后调用的目标页面
4. android:enabled="false" 一定要设置为false ,否则会在初次安装创建多个icon
二. 修改快捷方式。
    PackageManager pkm = getPackageManager();
    pkm.setComponentEnabledSetting(getComponentName(), PackageManager.COMPONENT_ENABLED_STATE_DISABLED
            , PackageManager.DONT_KILL_APP);
    pkm.setComponentEnabledSetting(new ComponentName(this, "com.lth.dometest.MainAliasActivity"), PackageManager.COMPONENT_ENABLED_STATE_ENABLED
            , PackageManager.DONT_KILL_APP);
关于修改代码,android:name 在代码中被调用,注意一致性。
⚠️ **GitHub.com Fallback** ⚠️