Equalizer stops 10 seconds after exiting the fragment

158 Views Asked by At

I am a beginner in the world of programming, and now I am working on developing an audio player by adding an equalizer, but I encountered a problem, which is after 10 seconds of pressing the back button and exiting the fragment, the equalizer stops and does not work until after opening the page again. Also, when playing another audio, the equalizer stops and does not work until the fragment is opened again. I have tried to fix it but to no avail, Plz Help..

public class MainActivityEqualizer extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main_equalizer);
            loadEqualizerSettings();
    
            final int sessionId = MyConstants.exoPlayer.getAudioSessionId();
            EqualizerFragment equalizerFragment = EqualizerFragment.newBuilder()
                    .setAccentColor(Color.parseColor("#4caf50"))
                    .setAudioSessionId(sessionId)
                    .build();
            getSupportFragmentManager().beginTransaction()
                    .replace(R.id.eqFrame, equalizerFragment)
                    .commit();
        }
        public void newBuild()
        {
            final int sessionId = MyConstants.exoPlayer.getAudioSessionId();
            EqualizerFragment equalizerFragment = EqualizerFragment.newBuilder()
                    .setAccentColor(Color.parseColor("#4caf50"))
                    .setAudioSessionId(sessionId)
                    .build();
            getSupportFragmentManager().beginTransaction()
                    .replace(R.id.eqFrame, equalizerFragment)
                    .commit();
        }
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.main_menu, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            if (item.getItemId() == R.id.itemEqDialog) {
                showInDialog();
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
        @Override
        protected void onStop() {
            super.onStop();
    
            saveEqualizerSettings();
        }
    
    
        @Override
        protected void onPause() {
    
            try {
                newBuild();
                //mediaPlayer.pause();
            } catch (Exception ex) {
                Toast.makeText(MainActivityEqualizer.this,ex+"",Toast.LENGTH_LONG).show();
                //ignore
            }
            super.onPause();
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            newBuild();
            try {
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        //loadEqualizerSettings();
                        //mediaPlayer.start();
                    }
                }, 200);
            } catch (Exception ex) {
                //ignore
            }
        }
    
    
        private void showInDialog() {
            int sessionId = MyConstants.exoPlayer.getAudioSessionId();
            if (sessionId > 0) {
                DialogEqualizerFragment fragment = DialogEqualizerFragment.newBuilder()
                        .setAudioSessionId(sessionId)
                        .title(R.string.app_name)
                        .themeColor(ContextCompat.getColor(this, R.color.primaryColor))
                        .textColor(ContextCompat.getColor(this, R.color.textColor))
                        .accentAlpha(ContextCompat.getColor(this, R.color.playingCardColor))
                        .darkColor(ContextCompat.getColor(this, R.color.primaryDarkColor))
                        .setAccentColor(ContextCompat.getColor(this, R.color.secondaryColor))
                        .build();
                fragment.show(getSupportFragmentManager(), "eq");
            }
        }
        private void saveEqualizerSettings(){
            if (Settings.equalizerModel != null){
                EqualizerSettings settings = new EqualizerSettings();
                settings.bassStrength = Settings.equalizerModel.getBassStrength();
                settings.presetPos = Settings.equalizerModel.getPresetPos();
                settings.reverbPreset = Settings.equalizerModel.getReverbPreset();
                settings.seekbarpos = Settings.equalizerModel.getSeekbarpos();
    
                SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
    
                Gson gson = new Gson();
                preferences.edit()
                        .putString(PREF_KEY, gson.toJson(settings))
                        .apply();
            }
        }
        private void loadEqualizerSettings(){
            SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
    
            Gson gson = new Gson();
            EqualizerSettings settings = gson.fromJson(preferences.getString(PREF_KEY, "{}"), EqualizerSettings.class);
            EqualizerModel model = new EqualizerModel();
            model.setBassStrength(settings.bassStrength);
            model.setPresetPos(settings.presetPos);
            model.setReverbPreset(settings.reverbPreset);
            model.setSeekbarpos(settings.seekbarpos);
    
            Settings.isEqualizerEnabled = true;
            Settings.isEqualizerReloaded = true;
            Settings.bassStrength = settings.bassStrength;
            Settings.presetPos = settings.presetPos;
            Settings.reverbPreset = settings.reverbPreset;
            Settings.seekbarpos = settings.seekbarpos;
            Settings.equalizerModel = model;
        }
    
        public static final String PREF_KEY = "equalizer";
    
    
        public static void newLoadEqualizerSettings(){
            SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(MyConstants.context);
    
            Gson gson = new Gson();
            EqualizerSettings settings = gson.fromJson(preferences.getString(PREF_KEY, "{}"), EqualizerSettings.class);
            EqualizerModel model = new EqualizerModel();
            model.setBassStrength(settings.bassStrength);
            model.setPresetPos(settings.presetPos);
            model.setReverbPreset(settings.reverbPreset);
            model.setSeekbarpos(settings.seekbarpos);
    
            Settings.isEqualizerEnabled = true;
            Settings.isEqualizerReloaded = true;
            Settings.bassStrength = settings.bassStrength;
            Settings.presetPos = settings.presetPos;
            Settings.reverbPreset = settings.reverbPreset;
            Settings.seekbarpos = settings.seekbarpos;
            Settings.equalizerModel = model;
        }
    
    }

and here is onCreate method of EqualizerFragment

@Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Settings.isEditing = true;

        if (getArguments() != null && getArguments().containsKey(ARG_AUDIO_SESSIOIN_ID)) {
            audioSesionId = getArguments().getInt(ARG_AUDIO_SESSIOIN_ID);
        }

        if (Settings.equalizerModel == null) {
            Settings.equalizerModel = new EqualizerModel();
            Settings.equalizerModel.setReverbPreset(PresetReverb.PRESET_NONE);
            Settings.equalizerModel.setBassStrength((short) (1000 / 19));
        }
        

        mEqualizer = new Equalizer(0, audioSesionId);
        bassBoost = new BassBoost(0, audioSesionId);
        bassBoost.setEnabled(Settings.isEqualizerEnabled);
        BassBoost.Settings bassBoostSettingTemp = bassBoost.getProperties();
        BassBoost.Settings bassBoostSetting     = new BassBoost.Settings(bassBoostSettingTemp.toString());
        bassBoostSetting.strength = Settings.equalizerModel.getBassStrength();
        bassBoost.setProperties(bassBoostSetting);

        presetReverb = new PresetReverb(0, audioSesionId);
        presetReverb.setPreset(Settings.equalizerModel.getReverbPreset());
        presetReverb.setEnabled(Settings.isEqualizerEnabled);

        mEqualizer.setEnabled(Settings.isEqualizerEnabled);

        if (Settings.presetPos == 0) {
            for (short bandIdx = 0; bandIdx < mEqualizer.getNumberOfBands(); bandIdx++) {
                mEqualizer.setBandLevel(bandIdx, (short) Settings.seekbarpos[bandIdx]);
            }
        } else {
            mEqualizer.usePreset((short) Settings.presetPos);
        }
    }
0

There are 0 best solutions below