文章

Android之Back键和HOME键拦截处理

文章目录

一、拦截BACK键

一般的应用有两种方法可以获取,当然你也可以修改Framework层代码进行拦截,但这个真的没必要修改。

方法1、重写Activity的onKeyDown方法

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { //按下的如果是BACK,同时没有重复
           <span style="color: #ff0000;">//do something ...</span>
           return true;
    }
    return super.onKeyDown(keyCode, event);
}

方法2、重写onBackPressed方法

@Override
public void onBackPressed() {
    <span style="color: #ff0000;">// 注意:仅适用于2.0或更新版的sdk版本</span>
    return;
}

既然一般的应用都可以搞定,而且Android给了标志接口,那就不用修改Framework了。

二、拦截HOME

在以前的版本也可以通过重写Activity的onKeyDown方法(跟BACK键一样)进行拦截,但是后面Android把权限收回了。Android 6.0(其他版本忘记了)以后是不可以拦截HOME键的。因此如果你真的要拦截,那只能修改PhoneWindowManager.java做拦截判断了。

    @Override
    public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int 
    policyFlags) {

    if (keyCode == KeyEvent.KEYCODE_HOME) {
       <span style="color: #ff0000;">//do something ...</span>
    }
}
发表评论