该功能的实现逻辑是:在按下音量键后延时3秒执行一个线程,而该线程使用来发送广播,使广播接收者执行上一曲或者下一曲的功能;如果再这3秒内,用户已经弹起按键(不再长按音量键),则取消执行该线程。
修改该功能是在framework/base\policy\src\com\android\internal\policy\impl\PhoneWindowManager.java的interceptKeyBeforeQueueing()方法中修改的。以长按音量减键为例:
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
if (down) {
if (isScreenOn && !mVolumeDownKeyTriggered
&& (event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) {
mVolumeDownKeyTriggered = true;
mVolumeDownKeyTime = event.getDownTime();
mVolumeDownKeyConsumedByScreenshotChord = false;