Als recommended by the doc, würde Ich mag die setvolume()
Methode verwenden, um die Lautstärke meiner MediaPlayer
zu kontrollieren, aber ich bin ein wenig verwirrt darüber, wie man verwalte es.Wie MediaPlayer.setVolume() + SeekBar verwalten it + Gerät Lautstärkeregler einstellen
Ich setze die Lautstärke mit einem SeekBar
, initialisiert auf das aktuelle Volumen im AudioManager.STREAM_MUSIC
Stream.
Dies macht Sinn, wenn der Benutzer das Gerät nicht Lautstärkeregler nicht ändern, aber wenn er es tut, ich bin nicht sicher, was ich tun soll, und ich habe mehrere Zweifel:
wie ist die
MediaPlayer
Lautstärke bezogen auf das Gerät Volumen? Ist der Maximalwert (1), die insetVolume()
entsprechenmAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
wenn es der Fall ist, sollte der Fortschritt Wert des
SeekBar
zurückgesetzt werden jedes Mal das Gerät Lautstärkeregler eingestellt ist, aber dann, was ist der Sinn der Verwendung vonMediaPlayer.setVolume()
anstelle von AudioManager.setStreamVolume()?Wie lautet die Standardmethode
MediaPlayer.setVolume()
mitSeekBar
zu verwenden?
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) {
}
};
Wie Sie gelöst? – Erum