0

内部にボリューム コントロール用のシークバーを備えたプレーヤー アプリがあります。私はこのコードを使用します:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) 
    { 
        int index = volumeSeekbar.getProgress(); 
        volumeSeekbar.setProgress(index + 1); 
        return true; 
    } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
        int index = volumeSeekbar.getProgress(); 
        volumeSeekbar.setProgress(index - 1); 
        return true; 
    }
    return super.onKeyDown(keyCode, event); 
}

コードはうまく機能します。ハードウェアのボリューム コントロールの下/上ボタンを押すと、シークバーが移動します。しかし今、Android の音量ダイアログに問題があります。ハードウェア ボタンを押しても表示されなくなりました。写真のダイアログを意味します:

ここに画像の説明を入力

それを修正して通常どおり音量ダイアログを表示するにはどうすればよいですか?

編集:

を使用するための私のコードは次のAudioManagerとおりです。

 private void initControls() {
     try {
         volumeSeekbar = (SeekBar)findViewById(R.id.seekBar1);
         audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
         volumeSeekbar.setMax(audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
         volumeSeekbar.setProgress(audioManager
                               .getStreamVolume(AudioManager.STREAM_MUSIC));   

         volumeSeekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
             @Override
             public void onStopTrackingTouch(SeekBar arg0) {}

             @Override
             public void onStartTrackingTouch(SeekBar arg0) {}

             @Override
             public void onProgressChanged(SeekBar arg0, int progress, boolean arg2) {
                 audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
             }
         });
     }
     ...
}
4

2 に答える 2

1

関数でキーイベントを使用しているため、ダイアログは表示されませんonKeyDown()。したがって、イベントはそれ以上伝播されず、ボリュームダイアログは表示されません。

これには簡単な解決策があります。関数のドキュメントには、イベントが消費されないようにするためonKeyDown()に戻る必要があると記載されています。falseこれで、ダイアログが再び表示されます。

それにもかかわらず、ボリュームに関する情報を受け取るために正しいアプローチを使用しているとは思いません。音量ダイアログが表示されたら、ユーザーはその中のシークバーをドラッグして音量を変更できます。そのような変更はonKeyDown()関数の呼び出しには反映されません。あなたは利用することができAudioManager、そのgetStreamVolume()機能:

AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
于 2012-10-13T01:38:34.657 に答える
0

フラグ ( ) を設定する必要がありますAudioManager.FLAG_SHOW_UI。 これが私を助けた解決策です。

于 2014-04-22T03:41:51.550 に答える