Быстрое изменение громкости звука делает ошибку громкости
Я сделал панель поиска, чтобы изменить громкость музыки. Но когда я перетаскиваю его или меняю громкость с помощью системной панели поиска, звук становится диким.
Есть две вещи:
Если громкость меняется, я обновляю панель поиска с помощью broadcastReceiver
mSeekBarVolume.setProgress(mVolume);
Если панель поиска я перетащил, я изменил громкость с помощью
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, 0);
Вот еще код:
final private BroadcastReceiver mVolumeReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
mVolume = (Integer) intent.getExtras().get("android.media.EXTRA_VOLUME_STREAM_VALUE");
mSeekBarVolume.setProgress(mVolume);
if (mVolume == 0) {
mSoundToggle.setImageResource(R.drawable.sound_off);
} else {
mSoundToggle.setImageResource(R.drawable.sound);
}
}
};
private void setVolume(int volume) {
if (mAudioManager == null) {
return;
}
mVolume = volume;
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, 0);
if (volume == 0) {
mSoundToggle.setImageResource(R.drawable.sound_off);
} else {
mSoundToggle.setImageResource(R.drawable.sound);
}
}
private void setupControlVolume() {
mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
mVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
mMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
mSeekBarVolume.setMax(mMaxVolume);
mSeekBarVolume.setProgress(mVolume);
mSeekBarVolume.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
setVolume(progress);
}
});
if (mVolume == 0) {
mSoundToggle.setImageResource(R.drawable.sound_off);
} else {
mSoundToggle.setImageResource(R.drawable.sound);
}
}
Что я делаю неправильно?
РЕДАКТИРОВАТЬ: я нашел, где проблема, но у меня нет реального решения
С одной стороны, у нас есть искатель, который обновляется при изменении звука системной музыки, с другой стороны, когда искатель перемещает, он обновляет звук системной музыки. Эти две операции мешают друг другу, и это создает вид бесконечного цикла.
1-е решение: я отключил автоматическое обновление искателя