Android onKeyLongPress

时间:2012-11-03 19:22:59

标签: android volume

我正在开发一款Android音乐播放器,想要使用长按音量键跳过曲目。 我找到了一些实现,但没有一个像我想要的那样工作。 我想在长按时跳过歌曲并在短按时改变音量(正常行为)。 在所有教程/答案中,他们使用onKeyDownonKeyLongPress进行长按,但短/普通按下仅记录在onKeyUp

@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
    Log.d(TAG, "long pressed");
    switch(keyCode){
    case KeyEvent.KEYCODE_VOLUME_UP:
        songNumber++;
        playSong(songs.get(songNumber));
        return true;
    case KeyEvent.KEYCODE_VOLUME_DOWN:
        songNumber--;
        playSong(songs.get(songNumber));
        return true;
    }
    return super.onKeyLongPress(keyCode, event);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    switch(keyCode){
    case KeyEvent.KEYCODE_VOLUME_UP:
        event.startTracking();
        return true;
    case KeyEvent.KEYCODE_VOLUME_DOWN:
        event.startTracking();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    switch(keyCode){
    case KeyEvent.KEYCODE_VOLUME_UP:
        return true;
    case KeyEvent.KEYCODE_VOLUME_DOWN:
        return true;
    }
    return super.onKeyUp(keyCode, event);
}

这是我的代码,但有了这个我只能跳过歌曲,短按没有效果。所以我只有一个音量级别:(

我不知道现在该尝试什么。感谢帮助。 谢谢!

-v1r0x

1 个答案:

答案 0 :(得分:1)

好的,我找到了解决方案。不是最好的,但它的确有效。 OnKeyDownOnKeyLongPress仍然相同,但OnKeyUp现在就是这样:

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if(!event.isCanceled()){
        switch(keyCode){
        case KeyEvent.KEYCODE_VOLUME_UP:
            audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
            break;
        case KeyEvent.KEYCODE_VOLUME_DOWN:
            audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);
            break;
        }
    }
    return super.onKeyUp(keyCode, event);
}