Android屏蔽Home键,适配所有版本

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

即可


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值