本文实例讲述了Android4.0.x Home键事件拦截监听的方法。分享给大家供大家参考,具体如下:
在2.3.x 的主要做法如下,具体实现网上有很多文章
1
2
3
4
5
|
@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
1
2
3
|
if (keyCode == KeyEvent.KEYCODE_HOME) {
//在这里发送一个广播出去
}
|
在应用里接收到广播后做相应处理,一般是做手机项目才会去改源码。
方法二、检测log,根据log判断是否有点击Home键
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
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程序设计有所帮助。