Medioplasties are embarrassed / disconnected too late

I installed Checkbox . Now, if it is not checked, mediaplayers should be immediately disabled , and if the check box is immediately disabled , now the problem is when I check / uncheck the box, the sound will not be turned off immediately, but how recently I restart the action ... How can I solve this problem?

The main program code:

 public class QuizActivity extends AppCompatActivity { private ActionBarDrawerToggle mToggle; private QuestionLibrary mQuestionLibrary = new QuestionLibrary(); private TextView mScoreView; private TextView mQuestionView; private Button mButtonChoice1; private Button mButtonChoice2; private Button mButtonChoice3; private String mAnswer; private int mScore = 0; private int mQuestionNumber = 0; Dialog dialog; Dialog dialog2; TextView closeButton; TextView closeButton2; CheckBox checkBoxmp; private MediaPlayer mp, mp2; SharedPreferences mypref; SharedPreferences.Editor editor; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_quiz); //Dialog 1 createDialog(); Button dialogButton = (Button) findViewById(R.id.dialogbtn); dialogButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.show(); } }); closeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); //end Dialog 1 //Dialog 2 createDialog2(); Button dialogButton2 = (Button) findViewById(R.id.dialogbtn2); dialogButton2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog2.show(); } }); closeButton2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog2.dismiss(); } }); //end Dialog 2 SharedPreferences mypref = getPreferences(MODE_PRIVATE); final SharedPreferences.Editor editor = mypref.edit(); checkBoxmp.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { editor.putBoolean("playSounds", !isChecked); editor.commit(); if (null != mp && null != mp2) { if (!isChecked) { mp.setVolume(1, 1); mp2.setVolume(1, 1); } else { mp.setVolume(0, 0); mp2.setVolume(0, 0); } } } }); final boolean playSounds = mypref.getBoolean("playSounds", false); checkBoxmp.setChecked(!playSounds); TextView shareTextView = (TextView) findViewById(R.id.share); shareTextView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent myIntent = new Intent(Intent.ACTION_SEND); myIntent.setType("text/plain"); myIntent.putExtra(Intent.EXTRA_SUBJECT, "Hello!"); myIntent.putExtra(Intent.EXTRA_TEXT, "My highscore in Quizzi is very high! I bet you can't beat me except you are cleverer than me. Download the app now! https://play.google.com/store/apps/details?id=amapps.impossiblequiz"); startActivity(Intent.createChooser(myIntent, "Share with:")); } }); mQuestionLibrary.shuffle(); setSupportActionBar((Toolbar) findViewById(R.id.nav_action)); DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); mToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.open, R.string.close); mDrawerLayout.addDrawerListener(mToggle); mToggle.syncState(); getSupportActionBar().setDisplayHomeAsUpEnabled(true); // Able to see the Navigation Burger "Button" ((NavigationView) findViewById(R.id.nv1)).setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(MenuItem menuItem) { switch (menuItem.getItemId()) { case R.id.nav_stats: startActivity(new Intent(QuizActivity.this, Menu2.class)); break; case R.id.nav_about: startActivity(new Intent(QuizActivity.this, Menu3.class)); break; } return true; } }); mScoreView = (TextView) findViewById(R.id.score_score); mQuestionView = (TextView) findViewById(R.id.question); mButtonChoice1 = (Button) findViewById(R.id.choice1); mButtonChoice2 = (Button) findViewById(R.id.choice2); mButtonChoice3 = (Button) findViewById(R.id.choice3); final List<Button> choices = new ArrayList<>(); choices.add(mButtonChoice1); choices.add(mButtonChoice2); choices.add(mButtonChoice3); updateQuestion(); //Code of the mediaplayer begins: for (final Button choice : choices) { choice.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (choice.getText().equals(mAnswer)) { try { mp = new MediaPlayer(); if (playSounds) { mp.setVolume(1, 1); } else { mp.setVolume(0, 0); } AssetFileDescriptor afd; afd = getAssets().openFd("sample.mp3"); mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); mp.prepare(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mp.release(); } }); mp.start(); updateScore(); updateQuestion(); Toast.makeText(QuizActivity.this, "Correct", Toast.LENGTH_SHORT).show(); } else { try { mp2 = new MediaPlayer(); if (playSounds) { mp2.setVolume(1, 1); } else { mp2.setVolume(0, 0); } AssetFileDescriptor afd; afd = getAssets().openFd("wrong.mp3"); mp2.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); mp2.prepare(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } mp2.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mp.release(); } }); mp2.start(); Toast.makeText(QuizActivity.this, "Wrong... Try again!", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(QuizActivity.this, Menu2.class); intent.putExtra("score", mScore); // pass score to Menu2 startActivity(intent); } } }); } } //End mediaplayer main code private void updateQuestion() { if (mQuestionNumber < mQuestionLibrary.getLength()) { mQuestionView.setText(mQuestionLibrary.getQuestion(mQuestionNumber)); mButtonChoice1.setText(mQuestionLibrary.getChoice1(mQuestionNumber)); mButtonChoice2.setText(mQuestionLibrary.getChoice2(mQuestionNumber)); mButtonChoice3.setText(mQuestionLibrary.getChoice3(mQuestionNumber)); mAnswer = mQuestionLibrary.getCorrectAnswer(mQuestionNumber++); } else { Toast.makeText(QuizActivity.this, "Last Question! You are very intelligent!", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(QuizActivity.this, Menu2.class); intent.putExtra("score", mScore); startActivity(intent); } } private void updateScore() { mScoreView.setText(String.valueOf(++mScore)); SharedPreferences mypref = getPreferences(MODE_PRIVATE); int highScore = mypref.getInt("highScore", 0); if (mScore > highScore) { SharedPreferences.Editor editor = mypref.edit(); editor.putInt("highScore", mScore); editor.apply(); } } @Override public boolean onOptionsItemSelected(MenuItem item) { return mToggle.onOptionsItemSelected(item) || super.onOptionsItemSelected(item); } private void createDialog() { dialog = new Dialog(this); dialog.setTitle("Tutorial"); dialog.setContentView(R.layout.popup_menu1_1); closeButton = (TextView) dialog.findViewById(R.id.closeTXT); } private void createDialog2() { dialog2 = new Dialog(this); dialog2.setTitle("Settings"); dialog2.setContentView(R.layout.popup_menu1_2); closeButton2 = (TextView) dialog2.findViewById(R.id.closeTXT2); checkBoxmp = (CheckBox) dialog2.findViewById(R.id.ckeckBox); } } 
+8
java android checkbox audio android-mediaplayer
source share
4 answers

Try changing editor.commit to editor.apply as .commit blocks the user interface when writing a shared preference to disk and waits until it completes writing for the next line of code that will execute where .apply sends the general preference is written to the workflow , thereby instantly executing the next line of code, as @Pavel mentioned. see here for more information and this is an official document

+2
source share

final SharedPreferences.Editor editor = mypref.edit();
try moving this line to onCheckChanged()
also use editor.apply() instead of editor.commit();

0
source share

try editing in general preferences in onCheckChanged:

 //end Dialog 2 SharedPreferences mypref = getPreferences(MODE_PRIVATE); checkBoxmp.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { SharedPreferences.Editor editor = mypref.edit(); editor.putBoolean("playSounds", !isChecked); editor.commit(); if (null != mp && null != mp2) { if (!isChecked) { mp.setVolume(1, 1); mp2.setVolume(1, 1); } else { mp.setVolume(0, 0); mp2.setVolume(0, 0); } } } }); 
0
source share

1. Use the onPrepared listener media player and start the media player only after the data has been previously downloaded from the server.

  mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mp.start(); } }); 

2. Replace this with the next line of code, as you have already declared SharedPreferences as a member variable. Save only one instance of SharedPreference.

 SharedPreferences mypref = getPreferences(MODE_PRIVATE) 

from

 mypref = getPreferences(MODE_PRIVATE); 

3. Replace editor.commit () with editor.apply ()

editor.commit () waits for writing to complete for the next line and blocks the user interface when writing general settings, but editor.apply () writes to disk, creating a workflow.

0
source share

All Articles