首页 > 系统 > Android > 正文

Android4.0.x Home键事件拦截监听的方法

2019-10-24 20:23:20
字体:
来源:转载
供稿:网友
这篇文章主要介绍了Android4.0.x Home键事件拦截监听的方法,对比分析了2.3.x的实现方法,分析了4.0.x实现Home键事件拦截监听的相关技巧,需要的朋友可以参考下
 

本文实例讲述了Android4.0.x Home键事件拦截监听的方法。分享给大家供大家参考,具体如下:

在2.3.x 的主要做法如下,具体实现网上有很多文章

@Overridepublic void onAttachedToWindow() {  this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);  super.onAttachedToWindow();}

代码移植到4.0.1后 this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); 这行报错,

错误提示:java.lang.IllegalArgumentException: Window type can not be changed after the window is added。

可以有两种处理方式

方法一、修改PhoneWindowManager.java

if (keyCode == KeyEvent.KEYCODE_HOME) {  //在这里发送一个广播出去}

在应用里接收到广播后做相应处理,一般是做手机项目才会去改源码。

方法二、检测log,根据log判断是否有点击Home键

private boolean isTesting = true;class CatchLogThread extends Thread {  @Override  public void run() {    Process mLogcatProc = null;    BufferedReader reader = null;    String line;    while (isTesting) {      try {        // 获取logcat日志信息        mLogcatProc = Runtime.getRuntime().exec(new String[] { "logcat", "ActivityManager:I *:S" });        reader = new BufferedReader(new InputStreamReader(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 (Exception e) {        e.printStackTrace();      }    }  }};Handler handler = new Handler() {  public void handleMessage(android.os.Message msg) {    Log.i(TAG,"Home key press");    //do something here  };};
 


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表