1. 在activity中加上这段代码就可以屏蔽home键(onKeyDown事件会捕捉到home键)。


public void onAttachedToWindow()
{
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}
public void onAttachedToWindow()
{
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
} 2.因为android系统自己对与home键power键在PhoneWindowManager中做了处理,不会返回到上层应用的。以下为系统源码:
\frameworks\policies\base\phone\com\android\internal\policy\impl\PhoneWindowManager.java 1089行

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;
}
}
}
\frameworks\policies\base\phone\com\android\internal\policy\impl\PhoneWindowManager.java 1089行

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;
}
}
}

type == WindowManager.LayoutParams.TYPE_KEYGUARD这一句,我们可以看到,android对于锁屏特殊判断了,所以我就模拟这个进行的实现,只是有一点,activity中重写onAttachedToWindow()方法需要api 5以上。


更多相关文章

  1. Android判断网络是否可用,调用系统网络设置
  2. 非常不错的资金管理系统android版客户端源码
  3. PHP如何检测手机是什么系统?
  4. 调用android系统自带的功能
  5. Android 监听系统虚拟导航栏按键
  6. android系统关机重启

随机推荐

  1. Android中关于日期时间与时区的使用总结
  2. Android消息推送完美方案
  3. 自编Win8风格Android音乐播放器应用源码(
  4. Android 如何把AsyncTask改用非内部类And
  5. cocos2d-x集成友盟消息推送SDK(Android版
  6. 使用WebView, WebChromeClient和WebViewC
  7. 贪吃蛇(android版)
  8. Android虚拟机,控制台Console报错几例及解
  9. Android输入法框架分析(1)-三大组件
  10. 重看android(一) android架构