应用程序中捕获home按键事件
2014-06-03 13:47
239 查看
为了系统安全,android在2.3之后的版本就不能让程序员在应用程序中去捕获home键了,网上很多文章说重载onAttachedToWindow方法和onKeyDown方法去捕获home键时可以用的,这是不对的。在4.0之后,就不允许这样做了,编译都通不过,报错:java.lang.IllegalArgumentException: Window type can not be changed after the window is added。
出于安全考虑,应用程序是没有那么多权限的,但是如果真的想在应用程序中去捕获home事件,怎么办呢?这里借鉴了网上某高手的做法,就是去捕获log信息,当用户在按home键时,tag为ActivityManager就会打印如下的intent信息:I/ActivityManager( 355): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=com.dxd.launcher/.MainActivity}
from pid 355,这个字符串中我们可以看到很多信息,比如launcher的包名和主Activity名,进程id等。通过抓ActivityManager的Log信息来捕获home事件需要系统权限,即需要签名,不然不能获取到home事件。
如下代码:
出于安全考虑,应用程序是没有那么多权限的,但是如果真的想在应用程序中去捕获home事件,怎么办呢?这里借鉴了网上某高手的做法,就是去捕获log信息,当用户在按home键时,tag为ActivityManager就会打印如下的intent信息:I/ActivityManager( 355): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=com.dxd.launcher/.MainActivity}
from pid 355,这个字符串中我们可以看到很多信息,比如launcher的包名和主Activity名,进程id等。通过抓ActivityManager的Log信息来捕获home事件需要系统权限,即需要签名,不然不能获取到home事件。
如下代码:
/** * 必须要有系统签名才能获取到ActivityManager的logcat */ public void startListen() { new Thread(new Runnable() { @Override public void run() { Process logcatProcess = null; BufferedReader bufferedReader = null; try { logcatProcess = Runtime.getRuntime().exec(new String[] { "logcat", "ActivityManager:I *:S" }); bufferedReader = new BufferedReader(new InputStreamReader(logcatProcess.getInputStream())); String line; while ((line = bufferedReader.readLine()) != null) { if (line.indexOf("cat=[android.intent.category.HOME]") > 0) { Log.e("","用户按了home键,你可以进行你的操作"); } } } catch (Exception e) { e.printStackTrace(); } } }).start(); }
相关文章推荐
- Android 怎么退出整个应用程序?__以及__按键事件捕获的问题?
- Android 怎么退出整个应用程序?__以及__按键事件捕获的问题?
- 在winform中捕获上下左右键等控制键的按键事件
- 仿hotmail收件人弹层: onkeyup事件无法捕获到"回车按键", 用onkeydown事件捕获额外处理"回车键"
- Android中中捕获HOME事件
- C#控件捕获按键事件
- Atitit.android js 的键盘按键检测Back键Home键和Menu键事件
- C# WinFrom捕获按键按下事件(一)
- Android捕获home和recent app按键
- 浮窗WindowManager view返回和Home按键事件监听
- Android中捕获Home事件的终极解决方案
- Dev gridcontrol 捕获按键事件
- Atitit.android js 的键盘按键检测Back键Home键和Menu键事件
- C# WinFrom捕获按键按下事件(二)
- 捕获事件:运行android应用程序
- Dev gridcontrol 捕获按键事件
- Atitit.android js 的键盘按键检测Back键Home键和Menu键事件
- C#控件捕获按键事件
- 使用cocoa捕获dock栏中的“退出”事件,解决qt开发的应用程序退出异常的问题