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
Post a Comment