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 回答