Android技术知识Android开发经验谈Android开发

按键响应onKeyDown,onKeyLongPress,onK

2018-05-29  本文已影响13人  YoungTa0

前言

有时候我们需要为按键区分长按,短按功能(虽然现在手机很少用按键,但是智能终端还是经常用到)。这时候就要对onKeyDown,onKeyLongPress,onKeyUp有深入的了解。

按键响应流程

当按下按键时,按键响应流程:
onKeyDown→onKeyLongPress→onKeyUp
如果只是短按功能实现,只需要在onKeyDown或者onKeyUp里实现就好了。
如果是要具备长按和短按功能,就需要重写onKeyDown,onKeyLongPress,onKeyUp。

长按功能实现

1.重写onKeyDown

添加一个Boolean值,用来在onKeyUp里响应长按还是短按事件
必须返回true事件才能到onKeyLongPress

    public boolean onKeyDown(int keyCode, KeyEvent event) {
        LoggerUtil.d("keyCode down:" + keyCode);
        switch (keyCode) {
            case KeyEvent.KEYCODE_MEDIA_NEXT:
                if (event.getRepeatCount() == 0) {
                    longPressNext = false;
                    event.startTracking();
                    //返回true才能到onKeyLongPress
                    return true;
                }
                break;           
             default:
                break;
        }
      return false;
    }
2.重写onKeyLongPress

必须返回true,事件才能到onKeyUp

   public boolean onKeyLongPress(int keyCode, KeyEvent event) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_MEDIA_NEXT:
                longPressNext = true;
                return true;
            default:
                break;
        }
        return super.onKeyLongPress(keyCode, event);
    }

3.重写onKeyUp

    public boolean onKeyUp(int keyCode, KeyEvent event) {
        LoggerUtil.d("keyCode up:" + keyCode);
        switch (keyCode) {
            case KeyEvent.KEYCODE_MEDIA_NEXT:
                if(!longPressNext){
                    LoggerUtil.d("onKeyDown KEYCODE_MEDIA_NEXT pressed--" + event.getRepeatCount());
                    bt_next.setBackgroundColor(Color.parseColor("#00FF00"));
                    if (isRecording || !isCanTouchOrPlay) {
                        return false;
                    }
                    Log.e("playList", "onKeyUp: " );
                    stopAsr(false);
                    if (isSleep) {
                        wakeUp();
                        initPlay();
                    }
                    next();
                }else {
                    Log.e("playList", "onKeyUp: "+"longPressNext"+playTypeIndex );
                    stopAsr(false);
                    AppApplication.mediaPlayer.pausePlay();
                    nextPlayList();
                    longPressNext = false;
                }
                break;
            default:
                break;
        }

        return super.onKeyUp(keyCode, event);
    }
上一篇下一篇

猜你喜欢

热点阅读