在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以上
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以上
相关文章推荐
- 在activity中屏蔽home键的方法
- [学习记录]屏蔽Activity, Dialog风格Activity, AlertDialog的Home键功能方法(总结)
- 屏蔽Activity, Dialog风格Activity, AlertDialog的Home键功能方法(总结)
- 屏蔽Activity, Dialog风格Activity, AlertDialog的Home键功能方法(总结)
- 屏蔽模拟器Home键的方法
- dialog,activity 屏蔽Home键详解
- Android 边用边学 之 屏蔽HOME键的方法
- android开发-dialog与activity 屏蔽Home键详解
- Android下Dialog及Activity屏蔽Home键详解
- Activity屏蔽Home键
- Android dialog,activity 屏蔽Home键的教程详解
- Android dialog,activity 屏蔽Home键的教程详解
- Android dialog,activity 屏蔽Home键的教程详解
- Android屏蔽home键的代码,咋摁也不响应的方法
- Android dialog,activity 屏蔽Home键的教程详解
- dialog,activity 屏蔽Home键详解
- 关于2.3版本以下屏蔽Home键的方法(2.3版本中的方法一直寻找中)
- Android下 ProgressDialog Dialog及Activity屏蔽Home键详解
- android屏蔽HOME键的方法
- android4.0屏蔽HOME键的方法