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>