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

实现方法来自 Android群英传 作者 徐医生的微信公众号

应用场景:需要在不同的节日或其他情况显示不同的应用图标。

在清单文件中:

通过代码动态修改应用图标和应用名。_第1张图片
Paste_Image.png
通过代码动态修改应用图标和应用名。_第2张图片
Paste_Image.png

通过activity-alias设置MainActivity的三个入口,并设置其中两个enabled = “false”;

public class MainActivity extends AppCompatActivity
implements View.OnClickListener {

private ComponentName apple;
private ComponentName orange;
private ComponentName banana;
private PackageManager mPm;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    orange = getComponentName();
    apple = new ComponentName(getApplication(),
            "com.lzz.changeicondemo.apple");
    banana = new ComponentName(getApplication(),
            "com.lzz.changeicondemo.banana");
    mPm = getPackageManager();
    findViewById(R.id.orange).setOnClickListener(this);
    findViewById(R.id.apple).setOnClickListener(this);
    findViewById(R.id.banana).setOnClickListener(this);
}

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.orange:
            enableComponent(orange);
            disableComponent(apple);
            disableComponent(banana);
            break;
        case R.id.apple:
            enableComponent(apple);
            disableComponent(orange);
            disableComponent(banana);
            break;
        case R.id.banana:
            enableComponent(banana);
            disableComponent(apple);
            disableComponent(orange);
            break;
        default:
            break;
    }
}
private void enableComponent(ComponentName componentName){
    mPm.setComponentEnabledSetting(componentName,
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
            PackageManager.DONT_KILL_APP);
}
private void disableComponent(ComponentName componentName){
    mPm.setComponentEnabledSetting(componentName,
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED ,
            PackageManager.DONT_KILL_APP);
}

}

通过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)会生成三个程序入口。即在手机桌面显示三个应用图标。

你可能感兴趣的:(通过代码动态修改应用图标和应用名。)