如何赶上Longpress并在KEYCODE_VOLUME_UP上调用标准操作? [英] How to catch Longpress and call the standard action on KEYCODE_VOLUME_UP?
问题描述
我希望用户能够长按volumeUp硬件按钮以跳过一首歌曲,并在短按时执行常规的volumeUp操作.
I want the users to be able to longpress the volumeUp hardware button for skipping a song, and do the regular volumeUp action on a short press.
我能够区分两者(我找到了此解决方案,并使用了onKeyDown,onKeyLongPress和onKeyUp之间的标志),但我想知道在按下提高音量按钮后是否还能调用标准/超级动作. 我似乎无法弄清楚何时调用了volumeUp动作(在onKeyDown-或onKeyUp-event中)以及在何处调用它.
I'm able to differentiate between both (I found this solution, working with flags between onKeyDown, onKeyLongPress and onKeyUp) but I'm wondering if I can still call the standard/super action when the volume up button has been pressed. I can't seem to figure out when the volumeUp action is being called (in the onKeyDown- or onKeyUp-event) and where to call it.
还是我应该编写自己的函数来更改音量?
Or should I just write my own function to change the volume?
谢谢.
我的代码:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
event.startTracking();
if (bLong) {
bShort = false;
return true;
} else {
bShort = true;
bLong = false;
return true;
}
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
if (bShort) {
bShort = false;
bLong = false;
if (mp != null) {
//HERE IS WHERE I WANT TO CALL THE VOLUME-UP ACTION
}
return true;
}
}
return super.onKeyUp(keyCode, event);
}
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
if (bRunning && mp != null) {
playNextSong();
}
bShort = false;
bLong = false;
return true;
}
return super.onKeyLongPress(keyCode, event);
}
推荐答案
看看也许会对您有所帮助.
Take a look maybe this gonna help you.
public boolean dispatchKeyEvent(KeyEvent event) {
int action = event.getAction();
int keyCode = event.getKeyCode();
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
if (action == KeyEvent.ACTION_DOWN && event.isLongPress()) {
//(skipping a song)
}
if (action == KeyEvent.ACTION_UP) {
//(vol up)
}
return true;
case KeyEvent.KEYCODE_VOLUME_DOWN:
if (action == KeyEvent.ACTION_UP)
return true;
default:
return super.dispatchKeyEvent(event);
}
}
这篇关于如何赶上Longpress并在KEYCODE_VOLUME_UP上调用标准操作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!