android 音量键按一次和长按事件区分

按一次,是正常的音量增减
按住不放,是长按事件
也是调用onKeyDown、onKeyLongPress、onKeyUp

1、onKeyDown区分长按还是短按,不做具体事件

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_VOLUME_UP:
            case KeyEvent.KEYCODE_VOLUME_DOWN:
                if (event.getAction() == KeyEvent.ACTION_DOWN) {
                    event.startTracking();
                    if (event.getRepeatCount() == 0) {
                        shortPress = true;
                    }
                    return true;
                }
        }
        return super.onKeyDown(keyCode, event);
    }    

2.onKeyUp在这里做短按时候的正常音量加减

 @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
        switch (keyCode) {
            case KeyEvent.KEYCODE_VOLUME_UP:
            case KeyEvent.KEYCODE_VOLUME_DOWN:
                if (shortPress){
                    switch (keyCode){
                        case KeyEvent.KEYCODE_VOLUME_DOWN:
                            audioManager.adjustStreamVolume(
                                    AudioManager.STREAM_MUSIC,
                                    AudioManager.ADJUST_LOWER,
                                    AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI);
                            return true;
                        case KeyEvent.KEYCODE_VOLUME_UP:
                            audioManager.adjustStreamVolume(
                                    AudioManager.STREAM_MUSIC,
                                    AudioManager.ADJUST_RAISE,
                                    AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI);
                            return true;
                    }
                }else {
                    // TODO 长按释放事件
                    //Don't handle longpress here, because the user will have to get his finger back up first
                }
                shortPress = false;
                return true;

        }
        return super.onKeyUp(keyCode, event);
    }

3、onKeyLongPress 做长按按下去的事件

 @Override
    public boolean onKeyLongPress(int keyCode, KeyEvent event) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_VOLUME_UP:
            case KeyEvent.KEYCODE_VOLUME_DOWN:
                shortPress = false;
                return true;
        }
        return false;  //在这里也可以用超级调用,因为总是返回的是false;
    }

短按是在松开之后进行判断,如果按下马上释放即是短按,在keyup处理短按事件,长按释放事件也是在这里做;如果按住不放,就是长按,在onKeyLongPress处理长按事件

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值