戻りキー、メニューキー、ホームキー

4688 ワード

Androidシステムでインタフェースを表示するために使用されるコンポーネント(Component)はActivityであり、つまりActivityのonKeyDownメソッドを書き換えるだけでモニタリング/ブロック/シールドシステムの戻りキー(back)、メニューキー(Menu)、ホームキーである.
1、遮断/遮蔽返却キー、メニューキー実現コード
@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

    if(keyCode == KeyEvent.KEYCODE_BACK) { // / / 

        processExit();

        return true;

    } else if(keyCode == KeyEvent.KEYCODE_MENU) {

        // / 

    } else if(keyCode == KeyEvent.KEYCODE_HOME) {

        // Home , , onAttachedToWindow()

    }

    return super.onKeyDown(keyCode, event);

}

2、遮断/遮蔽システムホームキー
public void onAttachedToWindow() {  

     this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);     

     super.onAttachedToWindow();    

}

なぜonAttachedToWindow()を書き直さなければならないのか、次のコードを見ればわかります
/frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java 1000 

if (code == KeyEvent.KEYCODE_HOME) {  

    // If a system window has focus, then it doesn't make sense  

    // right now to interact with applications.  

    WindowManager.LayoutParams attrs = win != null ? win.getAttrs() : null;  

    if (attrs != null) {  

        final int type = attrs.type;  

        if (type == WindowManager.LayoutParams.TYPE_KEYGUARD  

                || type == WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG) {  

                // the "app" is keyguard, so give it the key  

                return false;  

        }  

        final int typeCount = WINDOW_TYPES_WHERE_HOME_DOESNT_WORK.length;  

        for (int i=0; i<typeCount; i++) {  

            if (type == WINDOW_TYPES_WHERE_HOME_DOESNT_WORK[i]) {  

                // don't do anything, but also don't pass it to the app  

                return true;  

            }  

        }  

    } 

}