在我的活动中,我重写了dispatchKeyEvent(最终的KeyEvent事件)方法以获取KeyEvent.KEYCODE_VOLUME_UP和KeyEvent.KEYCODE_VOLUME_DOWN。我想要的是抓住长按,让系统处理短按(实际上是改变音量)。
如果你知道如何实现这样的行为,请停止阅读并回答问题,因为我的疑惑对你来说是无关紧要的:)
我发现,我想做的事情与系统如何实现音量变化之间存在联系。方法isLongPress()只能在KeyEvent.ACTION_DOWN上返回true,并且只在KeyEvent.ACTION_DOWN上更改卷。如果我们假设一秒钟的音量会在KeyEvent.ACTION_UP上改变,我可以用这种方式实现我想要的:
if (event.getAction() == KeyEvent.ACTION_UP) {
if (!event.isLongPress())
return super.dispatchKeyEvent(event);
else {
// handle long press here
return true;
}
} else {
return true;
}
但是这不会起作用,因为音量在ACTION_UP上没有变化......所以任何想法我如何实现这样的行为?