gpt4 book ai didi

java - android onKeyDown onKeyUp 测量时间

转载 作者:行者123 更新时间:2023-12-01 13:18:41 29 4
gpt4 key购买 nike

我想测量用户按下音量增大按钮和释放它之间的时间(例如,如果用户按住音量增大按钮 2 秒,应用程序将执行某些操作,如果 4 秒,应用程序将执行不同的操作)。

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

    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;
}

不幸的是它不起作用(做某事没有执行)。当我深入分析它时(调试,添加显示 currentTime 和 lastVolumeUpPressingTime 之间差异的 toast),我发现了非常令人惊讶的事情。如果我很快地按下并释放音量按钮,我就会得到 ex 之间的区别。 100 毫秒。然而,当我按下并保持很长时间前。 2秒,我得到了差异。 20 毫秒。

出了点问题,但是为什么??????

最佳答案

由于某种原因,我不得不将代码放在我的dispatchKeyEvent方法中,而不是onKeyUp和onKeyDown中,但发生的情况是,当您按住音量按钮时,按键按下事件会被重复触发,因此您必须重置时间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;
}
}

请注意,我如何仅将 lastVolumeUpPressingDown 设置为零,并在发生按键事件时将其设置为零。

关于java - android onKeyDown onKeyUp 测量时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22234658/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com