接管Android上的音量键

我想在Volume Up和Down上接受过量输入。 目前我的代码是:

@Override public boolean onKeyDown(int keyCode, KeyEvent event) { Log.v(TAG, event.toString()); if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN){ mLamp.moveBackward(); return false; } else if(keyCode == KeyEvent.KEYCODE_VOLUME_UP){ mLamp.moveForward(); return false; } return true; } public boolean onKeyUp(int keyCode, KeyEvent event) { Log.v(TAG, event.toString()); if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN){ return false; } else if(keyCode == KeyEvent.KEYCODE_VOLUME_UP){ return false; } return true; } 

这会触发mLamp.moveBackward()mLamp.moveForward()函数,但它仍会改变振铃器的音量。 我需要做什么才能使铃声响度不变?

如果您处理了该事件,则返回true 。 如果要允许事件由下一个接收者处理,则返回false

如果你处理了这个事件,那么返回true是很重要的,但是如果你没有处理这个事件,那么确保事件仍由超类处理是很​​好的。 这是我的应用程序中的一些代码:

 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_VOLUME_UP) { changeColor(keyCode); return true; } return super.onKeyDown(keyCode, event); } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_VOLUME_UP) { // do nothing return true; } return super.onKeyUp(keyCode, event); } 

在我的情况下,超类调用是必要的,以便我的设备上的其他硬件按钮继续工作。

 public boolean dispatchKeyEvent(KeyEvent event) { if (event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP) { return true; } else if (event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN) { return true; } return dispatchKeyEvent(event); }