我有一个播放器应用程序,里面有音量控制的搜索栏。我使用这段代码:
@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);
}
});
}
...
}
答案 0 :(得分:1)
由于您正在使用onKeyDown()
函数中的键事件,因此未显示该对话框。因此,事件不会进一步传播,并且不显示音量对话框。
有一个简单的解决方案。在onKeyDown()
函数的documentation中,它表示您必须返回false
以防止事件被消耗。现在对话框将再次显示。
尽管如此,我认为您没有使用正确的方法来接收有关音量的信息。当音量对话框出现时,用户可以拖动其中的搜索栏并更改音量,这种更改不会反映在对onKeyDown()
功能的调用中。您可以使用AudioManager
及其getStreamVolume()
功能:
AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
答案 1 :(得分:0)
您需要设置一个标志(AudioManager.FLAG_SHOW_UI
)。 Here's a solution帮助了我。