Java android onKeyDown onKeyUp测量时间

Java android onKeyDown onKeyUp测量时间,java,android,android-keypad,android-keystore,java-time,Java,Android,Android Keypad,Android Keystore,Java Time,我想测量用户按下音量增大按钮和释放按钮之间的时间(例如,如果用户保持音量增大按钮按下2秒,应用程序将做一些事情,如果4秒,应用程序将做一些不同的事情) 乍一看,这似乎是件很容易的事。为了控制我的活动代码中包含以下部分: public final static long MINIMUM_VOLUME_UP_PRESSING_TO_ACTIVATE_DEACTIVATE=2000; public final static long MAXIMUMT_VOLUME_UP_PRESSI

我想测量用户按下音量增大按钮和释放按钮之间的时间(例如,如果用户保持音量增大按钮按下2秒,应用程序将做一些事情,如果4秒,应用程序将做一些不同的事情)

乍一看,这似乎是件很容易的事。为了控制我的活动代码中包含以下部分:

    public final static long MINIMUM_VOLUME_UP_PRESSING_TO_ACTIVATE_DEACTIVATE=2000;

    public final static long MAXIMUMT_VOLUME_UP_PRESSING_TO_ACTIVATE_DEACTIVATE=5000;

    public boolean onKeyDown (int keyCode, KeyEvent event) {
               switch (keyCode) {
                  case KeyEvent.KEYCODE_VOLUME_UP:
                  lastVolumeUpPressingDown=System.currentTimeMillis();
                  return true;  
               }
               return false;
            }

   public boolean onKeyUp(int keyCode, KeyEvent event) {
               long currentTime = System.currentTimeMillis();
               switch (keyCode) {
                  case KeyEvent.KEYCODE_VOLUME_UP:
                     if ((currentTime-lastVolumeUpPressingDown>=MINIMUM_VOLUME_UP_PRESSING_TO_ACTIVATE_DEACTIVATE) &&
                (currentTime-lastVolumeUpPressingDown<=MAXIMUMT_VOLUME_UP_PRESSING_TO_ACTIVATE_DEACTIVATE)) {
                                    , 
                    do something
                    return true;
                    }
                return false;
            }
public final static long MINIMUM\u VOLUME\u UP\u按\u启动\u停用=2000;
公共最终静态长最大音量向上按激活或停用=5000;
公共布尔onKeyDown(int-keyCode,KeyEvent事件){
开关(钥匙代码){
case KeyEvent.KEYCODE\u音量\u增大:
lastVolumeUpPressingDown=System.currentTimeMillis();
返回true;
}
返回false;
}
公共布尔onKeyUp(int-keyCode,KeyEvent事件){
长currentTime=System.currentTimeMillis();
开关(钥匙代码){
case KeyEvent.KEYCODE\u音量\u增大:
如果((currentTime lastVolumeUpPressingDown>=最小音量向上\u按以\u激活\u停用)&&

(currentTime LastVolumeAppressingDown出于某种原因,我不得不将代码放在dispatchKeyEvent方法中,而不是放在onKeyUp和onKeyDown中,但是发生的是,当您按住音量按钮时,会反复触发KeyDown事件,因此您只需重置onKeyUp中的时间。希望您能从我的代码中了解这一点

else if(event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP  && event.getAction() == KeyEvent.ACTION_DOWN){
        if(lastVolumeUpPressingDown == 0){
        lastVolumeUpPressingDown=System.currentTimeMillis();
        Log.d(LOG_TAG,"Pressing down at " + lastVolumeUpPressingDown);
        }
        return true;
    }
    else if(event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP && event.getAction() == KeyEvent.ACTION_UP){
        long currentTime = System.currentTimeMillis();
        Log.d(LOG_TAG,"Releasing at " + currentTime);
        long diff = currentTime - lastVolumeUpPressingDown;
        lastVolumeUpPressingDown = 0;
        Log.d(LOG_TAG,"Button press lasted " + diff + " ms");
        if ((diff>=MINIMUM_VOLUME_UP_PRESSING_TO_ACTIVATE_DEACTIVATE) &&
                (diff<=MAXIMUMT_VOLUME_UP_PRESSING_TO_ACTIVATE_DEACTIVATE)) {
            Log.d(LOG_TAG,"Good enough, I would like to do something");
            return true;
        }
    }
else if(event.getKeyCode()==KeyEvent.KEYCODE\u VOLUME\u UP&&event.getAction()==KeyEvent.ACTION\u DOWN){
如果(LastVolumeAppressingDown==0){
lastVolumeUpPressingDown=System.currentTimeMillis();
Log.d(Log_标签,在“+lastVolumeUpPressingDown”处按下);
}
返回true;
}
else if(event.getKeyCode()==KeyEvent.KEYCODE\u VOLUME\u UP&&event.getAction()==KeyEvent.ACTION\u UP){
长currentTime=System.currentTimeMillis();
日志d(日志标签,“在“+当前时间释放”);
long diff=当前时间-最后一个卷压缩时间;
lastVolumeUpPressingDown=0;
日志d(日志标签,“按钮按下持续”+diff+“ms”);
如果((差异>=最小音量向上按以激活或停用)&&
(差别