在activity中加上下面這段代碼就可以屏蔽home
Java代碼
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event)
- {
- // TODO Auto-generated method stub
- // 按下鍵盤上返回按鈕
- if (keyCode == KeyEvent.KEYCODE_HOME)
- {
- Log.i("TAG","home");
- System.exit(0);
- return true;
- }
- else
- return super.onKeyDown(keyCode, event);
- }
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
// TODO Auto-generated method stub
// 按下鍵盤上返回按鈕
if (keyCode == KeyEvent.KEYCODE_HOME)
{
Log.i("TAG","home");
System.exit(0);
return true;
}
else
return super.onKeyDown(keyCode, event);
}
前提是,要重寫onAttachedToWindow()這個方法。
Java代碼
- @Override
- public void onAttachedToWindow()
- {
- this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
- super.onAttachedToWindow();
- }
@Override
public void onAttachedToWindow()
{
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
super.onAttachedToWindow();
}
因為android系統自己對home鍵在PhoneWindowManager中做了處理,不會返回到上層應用。查看源代碼:
\frameworks\policies\base\phone\com\android\internal\policy\impl\PhoneWindowManager.java 1089行
Java代碼
- 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;
- }
- }
- }
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;
}
}
}
注意,activity中重寫onAttachedToWindow()方法需要api 5以上