2

次のコードを使用して、ボリューム コントロール ボタンのイベントをキャプチャしました。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    int action = event.getAction();
    Log.i("Volume", "Volume " + keyCode + " " + action);
        AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        switch (keyCode) {
        case KeyEvent.KEYCODE_VOLUME_UP:
            if (action == KeyEvent.ACTION_DOWN) {
                audio.adjustStreamVolume(AudioManager.STREAM_VOICE_CALL, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
            }
            return true;
        case KeyEvent.KEYCODE_VOLUME_DOWN:
            if (action == KeyEvent.ACTION_DOWN) {
                audio.adjustStreamVolume(AudioManager.STREAM_VOICE_CALL, AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);
            }
            return true;
        default:
            return super.onKeyDown(keyCode, event);
        }
}

ただし、ボリュームバーのトーストが表示されている場合、トーストがなくなっていない限り、ボリュームボタンのプレスイベントはキャプチャされません。

解決策はありますか?

4

1 に答える 1

0

ボタンを押して音量を調整するだけのように見えるのでsetVolumeControlStream()、アクティビティを初期化するときに代わりに呼び出す必要がありますか?

開発者サイトから:

音量キーが押されたのを聞いて、その方法でオーディオ ストリームの音量を変更したくなるかもしれません。衝動に抵抗する。Android には便利な setVolumeControlStream() メソッドが用意されており、ボリューム キーの押下を指定したオーディオ ストリームに転送できます。

于 2012-08-23T13:38:16.940 に答える