Android MediaPlayer Stop And Play


Answer :

You should use only one mediaplayer object

    public class PlayaudioActivity extends Activity {          private MediaPlayer mp;          /** Called when the activity is first created. */         @Override         public void onCreate(Bundle savedInstanceState) {             super.onCreate(savedInstanceState);             setContentView(R.layout.main);             Button b = (Button) findViewById(R.id.button1);             Button b2 = (Button) findViewById(R.id.button2);             final TextView t = (TextView) findViewById(R.id.textView1);              b.setOnClickListener(new View.OnClickListener() {                  @Override                 public void onClick(View v) {                     stopPlaying();                     mp = MediaPlayer.create(PlayaudioActivity.this, R.raw.far);                     mp.start();                 }              });              b2.setOnClickListener(new View.OnClickListener() {                  @Override                 public void onClick(View v) {                     stopPlaying();                     mp = MediaPlayer.create(PlayaudioActivity.this, R.raw.beet);                     mp.start();                 }             });         }          private void stopPlaying() {             if (mp != null) {                 mp.stop();                 mp.release();                 mp = null;            }         }     } 

To stop the Media Player without the risk of an Illegal State Exception, you must do

  try {         mp.reset();         mp.prepare();         mp.stop();         mp.release();         mp=null;        }   catch (Exception e)          {            e.printStackTrace();          } 

rather than just

try {        mp.stop();        mp.release();        mp=null;     }  catch (Exception e)      {       e.printStackTrace();     } 

According to the MediaPlayer life cycle, which you can view in the Android API guide, I think that you have to call reset() instead of stop(), and after that prepare again the media player (use only one) to play the sound from the beginning. Take also into account that the sound may have finished. So I would also recommend to implement setOnCompletionListener() to make sure that if you try to play again the sound it doesn't fail.


Comments

Popular posts from this blog

Converting A String To Int In Groovy

"Cannot Create Cache Directory /home//.composer/cache/repo/https---packagist.org/, Or Directory Is Not Writable. Proceeding Without Cache"

Android How Can I Convert A String To A Editable