戻りキー、メニューキー、ホームキー
4688 ワード
Androidシステムでインタフェースを表示するために使用されるコンポーネント(Component)はActivityであり、つまりActivityのonKeyDownメソッドを書き換えるだけでモニタリング/ブロック/シールドシステムの戻りキー(back)、メニューキー(Menu)、ホームキーである.
1、遮断/遮蔽返却キー、メニューキー実現コード
2、遮断/遮蔽システムホームキー
なぜonAttachedToWindow()を書き直さなければならないのか、次のコードを見ればわかります
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;
}
}
}
}