在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);
即可