按一次,是正常的音量增减
按住不放,是长按事件
也是调用onKeyDown、onKeyLongPress、onKeyUp
1、onKeyDown区分长按还是短按,不做具体事件
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
case KeyEvent.KEYCODE_VOLUME_DOWN:
if (event.getAction() == KeyEvent.ACTION_DOWN) {
event.startTracking();
if (event.getRepeatCount() == 0) {
shortPress = true;
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
2.onKeyUp在这里做短按时候的正常音量加减
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
case KeyEvent.KEYCODE_VOLUME_DOWN:
if (shortPress){
switch (keyCode){
case KeyEvent.KEYCODE_VOLUME_DOWN:
audioManager.adjustStreamVolume(
AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_LOWER,
AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI);
return true;
case KeyEvent.KEYCODE_VOLUME_UP:
audioManager.adjustStreamVolume(
AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_RAISE,
AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI);
return true;
}
}else {
// TODO 长按释放事件
//Don't handle longpress here, because the user will have to get his finger back up first
}
shortPress = false;
return true;
}
return super.onKeyUp(keyCode, event);
}
3、onKeyLongPress 做长按按下去的事件
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
case KeyEvent.KEYCODE_VOLUME_DOWN:
shortPress = false;
return true;
}
return false; //在这里也可以用超级调用,因为总是返回的是false;
}
短按是在松开之后进行判断,如果按下马上释放即是短按,在keyup处理短按事件,长按释放事件也是在这里做;如果按住不放,就是长按,在onKeyLongPress处理长按事件