在2.2,2.3版本上重写下面方法就能重写home键:
public void onAttachedToWindow() {
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}
但是在4.0以上就不能用了。
刚刚发现4.0上还有一种方法可以屏蔽和重写Home键,而且非常简单。代码如下:
public static final int FLAG_HOMEKEY_DISPATCHED = 0x80000000;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED, FLAG_HOMEKEY_DISPATCHED);//关键代码
setContentView(R.layout.main);
}
再重写onKey事件即可。
先找到文件PhoneWindowManager.java (frameworks\base\policy\src\com\android\internal\policy\impl)
中的对应方法 interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags)
方法一、在其中设定
if ((null != attrs.packageName) && (attrs.packageName.startsWith("com.spreadst.validationtools"){
return 0;
}
则对应包名的App将屏蔽掉home键,该方法只对某个特定的App有用。
方法二、在其中设定
final int flag = attrs.flags;
if ((flag & WindowManager.LayoutParams.FLAG_HOMEKEY_DISPATCHED) != 0) {
// the window wants to handle the home key, so dispatch it to it.
return 0;
}
则只需在需要屏蔽home键的Activity的onCreate()中添加
public static final int FLAG_HOMEKEY_DISPATCHED = 0x80000000;
this.getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED, FLAG_HOMEKEY_DISPATCHED);
即可