在activity中加上下面这段代码就可以屏蔽home
1. @Override
2. public boolean onKeyDown(int keyCode, KeyEvent event)
3. {
4. // TODO Auto-generated method stub
5. // 按下键盘上返回按钮
6.
7. if (keyCode == KeyEvent.KEYCODE_HOME)
8. {
9. Log.i("TAG","home");
10. System.exit(0);
11. return true;
12. }
13. else
14. return super.onKeyDown(keyCode, event);
15.
16. }
前提是,要重写onAttachedToWindow()这个方法。
1. @Override
2. public void onAttachedToWindow()
3. {
4. this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
5. super.onAttachedToWindow();
6. }
因为android系统自己对home键在PhoneWindowManager中做了处理,不会返回到上层应用。查看源代码:
\frameworks\policies\base\phone\com\android\internal\policy\impl\PhoneWindowManager.java1089行
1. if (code == KeyEvent.KEYCODE_HOME) {
2. // If a system window has focus, then it doesn't make sense
3. // right now to interact with applications.
4. WindowManager.LayoutParams attrs = win != null ? win.getAttrs() : null;
5. if (attrs != null) {
6. final int type = attrs.type;
7. if (type == WindowManager.LayoutParams.TYPE_KEYGUARD
8. || type == WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG) {
9. // the "app" is keyguard, so give it the key
10. return false;
11. }
12. final int typeCount = WINDOW_TYPES_WHERE_HOME_DOESNT_WORK.length;
13. for (int i=0; i<typeCount; i++) {
14. if (type == WINDOW_TYPES_WHERE_HOME_DOESNT_WORK[i]) {
15. // don't do anything, but also don't pass it to the app
16. return true;
17. }
18. }
19. }
注意,activity中重写onAttachedToWindow()方法需要api 5以上
屏蔽home建
<uses-permissionandroid:name="android.permission.DISABLE_KEYGUARD"></uses-permission>
这样做会和全屏冲突。