美文网首页
通过代码动态修改应用图标和应用名。

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

作者: wslerz | 来源:发表于2017-01-01 16:37 被阅读0次

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

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

    在清单文件中:

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

    相关文章

      网友评论

          本文标题:通过代码动态修改应用图标和应用名。

          本文链接:https://www.haomeiwen.com/subject/zldivttx.html