如何再次显示音量更改android应用程序的对话框

时间:2012-10-12 23:34:22

标签: android

我有一个播放器应用程序,里面有音量控制的搜索栏。我使用这段代码:

@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中的音量对话框出了问题。当我按下硬件按钮时,它不再显示。我的意思是图片中的对话框:

enter image description here

我该怎么做才能修复它并像往常一样显示音量对话框?

修改

以下是我使用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);
             }
         });
     }
     ...
}

2 个答案:

答案 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帮助了我。