Android:如何检测键盘按下和释放事件?

时间:2016-11-09 00:03:18

标签: android keyboard

根据android documentation,检测密钥释放应该如下:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    System.out.println("pressed");
    event.startTracking();
    return true;
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    System.out.println("released");
    return true;
}

但是在尝试实现它时,它无法按预期工作。

我需要检测何时按下蓝牙键盘的按键,并在发生这种情况时只接收一次对onKeyDown的调用,并检测何时释放相同的按键。我做错了什么,或者有没有其他办法可以得到这个想要的结果?

当按住任何键时,我会在控制台上重复这个:

I/System.out: pressed
I/System.out: released
I/System.out: pressed
I/System.out: released
I/System.out: pressed
I/System.out: released
I/System.out: pressed
I/System.out: released

感谢。

1 个答案:

答案 0 :(得分:0)

Use OnTouchListener instead of OnClickListener:

// this goes somewhere in your class:
  long lastDown;
  long lastDuration;

  ...

  // this goes wherever you setup your button listener:
  button.setOnTouchListener(new OnTouchListener() {
     @Override
     public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN) {
           lastDown = System.currentTimeMillis();
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
           lastDuration = System.currentTimeMillis() - lastDown;
        }
     }`enter code here`
  });