天天看點

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  

  };

};

轉載于:https://www.cnblogs.com/gr-android/p/3443250.html