Android 安卓onKeyLongPress

Android 安卓onKeyLongPress,android,volume,Android,Volume,我正在使用android音乐播放器,想用长按音量键跳过曲目。 我已经找到了一些实现,但是没有一个像我所希望的那样工作。 我想在长按时跳过歌曲,在短按时更改音量(正常行为)。 在所有教程/答案中,他们使用onKeyDown和onkeydongpress处理长按,但短按/正常按只记录在onkeydup中 @Override public boolean onKeyLongPress(int keyCode, KeyEvent event) { Log.d(TAG, "long pressed

我正在使用android音乐播放器,想用长按音量键跳过曲目。 我已经找到了一些实现,但是没有一个像我所希望的那样工作。 我想在长按时跳过歌曲,在短按时更改音量(正常行为)。 在所有教程/答案中,他们使用
onKeyDown
onkeydongpress
处理长按,但短按/正常按只记录在
onkeydup

@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

好的,我找到了一个解决方案。虽然不是最好的,但它很有效。
OnKeyDown
onkeydongpress
仍然相同,但是
onkeydup
现在是:

@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);
}

好的,我找到了一个解决方案。不是最好的,但它很有效。
OnKeyDown
onkeydongpress
仍然相同,但是
onkeydup
现在是:

@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);
}

您应该将您的解决方案作为答案发布并接受。我的解决方案是“编辑”下面的方框。我怎么能接受它?我是一个新手,不会将你的答案从你的问题中剪切粘贴到答案中,会有一个大的绿色复选标记来单击接受它。这样,任何搜索类似问题答案的人都可以看到这是从问题外部得到的答案。任何认为你的答案有用的人都可以upv注意,并给你一些声誉积分。:)你应该将你的解决方案作为答案发布并接受。我的解决方案是“编辑”下面的方框。我怎么能接受呢?我是一个新手,在你的问题和答案之间剪切粘贴你的解决方案,会有一个大的绿色复选标记点击它接受它。通过这种方式,任何寻找类似问题答案的人都可以看到,这是从问题之外得到的答案。此外,任何认为你的答案有用的人都可以投票给你,并给你一些声誉分数