ドキュメントで推奨されているように、このsetvolume()
方法を使用して の音量を制御したいのMediaPlayer
ですが、その管理方法について少し混乱しています。
ストリームSeekBar
内の現在のボリュームに初期化されたを使用してボリュームを設定しています。AudioManager.STREAM_MUSIC
これは、ユーザーがデバイスのボリューム コントロールを変更しない場合には理にかなっていますが、変更した場合はどうすればよいかわかりません。いくつか疑問があります。
MediaPlayer
ボリュームはデバイスのボリュームとどのように関連していますか? に設定された最大値 (1) はsetVolume()
対応していますか?mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
その場合、
SeekBar
デバイスの音量コントロールが設定されるたびに の進行状況の値をリセットする必要がありますが、MediaPlayer.setVolume()
代わりにAudioManager.setStreamVolume()を使用する意味は何ですか?MediaPlayer.setVolume()
を使用する標準的な方法は何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) {
}
};