我可以更改媒体音量吗?如何更改?到目前为止,我使用了这个:
setVolumeControlStream(AudioManager.STREAM_MUSIC);
我有一个进度条,并想改变媒体音量,而不是铃声音量。
所以,有人能向我展示如何在onCreate()
中仅更改媒体音量,然后我稍后再修复进度条吗?
我可以更改媒体音量吗?如何更改?到目前为止,我使用了这个:
setVolumeControlStream(AudioManager.STREAM_MUSIC);
我有一个进度条,并想改变媒体音量,而不是铃声音量。
所以,有人能向我展示如何在onCreate()
中仅更改媒体音量,然后我稍后再修复进度条吗?
正确使用的方法是在您的AudioManager
上使用setStreamVolume。代码示例如下:
AudioManager audioManager =
(AudioManager)getSystemService(Context.AUDIO_SERVICE);
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
[int value],
[if desired a flag]);
一个示例使用该标志的方法是在设置音量时获取蜂鸣声,以便用户可以听到结果。对应的标志是AudioManager.FLAG_PLAY_SOUND
。
如果你不想播放声音而是要显示当前值的toast,则可以使用AudioManager.FLAG_SHOW_UI
标志。使用者必须得到反馈,无论是听觉还是视觉。
要获取给定流的最大有效值,只需在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);
}
}
adjustStreamVolume
和其他方法的文档中指出:“此方法仅适用于替换音频设置的平台范围管理或主要电话应用程序的应用程序。” https://developer.android.com/reference/android/media/AudioManager.html#adjustStreamVolume(int,%20int,%20int) - TalkLittle您可以使用以下代码来使用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可以避免获得视觉和音频指示器。当您实现自己的音频条和指示器时,这是很好的选择,因为您不希望Android添加任何内容。
使用 adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, flags);
http://developer.android.com/reference/android/media/AudioManager.html#adjustStreamVolume(int, int, int)