1

ユーザーが曲をスキップするために volumeUp ハードウェア ボタンを長押しし、短押しで通常の volumeUp アクションを実行できるようにしたいと考えています。

私は両方を区別することができます ( onKeyDown、onKeyLongPress、および onKeyUp の間のフラグを使用してこのソリューションを見つけました) が、ボリュームアップボタンが押されたときに標準/スーパーアクションを呼び出すことができるかどうか疑問に思っています。volumeUp アクションがいつ (onKeyDown または onKeyUp イベントで) 呼び出されているのか、どこで呼び出せばよいのかわかりません。

それとも、音量を変更する独自の関数を作成する必要がありますか?

ありがとう。

私のコード:

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

1 に答える 1

3

多分これがあなたを助けるでしょう見てください。

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);
    }
}
于 2013-02-19T13:52:43.637 に答える