在Android中更改媒体量?

car*_*erz 50 audio android android-audiomanager

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

setVolumeControlStream(AudioManager.STREAM_MUSIC);
Run Code Online (Sandbox Code Playgroud)

但是有一个搜索栏并希望改变媒体音量,而不是铃声音量.

那么有人可以告诉我如何只更改媒体音量,onCreate()然后我会修复搜索栏.

Oct*_*ean 85

正确的使用方法会被setStreamVolumeAudioManager.它可能看起来像这样

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

audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
                             [int value],
                             [if desired a flag]);
Run Code Online (Sandbox Code Playgroud)

标志的一个示例用法是在设置音量时发出蜂鸣声,以便用户可以听到结果.那个标志就是AudioManager.FLAG_PLAY_SOUND.

AudioManager.FLAG_SHOW_UI如果您不想播放声音但显示带有当前值的Toast,则可以使用.使用必须获得反馈.无论是听得见还是视觉无关紧要.

要获取最大的有效价值,为给定的流你只需要调用getStreamMaxVolume()AudioManager,并得到一个整数回到它代表了音量......嗯最大有效值.


trg*_*lia 38

private AudioManager audio;
Run Code Online (Sandbox Code Playgroud)

在onCreate里面:

audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
Run Code Online (Sandbox Code Playgroud)

覆盖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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • Works,但默认应该是:return super.onKeyDown(keyCode,event); 否则你会丢失后退键以结束应用程序,例如 (11认同)
  • 非常真实......我可能也抓住了它但是将它排除在示例之外,然后由于跟踪球的滚动问题而在那里保持虚假. (2认同)

Xar*_*mer 8

您可以使用以下代码使用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
    }
});
Run Code Online (Sandbox Code Playgroud)


小智 5

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