屏蔽Home键

  • 格式:doc
  • 大小:166.50 KB
  • 文档页数:6

下载文档原格式

  / 13
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

相信在Android应用上,很多时候逻辑是需要屏蔽Home键的,但这个用户体验是否需要,就看各位的需求了。

一般的方法屏蔽Home键,大家一定看过不少文章了。我总结一下,先说一下一般情况下Activity的屏蔽按键和Home键吧。

屏蔽其他键,重写onKeyDown

Java代码

1.@Override

2.public boolean onKeyDown(int keyCode, KeyEvent event) {

3.Log.i(TAG,"keycode="+keyCode + " isBan="+isBan);

4.switch (keyCode) {

5.case KeyEvent.KEYCODE_BACK:

6.Log.i(TAG,"KEYCODE_BACK");

7.return true;

8.}

9.return super.onKeyDown(keyCode, event);

10.}

大家会发现,这里屏蔽Home键是捕捉不到的,因为大家的权限一般是User所以是无效的。

而其实android处理Home键等系统级按键是有一定的处理的。

引用

看看源码是怎样处理的

\frameworks\policies\base\phone\com\android\internal\policy\impl\Phon eWindowManager.java #1092

Java代码

1.// First we always handle the home key here, so applications

2.// can never break it, although if keyguard is on, we do let

3.// it handle it, because that gives us the correct 5 second

4.// timeout.

5.if (code == KeyEvent.KEYCODE_HOME) {

6.

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

8.// right now to interact with applications.

youtParams attrs = win != null ? win.getAttrs() :

null;

10.if (attrs != null) {

11.final int type = attrs.type;

12.if (type == youtParams.TYPE_KEYGUARD

13.|| type == youtParams.TYPE_KEYGUARD_DIALOG) {

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

15.return false;

16.}

17.final int typeCount = WINDOW_TYPES_WHERE_HOME_DOESNT_WORK.length;

18.for (int i=0; i

19.if (type == WINDOW_TYPES_WHERE_HOME_DOESNT_WORK[i]) {

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

21.return true;

22.}

23.}

24.}

通过源码,我们不难发现两个的参数

youtParams.TYPE_KEYGUARD和

youtParams.TYPE_KEYGUARD_DIALOG

借鉴于此,重写onAttachedToWindow,以实现屏蔽Home键

Java代码

1.public void onAttachedToWindow() {

2.this.getWindow().setType(youtParams.TYPE_KEYGUA

RD);

3.super.onAttachedToWindow();

4.}

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 华丽的分界线,以下内容更精彩- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

轮到dialog了,如果在Activity弹出dialog,在Activity设置以上2个方法是没办法屏蔽的。

其实,原理是一样的,只是地方不一样而已。

Java代码

1.final Dialog dialog = new Dialog(this);

2.dialog.setContentView(yout.mydailog);

3.dialog.getWindow().setType(youtParams.TYPE_KEYG

UARD);

4.dialog.show();

5.

6.dialog.setOnKeyListener(new

android.content.DialogInterface.OnKeyListener(){

7.@Override