我想测量用户按下音量调高按钮并释放它之间的时间(例如,如果用户按住音量调高按钮 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;
}
不幸的是它不能正常工作(做某事没有执行)。当我深入分析它(调试,添加 toast 显示 currentTime 和 lastVolumeUpPressingTime 之间的差异)时,我发现了非常令人惊讶的事情。如果我很快按下并释放音量按钮,我就会得到 ex。100 毫秒。但是,当我按下并保持相当长的时间时。2秒,我得到了差异。20 毫秒。
有什么不对,但是为什么??????