android 4.0以后无法通过更改页面的类型来监听home键了。如果不改源码的情况下,下面的方式可以很好的监听到home键(前提是手机打系统日志,有些手机日志被关闭了(如华为荣耀)就无法监听了)。
protected void onResume() { super.onResume(); isTesting=true; new CatchLogThread().start(); } 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()),2*1024); while ((line = reader.readLine()) != null) { if (line.indexOf("android.intent.category.HOME") > 0) { isTesting = false; System.out.println("DDDDDDDDDDDDDDDDDDDDDDDDD"); 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) { startActivity(new Intent(MainActivity.this,MainActivity.class)); Toast.makeText(MainActivity.this, "I Have Home is pressed!!!!!",Toast.LENGTH_LONG).show(); System.out.println("Home is Pressed+++++++++++++++++"); }; };
以上是全部精华代码。要对home键按下后做操作可以在handler中进行。希望可以帮助到一些冥思苦想而不得解的人。
最后记得在AndroidManifest.xml中加读取日志权限:
<uses-permission android:name="android.permission.READ_LOGS"></uses-permission>