获取home键
android处于安全考虑,home键在应用层是捕获不到的,只有在底层才能获取其监听事件。
但是,我们有时是需要对home键进行处理的。那么怎样才能在我们的Activity层监听到home键呢。
步骤:
1,首先在AndroidManifest.xml添加一项权限:
<uses-permission android:name=”android.permission.DISABLE_KEYGUARD” />
2,在你所需要的Activity中添加下面的方法:
@Override
public void onAttachedToWindow() {
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}
到此,对应Activity的home键已经被我们屏蔽掉。下面我们就可以对该键进行想要的处理了。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_HOME) {
... ... // 处理当点击home键想要的操作
return true;
}
return super.onKeyDown(keyCode, event);
}
现在,我们可以试试效果了。结果发现,模拟器sdk2.2测试的效果没问题,公司的sdk2.3.5的对讲机也没问题,但是试了几部手机,一点效果都没有。后来才知道,从sdk3.0以后的版本,home键通过这种方法是屏蔽不了的。
---------------------------------------------------------------------------------------------------------------------
后来,熟悉了工具Logcat,它是用来记录和查看系统调试信息的。我们可以想到,既然我们点击home键时,所有应用的界面都关闭了,那么这个动作肯定是会被记录到日志当中的。那么,我们是否可以通过获取点击home键时输出的log信息来监听它呢。现在我们得到了获取home键的方案,步骤如下:
1,首先在AndroidManifest.xml添加一项权限,用来读取系统的log信息:
<uses-permission android:name=”android.permission.READ_LOGS” />
2,在Activity中添加如下代码:
new Thread(new Runnable() {
@Override
public void run() {
Process process= null;
BufferedReader buffer = null;
try {
// 获取系统logcat日志信息
// ActivityManager 表示监听的tag, I 表示监听的Log类型, *:S 表示监听所有的信息
// 即,tag为ActivityManager、Logcat类型为I的所有Log都会被获取到。
process = Runtime.getRuntime().exec(new String[] {"logcat", "ActivityManager:I *:S"});
buffer = new BufferedReader(new InputStreamReader(logcatProcess.getInputStream()));
String line = null;
while ((line = bufferedReader.readLine()) != null) {
if (line.indexOf("cat=[android.intent.category.HOME]") > 0) {
// "cat=[android.intent.category.HOME]"就是点击home键时logcat记录的信息
... ...
//在这里就可以处理当你点击home键想要的操作了
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();