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程序设计有所帮助。