当前位置: 代码迷 >> Android >> android 4.0.x Home键事件阻截/监听
  详细解决方案

android 4.0.x Home键事件阻截/监听

热度:451   发布时间:2016-05-01 17:55:44.0
android 4.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软件开发之在程序中时时获取logcat日志信息

android应用程序logcat命令


  相关解决方案