实现方法来自 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)会生成三个程序入口。即在手机桌面显示三个应用图标。
网友评论