在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