分享

Android屏蔽home键

 lifei_szdz 2013-09-26

Android屏蔽home键

在activity中加上下面这段代码就可以屏蔽home

Java代码  

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()这个方法。

 

Java代码  

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行

Java代码  

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>
这样做会和全屏冲突。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多