53

我可以更改媒体音量吗?如何?到目前为止,我使用了这个:

setVolumeControlStream(AudioManager.STREAM_MUSIC);

但是有一个搜索栏并且想要更改媒体音量,而不是铃声音量。

所以有人可以告诉我如何改变媒体音量,onCreate()然后我会修复搜索栏。

4

5 回答 5

89

正确使用的方法是您的AudioManager. 它可能看起来像这样

AudioManager audioManager = 
    (AudioManager)getSystemService(Context.AUDIO_SERVICE);

audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
                             [int value],
                             [if desired a flag]);

该标志的一个示例用途是在设置音量时获得哔声,以便用户可以听到结果。标志是AudioManager.FLAG_PLAY_SOUND.

AudioManager.FLAG_SHOW_UI如果您不想播放声音但要使用当前值显示敬酒,则可以使用。使用必须得到反馈。不管是听觉的还是视觉的。

要获得给定流的最大有效值,您只需调用getStreamMaxVolume()AudioManager返回一个整数,它表示......以及音量的最大有效值。

于 2010-11-14T20:23:01.503 回答
37
private AudioManager audio;

在 onCreate 里面:

audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

覆盖 onKeyDown:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    switch (keyCode) {
    case KeyEvent.KEYCODE_VOLUME_UP:
        audio.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
        return true;
    case KeyEvent.KEYCODE_VOLUME_DOWN:
        audio.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);
        return true;
    default:
        // return false;
        // Update based on @Rene comment below:
        return super.onKeyDown(keyCode, event);
    }
}
于 2011-03-27T00:22:00.490 回答
9

您可以使用以下代码使用 SeekBar 来处理 Volume:

AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

SeekBar sbVolumeBooster = (SeekBar) findViewById(R.id.sbVolumeBooster);
sbVolumeBooster.setMax(audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)); 
sbVolumeBooster.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));  

sbVolumeBooster.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 can also be changed to AudioManager.FLAG_PLAY_SOUND
    }
});
于 2015-01-15T14:20:48.190 回答
4

在标志中给出 0 可避免获得视觉和音频指示符。当您实现自己的音频条和指示器并且您不希望 android 添加任何内容时,这很好。

于 2014-05-31T15:52:34.343 回答
1

采用adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, flags);

http://developer.android.com/reference/android/media/AudioManager.html#adjustStreamVolume(int , int, int)

于 2010-11-14T18:45:27.860 回答