关于按键的响应

一般的按键响应的拦截时重载一个onkeydown就可以了,像menu键之类的,onkeydown分为activity级别和view级别的,view级别只有在activity不响应而且view被聚焦的时候响应,但是search和音量钮之类的比较特别了,需要别的拦截的方式的,search好像有个onsearchRequested(),

    //重载放大镜调用
    public boolean onSearchRequested() {

       //TODO

        return true;
    }

 

 

回到主题,像音量钮值的要在dispatchkeyevent的时候进行拦截,这样,那个系统的音量提示框就不会出现了,

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    int action = event.getAction();
    int keyCode = event.getKeyCode();
        switch (keyCode) {
        case KeyEvent.KEYCODE_VOLUME_UP:
            if (action == KeyEvent.ACTION_UP) {
                //TODO
            }
            return true;
        case KeyEvent.KEYCODE_VOLUME_DOWN:
            if (action == KeyEvent.ACTION_UP) {
                //TODO
            }
            return true;
        default:
            return super.dispatchKeyEvent(event);
        }
    }

 

后来发现弹出自己的dialog之后,音量钮的事件就接受不到了,原来被DialogInterface.OnKeyListener给没收了,所以要给自己的dialogsetkeylistener来继续处理事件(突然想起来dialog和activity是在同一个包下面的,而不是view在同一个包下面,有空要详细看看)

 

 

有些时候我们需要模拟一些按键的响应,可以直接调用onkeydown(keycode, keyevent),

还有一个方法是使用Instrumentation ,注意的是下面这两句不能再主线程中不调用

Instrumentation i = new Instrumentation();
i.sendKeyDownUpSync(KeyEvent.KEYCODE_A);

 

 

引用了的些资料来源于

http://stackoverflow.com/questions/2874743/android-volume-buttons-used-in-my-application

http://stackoverflow.com/questions/3830273/override-volume-key-in-android-in-pop-up-menus-notifications

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值