按键响应onKeyDown,onKeyLongPress,onK

作者: YoungTa0 | 来源:发表于2018-05-29 20:28 被阅读13次

    前言

    有时候我们需要为按键区分长按,短按功能(虽然现在手机很少用按键,但是智能终端还是经常用到)。这时候就要对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);
        }
    

    相关文章

      网友评论

        本文标题:按键响应onKeyDown,onKeyLongPress,onK

        本文链接:https://www.haomeiwen.com/subject/qbaajftx.html