Android4.0.x Home键事件拦截监听的方法
本文实例讲述了Android4.0.xHome键事件拦截监听的方法。分享给大家供大家参考,具体如下:
在2.3.x的主要做法如下,具体实现网上有很多文章
@Override
publicvoidonAttachedToWindow(){
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}
代码移植到4.0.1后this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);这行报错,
错误提示:java.lang.IllegalArgumentException:Windowtypecannotbechangedafterthewindowisadded。
可以有两种处理方式
方法一、修改PhoneWindowManager.java
if(keyCode==KeyEvent.KEYCODE_HOME){
//在这里发送一个广播出去
}
在应用里接收到广播后做相应处理,一般是做手机项目才会去改源码。
方法二、检测log,根据log判断是否有点击Home键
privatebooleanisTesting=true;
classCatchLogThreadextendsThread{
@Override
publicvoidrun(){
ProcessmLogcatProc=null;
BufferedReaderreader=null;
Stringline;
while(isTesting){
try{
//获取logcat日志信息
mLogcatProc=Runtime.getRuntime().exec(newString[]{"logcat","ActivityManager:I*:S"});
reader=newBufferedReader(newInputStreamReader(mLogcatProc.getInputStream()));
while((line=reader.readLine())!=null){
if(line.indexOf("android.intent.category.HOME")>0){
isTesting=false;
handler.sendMessage(handler.obtainMessage());
Runtime.getRuntime().exec("logcat-c");//删除日志
break;
}
}
}catch(Exceptione){
e.printStackTrace();
}
}
}
};
Handlerhandler=newHandler(){
publicvoidhandleMessage(android.os.Messagemsg){
Log.i(TAG,"Homekeypress");
//dosomethinghere
};
};
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android资源操作技巧汇总》、《Android视图View技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。