在Android中更改媒体音量?

在Android中更改媒体音量?,android,audio,android-audiomanager,Android,Audio,Android Audiomanager,我可以更改媒体音量吗?怎么做?到目前为止,我使用了这个: setVolumeControlStream(AudioManager.STREAM_MUSIC); 但是有一个seekbar,想要改变媒体音量,而不是铃声音量 因此,有人能告诉我如何在onCreate()上更改媒体音量,我稍后再修复seekbar。使用adjustStreamVolume(AudioManager.STREAM\u MUSIC,AudioManager.ADJUST\u RAISE,flags) ,int,int)正确

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

setVolumeControlStream(AudioManager.STREAM_MUSIC);
但是有一个seekbar,想要改变媒体音量,而不是铃声音量


因此,有人能告诉我如何在
onCreate()
上更改媒体音量,我稍后再修复seekbar。

使用
adjustStreamVolume(AudioManager.STREAM\u MUSIC,AudioManager.ADJUST\u RAISE,flags)


,int,int)

正确的方法是在您的
AudioManager上使用。可能看起来像这样

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

audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
                             [int value],
                             [if desired a flag]);
该标志的一个示例用途是在设置音量时发出嘟嘟声,以便用户可以听到结果。该标志将是AudioManager.flag\u PLAY\u SOUND

如果您不想播放声音,但显示具有当前值的祝酒词,则可以使用AudioManager.FLAG\u SHOW\u UI
。使用必须获得反馈tho。不管是声音还是视觉

要获取给定流的最大有效值,只需在
AudioManager
上调用
getStreamMaxVolume()
,并返回一个表示以下内容的整数:。。。那么体积的最大有效值

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);
    }
}

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

您可以使用以下代码使用SeekBar处理音量:

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
    }
});

老实说,我不确定,但这是可能的标志列表:您也可以尝试给它一个数字,比如0,它不用于任何标志。这可能表示没有使用任何标志。0表示没有标志。1。我不想要任何声音,如果我删除标志,我会得到一个错误。键入[int value]时可能的值是多少?很抱歉,我继续按enter键,并认为我只是跳过一行而不是发布。这需要任何权限吗?嘿,我正在尝试在我的应用程序中创建一个静音和取消静音按钮。我想在进入应用程序之前将取消静音设置为用户音量。我试图使用您的解释,但遇到了一个问题:@wutzebaer No.但是有一个名为“修改音频设置”的权限,这有点奇怪…工作正常,但默认值应该是:返回super.onKeyDown(keyCode,event);否则您将丢失结束应用程序的后退键,例如非常正确。。。我可能也注意到了这一点,但在示例中排除了它,然后由于轨迹球的滚动问题而将其保留为false“此方法仅适用于取代全平台音频设置管理或主电话应用程序的应用程序。“@trgraglia:设置通过我的音频插槽连接的外部耳机的音量是否需要特殊的API调用?我也使用这种方法。由于某些原因,我无法从我的surface视图调用:-context.setVolumeControlStream(AudioManager.STREAM\u MUSIC)?我不能用“这个”来代替“上下文”,因为我不在活动中。。有什么提示吗?我只想让来电铃声静音,不播放视频。我如何解决这个问题,我和小米手机有问题……这是编程声音更改的实际可接受答案。