實(shí)現(xiàn)方法來(lái)自 Android群英傳 作者 徐醫(yī)生的微信公眾號(hào)
應(yīng)用場(chǎng)景:需要在不同的節(jié)日或其他情況顯示不同的應(yīng)用圖標(biāo)鸯屿。
在清單文件中:
通過(guò)activity-alias設(shè)置MainActivity的三個(gè)入口澈吨,并設(shè)置其中兩個(gè)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);
}
}
通過(guò)PackageManager 的setComponentEnabledSetting方法控制組件的開(kāi)啟禁用寄摆。
public void setComponentEnabledSetting (ComponentName componentName, int newState, int flags)
componentName:組件名稱(chēng)
newState:組件新的狀態(tài)谅辣,可以設(shè)置三個(gè)值,分別是如下:
不可用狀態(tài):COMPONENT_ENABLED_STATE_DISABLED
可用狀態(tài):COMPONENT_ENABLED_STATE_ENABLED
默認(rèn)狀態(tài):COMPONENT_ENABLED_STATE_DEFAULT
flags:行為標(biāo)簽婶恼,值可以是DONT_KILL_APP或者0桑阶。 0說(shuō)明殺死包含該組件的app
這樣進(jìn)入應(yīng)用點(diǎn)擊相應(yīng)圖標(biāo)就會(huì)變化圖標(biāo)和應(yīng)用名柏副。會(huì)有一定的延遲。并且在變化成功之前圖標(biāo)點(diǎn)擊沒(méi)效果蚣录,成功之后點(diǎn)擊才會(huì)進(jìn)入程序割择。
在清單文件中設(shè)置enable=“true” (默認(rèn)為true)會(huì)生成三個(gè)程序入口。即在手機(jī)桌面顯示三個(gè)應(yīng)用圖標(biāo)萎河。