Android 拦截Home键的常用方法
来源:互联网 发布:java split函数 多个 编辑:程序博客网 时间:2024/05/18 03:00
我们平时在Android开发中,很多时候逻辑是需要屏蔽Home键的,一般情况下分为Activity的屏蔽Home键和非Activity的屏蔽。
一:Activity屏蔽Home按键的方法
第一种方法:重写onKeyDown
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_HOME){ //屏蔽之后的操作 return true; } return super.onKeyDown(keyCode, event);}
这样写大家会发现其实是不能拦截的,这里屏蔽Home键是捕捉不到的,因为大家的权限一般是User所以是无效的。而其实android处理Home键等系统级按键是有一定的处理的。
有兴趣的可以看一下源码的分析:\frameworks\policies\base\phone\com\android\internal\policy\impl\PhoneWindowManager.java
通过源码我们可以看出,屏蔽Home键需要一个参数。也就是需要在onCreate()的方法里面加上这样一句:getWindow().addPrivateFlags(WindowManager.LayoutParams.PRIVATE_FLAG_HOMEKEY_DISPATCHED);
这样的话就能够顺利的把Home按键拦截了。
第二种方法:监听Home按键的广播
首先需要在onCreate()里面注册广播:
registerReceiver(mHomeKeyEventReceiver, new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));然后监听mHomeKeyEventReceiver这个广播:
private BroadcastReceiver mHomeKeyEventReceiver = new BroadcastReceiver() {String SYSTEM_REASON = "reason";String SYSTEM_HOME_KEY = "homekey";String SYSTEM_HOME_KEY_LONG = "recentapps";@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) { // 监听home键String reason = intent.getStringExtra(SYSTEM_REASON);// 表示按了home键,程序到了后台} }};
这种方法同样也能屏蔽拦截Home按键
二:Dialog屏蔽Home按键的方法
屏蔽Dialog的Home按键我们一般会这样处理:
final Dialog dialog = new Dialog(this); dialog.setContentView(R.layout.mydailog); dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); dialog.show(); dialog.setOnKeyListener(new android.content.DialogInterface.OnKeyListener(){ @Override public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_HOME: //相关操作 return true; } return false; } });但是这样写运行后会报错:
10-18 13:27:06.380: ERROR/AndroidRuntime(4684): Caused by: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRoot$W@2b046d68 -- permission denied for this window type其实,原理是一样的,只需要把dialog.getWindow().setType的位置放在show后面就可以了
dialog.show(); dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
这样就完成了Home按键的屏蔽。
0 2
- Android 拦截Home键的常用方法
- Android Home键拦截
- Android中Home键的监听和拦截
- Android中Home键的监听和拦截
- Android中Home键的监听和拦截
- Android拦截HOME按键
- Android 拦截 HOME 按键
- android 4.0 拦截Home
- android home按键拦截
- android捕获Home键的方法
- android屏蔽HOME键的方法
- android监听home键的方法
- android处理home键的方法
- Android监听home键的方法
- 让你的程序拦截home键
- android+捕获home键方法
- android+捕获home键方法
- android+捕获home键方法
- 子线程操作malloc内存
- VC6.0蕉HOOK_timeGetTime 达到变速效果
- Android基础--简单介绍Application
- 数据库损坏解决:数据库已损坏,无法分配空间
- 项目中tld文件使用
- Android 拦截Home键的常用方法
- 动态库和静态库的区别
- 小白进阶之贪心算法VS动态规划
- java jar 打包命令
- hdu4940Destroy Transportation system【无源汇点有上下流限制的网络流】2014多校联合
- redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resourc
- mysql正则
- scrollview嵌套gridview显示不全解决办法
- Java-解压和打包Jar