欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2024-02-20 14:43:16
本文实例讲述了android4.0.x home键事件拦截监听的方法。分享给大家供大家参考,具体如下: 在2.3.x 的主要做法如下,具体实现网上有很多文章 @...

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

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

@override
public 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相关内容感兴趣的读者可查看本站专题:《android开发入门与进阶教程》、《android资源操作技巧汇总》、《android视图view技巧总结》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。