根据文档的建议,我想使用该setvolume()
方法来控制我的音量MediaPlayer
,但我对如何管理它有点困惑。
我使用 , 设置音量SeekBar
,初始化为流中的当前音量AudioManager.STREAM_MUSIC
。
当用户不修改设备音量控制时,这是有道理的,但是当他这样做时,我不确定我应该做什么,并且我有几个疑问:
MediaPlayer
音量与设备音量有什么关系?设置的最大值(1)是否setVolume()
对应于mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
如果是这种情况,
SeekBar
每次设置设备音量控制时都应该重置进度值,但是,使用MediaPlayer.setVolume()
而不是AudioManager.setStreamVolume()有什么意义呢?MediaPlayer.setVolume()
使用a的标准方法是SeekBar
什么?
private final static int MAX_VOLUME = 100;
private AudioManager mAudioManager;
private SeekBar mVolumeControl;
mVolumeControl = (SeekBar) getActivity().findViewById(R.id.volume_control);
mAudioManager = (AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE);
mVolumeControl.setMax(MAX_VOLUME);
mVolumeControl.setProgress(MAX_VOLUME*mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC)/mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
mVolumeControl.setOnSeekBarChangeListener(mVolumeControlChangeListener);
private SeekBar.OnSeekBarChangeListener mVolumeControlChangeListener = new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
float volume = (float) (1 - (Math.log(MAX_VOLUME - progress) / Math.log(MAX_VOLUME)));
mediaPlayer.setVolume(volume, volume);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
};