Быстрое изменение громкости звука делает ошибку громкости

Я сделал панель поиска, чтобы изменить громкость музыки. Но когда я перетаскиваю его или меняю громкость с помощью системной панели поиска, звук становится диким.

Есть две вещи:

Если громкость меняется, я обновляю панель поиска с помощью 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-е решение: я отключил автоматическое обновление искателя

0 ответов

Другие вопросы по тегам