在Android上接管音量键
我想在音量上下转换输入。目前我的代码是:在Android上接管音量键,android,Android,我想在音量上下转换输入。目前我的代码是: @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
@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);
}
在我的情况下,超类调用是必要的,这样我的设备上的其他硬件按钮就可以继续工作。简单有效的回答。应该是这样的。谢谢。vod23的答案对于保持其他按钮正常工作至关重要。您的最后一行将递归调用导致stackoverflow或ANR的方法,以先发生的为准。最后一行应该调用超类的方法,而不是它本身。
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);
}