android4.1 activity内屏蔽HOME按键功能
来源:互联网 发布:非主流伤感的网络歌曲 编辑:程序博客网 时间:2024/05/29 15:14
之前在http://blog.csdn.net/fulinwsuafcie/article/details/7717408看到如何屏蔽home按键。上面讲解的很详细了。在此在表述一下:
1、重写onAttachedToWindow
@Overridepublic void onAttachedToWindow() { this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_HOMEKEY_DISPATCHED); super.onAttachedToWindow(); }android的SDK里写的清楚:Called when the window has been attached to the window manager.
onAttachedToWindow在附加到window manager的时候调用。
我们在此添加标志位:FLAG_HOMEKEY_DISPATCHED,这个会通过windowManager通知framework层。
2、 重写onKeyDown
@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KeyEvent.KEYCODE_HOME: Log.i(TAG,"KEYCODE_HOME"); return true; } return super.onKeyDown(keyCode, event); }
但是我这样做后,按home键仍旧会退出到桌面。一再修改flag也没用。最后看了下源码,
在 PhoneWindowManager.java 的 interceptKeyBeforeDispatching 函数中对home键的处理如下:
if (keyCode == KeyEvent.KEYCODE_HOME) { ... } // If a system window has focus, then it doesn't make sense // right now to interact with applications. WindowManager.LayoutParams attrs = win != null ? win.getAttrs() : null; if (attrs != null) { final int type = attrs.type; if (type == WindowManager.LayoutParams.TYPE_KEYGUARD || type == WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG) { // the "app" is keyguard, so give it the key return 0; } final int typeCount = WINDOW_TYPES_WHERE_HOME_DOESNT_WORK.length; for (int i=0; i<typeCount; i++) { if (type == WINDOW_TYPES_WHERE_HOME_DOESNT_WORK[i]) { // don't do anything, but also don't pass it to the app return -1; } }
关键代码:if (attrs != null) { final int flag = attrs.flags; if ((flag & WindowManager.LayoutParams.FLAG_HOMEKEY_DISPATCHED) != 0) { // the window wants to handle the home key, so dispatch it to it. return 0; } }写在了home的代码下面。于是自然的我把它提到上面。问题解决。
修改后的具体代码如下:
///modified by TYD bravoon 20121228 for FLAG_HOMEKEY_DISPATCHED enable WindowManager.LayoutParams attrs = win != null ? win.getAttrs() : null; if (attrs != null) { final int flag = attrs.flags; if ((flag & WindowManager.LayoutParams.FLAG_HOMEKEY_DISPATCHED) != 0) { // the window wants to handle the home key, so dispatch it to it. return 0; } } ///end // First we always handle the home key here, so applications // can never break it, although if keyguard is on, we do let // it handle it, because that gives us the correct 5 second // timeout. if (keyCode == KeyEvent.KEYCODE_HOME) { ... }
疑问:为何把这个代码放下面?(4.0的时候还是起作用的。)
- android4.1 activity内屏蔽HOME按键功能
- Android4.0以后屏蔽以及HOME按键事件拦截
- 屏蔽HOME按键 ?
- Android 屏蔽 Home 按键
- 屏蔽Home按键
- Android屏蔽Home按键
- android4.0屏蔽home键
- android4.2 屏蔽home键
- android4.2 屏蔽home键
- android4.0 屏蔽home键
- Android4.3 屏蔽HOME按键返回桌面详解(源码环境下)
- Android4.3 屏蔽HOME按键返回桌面详解(源码环境下)
- Android4.3 屏蔽HOME按键返回桌面详解(源码环境下)
- Activity屏蔽Home键
- Android 按键屏蔽, Back, Home....
- Android5.1 屏蔽下拉框以及屏蔽HOME键功能
- android4.0屏蔽HOME键的方法
- android4.4中屏蔽home键
- 梁友栋-Barsky裁剪算法
- JBPM学习(3):管理流程实例
- python对中文路径/文件名的重命名
- Zen Coding css,html缩写替换大观 快速写出html,css
- javascript技巧-javascript深入理解js闭包
- android4.1 activity内屏蔽HOME按键功能
- 抽象的操作系统(十) --- 中间件(完)
- C语言字符串转换成日期
- ActionBarSherlock
- 自动识别文件编码
- hive文件存储格式
- 我自己的读书计划----期限一年
- Java新手入门的30个基本概念
- rhel上配置rsync