onkeydown事件的拦截
来源:互联网 发布:安卓直播app源码 编辑:程序博客网 时间:2024/06/10 20:37
android的按键事件是可以拦截,并自己处理的;
一般重写onkeydwon事件就行了;
@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {switch (keyCode) {case KeyEvent.KEYCODE_VOLUME_UP:// 增大音量//audioManagerM.adjustStreamVolume(AudioManager.STREAM_MUSIC,//AudioManager.ADJUST_RAISE, AudioManager.FLAG_PLAY_SOUND//| AudioManager.FLAG_SHOW_UI);audioManagerC.adjustStreamVolume(AudioManager.STREAM_VOICE_CALL,AudioManager.ADJUST_RAISE, AudioManager.FLAG_PLAY_SOUND| AudioManager.FLAG_SHOW_UI);break;case KeyEvent.KEYCODE_VOLUME_DOWN:// 减小音量//audioManagerM.adjustStreamVolume(AudioManager.STREAM_MUSIC,//AudioManager.ADJUST_LOWER, AudioManager.FLAG_PLAY_SOUND//| AudioManager.FLAG_SHOW_UI);audioManagerC.adjustStreamVolume(AudioManager.STREAM_VOICE_CALL,AudioManager.ADJUST_LOWER, AudioManager.FLAG_PLAY_SOUND| AudioManager.FLAG_SHOW_UI);break;case KeyEvent.KEYCODE_BACK:// 再按一次退出// 判断是否点了一次后退if (isPressedBackOnce) {// 已经点了一次,这是第二次// 判断一下跟上一次点击的时间间隔,如果大于2秒,再谈一次吐司,小于2秒 直接finishsecondTime = System.currentTimeMillis();if (secondTime - firstTime > 2000) {// 第一次点击ToastUtil.showToast(this, "再点一次退出");isPressedBackOnce = true;firstTime = System.currentTimeMillis();} else {if (!BaseApplication.getInstance().getParam(Params.IS_INDIVIDUAL_CALLING, false)) {// 在2秒之内点击第二次finish();// finish完成之后当前进程依然在isPressedBackOnce = false;firstTime = 0;secondTime = 0;}}} else {// 第一次点击ToastUtil.showToast(this, "再点一次退出");isPressedBackOnce = true;firstTime = System.currentTimeMillis();}break;case KeyEvent.KEYCODE_HEADSETHOOK:break;default:return super.onKeyDown(keyCode, event);}// 为true,则其它后台按键处理再也无法处理到该按键,为false,则其它后台按键处理可以继续处理该按键事件return true;}
但如果现在的需求是,按手机侧面的上下键,而做其他的事情,不让其进行音量调节,要怎样做呢?
这就需要用到这个方法了:dispatchKeyEvent();从名字就可看出,是来对按键进行事件分发的;只要让他分发上下键时返回true,自己消费掉,就不会去调节音量了;
@Overridepublic boolean dispatchKeyEvent(KeyEvent event) {switch (event.getKeyCode()) {case KeyEvent.KEYCODE_VOLUME_UP:// 增大音量 switch (event.getAction()) { case KeyEvent.ACTION_DOWN://获取到按音量上键的down事件 break; case KeyEvent.ACTION_UP://获取到按音量上键的up事件downTimes = 0;break;return true;case KeyEvent.KEYCODE_VOLUME_DOWN:// 减小音量return true;}return super.dispatchKeyEvent(event);//其他按键可以直接分发出去,按原来逻辑处理就行。}
可以看到不仅可以拦截音量上下键事件;而且可以拿到物理按键的down、up等事件;进一步做具体的事情;
音量上下键可以如上来做,但电源键是不能拦截的。
0 0
- onkeydown事件的拦截
- js的onkeydown事件
- 在有TabHost控件的页面,解决onKeyDown方法不能拦截KeyEvent.KEYCODE_BACK事件
- 在有TabHost控件的页面,解决onKeyDown方法不能拦截KeyEvent.KEYCODE_BACK事件
- onTouchEvent onKeyDown事件的处理
- onkeydown事件
- onkeydown事件
- Android dispatchKeyEvent和onKeyDown事件的处理
- 输入框的onkeydown onkeypress onkeyup事件
- cocos2d-x编译安卓版 的 onkeydown 事件
- android中onKeyDown()事件的分析
- android 中OnKeyDown的事件获取顺序
- onkeyup,onkeydown,onkeypress事件
- android onkeydown 事件
- Android onKeydown 事件
- onkeydown事件实例应用
- Android系统onKeyDown事件
- 安卓onKeyDown事件
- 二叉树-详解平衡二叉排序树AVL
- MediaPlayer
- java.lang.String cannot be cast to com.alibaba.fastjson.JSONObject
- OpenCV自带方法遍历目录下文件
- 企业常用框架Springmvc_基于注解+xml配置方式实现
- onkeydown事件的拦截
- linux编辑命令快捷键
- Kafka vs RocketMQ ——消息及时性对比
- 复杂可编程逻辑器件CPLD
- linux fedora 24 gnome terminal 启动 network gui
- jquery实现表格的多行删除
- BIT_打印正方形
- Linux电源管理-Suspend/Resume流程
- 基于laravel框架的antvel 在迁移数据数据出错