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);
}
}