现在通用的截获home的方法在4.0.3、4.0.4、4.2.2中就不行了,下面是我试过一种在4.2.2中可行,但在4.0.4中确不行的方法,希望能帮助大家!
经在4.2.2.中测试,仅依靠以下两句,即可在应用中对home键进行屏蔽:
定义:private static final int FLAG_HOMEKEY_DISPATCHED = 0x80000000;
在Activity的onCreate中增加一句:
this.getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED, FLAG_HOMEKEY_DISPATCHED);
private static final int FLAG_HOMEKEY_DISPATCHED = 0x80000000;
//是否截获home:true-->截获,false-->不截获
private boolean disableHomeFlag = true;
在onCreate设置,此时home被拦截:
this.getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED, FLAG_HOMEKEY_DISPATCHED);
如果需要判断是否取消home的截获,要在onKeyDown中做:
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch(keyCode) {
case KeyEvent.KEYCODE_HOME:
if(!disableHomeFlag ){
//不截获home,清除Flag
this.getWindow().clearFlags(FLAG_HOMEKEY_DISPATCHED);
}
break
default:
break;
}
return super.onKeyDown(keyCode, event);
}
如果想要弹个提示框给用户,确定是否执行home,可以在onKeyUp中做处理:
public boolean onKeyUp (int keyCode, KeyEvent event) {
switch(keyCode) {
case KeyEvent.KEYCODE_HOME:
//弹个提示框:1、确定home;2、取消home
break
default:
break;
}
return super.onKeyUp(keyCode, event);
}
1、确定要执行home:
this.getWindow().clearFlags(FLAG_HOMEKEY_DISPATCHED);//清除flag,取消对home的截获
//执行home
Intent intent= new Intent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
2、取消执行home
不需要做什么操作,home已经被截获了。