Reputation: 21
I'm using MediaPlayer
for playing sounds onClick
. Until the sound is finished the click event is not play the sound again. How can it play the sound again on click, when the sound is currently playing?
final MediaPlayer mistake = MediaPlayer.create(getActivity(), R.raw.mistake);
tv_mistake.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mistake.start();
}
});
Upvotes: 2
Views: 692
Reputation: 843
Most of the errors in MediaPlayer
comes due to improper handling of different states of its object.
You should release MediaPlayer
object after completing playback or before calling start()
again.
It is also recommended that once a MediaPlayer object is no longer being used, call release() immediately so that resources used by the internal player engine associated with the MediaPlayer object can be released immediately.
Create a MediaPlayer
object as:
Mediaplayer mediaPlayer = null;
And call playMistakeSound()
on button click:
tv_mistake.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
playMistakeSound()
}
});
Implement playMistakeSound()
as:
void playMistakeSound() {
try {
// releases MediaPlayer object before calling create() again while previous is still playing
if (mediaPlayer != null){
mediaPlayer.reset();
mediaPlayer.release();
mediaPlayer = null;
}
mediaPlayer = MediaPlayer.create(getActivity() /*Context*/, R.raw.mistake);
// this will release MediaPlayer as soon as it completes
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
if (mp != null) {
mp.reset();
mp.release();
mediaPlayer = null;
}
}
});
mediaPlayer.start();
} catch (Exception e) {
// log exception and handle
e.printStackTrace();
}
}
Upvotes: 1
Reputation: 626
You must create a new MediaPlayer
object to play the sound again like so.
tv_mistake.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mistake != null) {
mistake.release();
mistake = MediaPlayer.create(getActivity(), R.raw.mistake);
}
mistake.start();
}
});
You can read more about MediaPlayer in the following links.
Also a quite similar question
MediaPlayer, MediaPlayer Tutorial, MediaPlayer Tutorial From Google
Upvotes: 1