I am playing an mp3 audio from server using the below code. It is working fine, no issues. But sometimes when clicking on Play button, it is taking few seconds to start the audio, it takes some buffering time, in that gap time if i click Play button again and again, then app crashes. How can i have the condition under play button code for checking whether the audio has been buffered and play starting or not? I can't check here if(mediaPlayer.isPlaying()).
private void playAudio(String url) throws Exception
{
if( (mediaPlayer == null || isCompleted) && !isPaused ) {
isCompleted = false;
isPaused = false;
playpauseButton.setBackgroundResource(R.drawable.pauseimage);
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(url);
mediaPlayer.prepare();
mediaPlayer.start();
}
else if ( isPaused ) {
playpauseButton.setBackgroundResource(R.drawable.pauseimage);
mediaPlayer.start();
isPaused = false;
}
else {
playpauseButton.setBackgroundResource(R.drawable.playimage);
isPaused = true;
mediaPlayer.pause();
}
mediaPlayer.setOnCompletionListener(new OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
isCompleted = true;
isPaused = false;
playpauseButton.setBackgroundResource(R.drawable.playimage);
}}
);
}
public void stopAudio(View view) {
killMediaPlayer();
}
@Override
protected void onDestroy() {
super.onDestroy();
killMediaPlayer();
}
private void killMediaPlayer() {
isPaused = false;
isCompleted = true;
playpauseButton.setBackgroundResource(R.drawable.playimage);
if(mediaPlayer!=null) {
try {
mediaPlayer.release();
}
catch(Exception e) {
e.printStackTrace();
}
}
}