通过代码动态修改应用图标和应用名

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/androidzf/article/details/80749371

1、AndroidManifest.xml文件的配置

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity"
            android:icon="@mipmap/ic_launcher"
            android:label="图标1"
            android:enabled="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity-alias
            android:name=".icon2"
            android:targetActivity=".MainActivity"
            android:enabled="false"
            android:icon="@mipmap/apple"
            android:label="图标2">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>
        <activity-alias
            android:name=".icon3"
            android:targetActivity=".MainActivity"
            android:enabled="false"
            android:icon="@mipmap/orange"
            android:label="图标3">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>
    </application>

2、逻辑代码动态控制

获取:ComponentName

icon1 =new ComponentName(getApplication(),"com.example.zf.icondemo.MainActivity");
icon2 = new ComponentName(getApplication(), "com.example.zf.icondemo.icon2");
icon3 = new ComponentName(getApplication(), "com.example.zf.icondemo.icon3");

动态控制应用图标及应用名:

   enableComponent(icon1);
   disableComponent(icon2);
   disableComponent(icon3);
   /**
     * 通过PackageManager 的setComponentEnabledSetting方法控制组件的开启禁用。
     * 开启
     * @param componentName
     */
    private void enableComponent(ComponentName componentName){
        mPm.setComponentEnabledSetting(componentName,
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                PackageManager.DONT_KILL_APP);
    }

    /**
     * 禁用
     * @param componentName
     */
    private void disableComponent(ComponentName componentName){
        mPm.setComponentEnabledSetting(componentName,
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED ,
                PackageManager.DONT_KILL_APP);
    }
ps:

通过PackageManager 的setComponentEnabledSetting方法控制组件的开启禁用。
public void setComponentEnabledSetting (ComponentName componentName, int newState, int flags)
componentName:组件名称
newState:组件新的状态,可以设置三个值,分别是如下:
           不可用状态:COMPONENT_ENABLED_STATE_DISABLED
           可用状态:COMPONENT_ENABLED_STATE_ENABLED
           默认状态:COMPONENT_ENABLED_STATE_DEFAULT
flags:行为标签,值可以是DONT_KILL_APP或者0。 0说明杀死包含该组件的app

这样进入应用点击相应图标就会变化图标和应用名。会有一定的延迟。并且在变化成功之前图标点击没效果,成功之后点击才会进入程序。
在清单文件中设置enable=“true” (默认为true)会生成三个程序入口。即在手机桌面显示三个应用图标。


猜你喜欢

转载自blog.csdn.net/androidzf/article/details/80749371