您的位置:首页 > 其它

在activity中屏蔽home键的方法

2013-08-02 10:01 459 查看
在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以上
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: