Reputation: 2195
I tried to play audio once
when Enter
key event occur on EditText
.
But the Media player plays looping
the audio and never stop
. And Media Player
didn't call setOnCompletionListener
method.
editText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
//Toast.makeText(LoginActivity.this, editText.getText(), Toast.LENGTH_SHORT).show();
try {
MediaPlayer mp = new MediaPlayer();
AssetFileDescriptor afd = getAssets().openFd("oxygen.ogg");
mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
mp.setLooping(false);
mp.prepare();
mp.start();
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
Log.i("ONComplete Media palyer", "onComplete hit");
mp.stop();
mp.release();
}
});
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
return false;
}
});
Upvotes: 3
Views: 1560
Reputation: 53
I stumbled upon a similar issue.
Setting mediaPlayer.isLooping = false
(kotlin) worked only when I created MediaPlayer from a resource:
MediaPlayer.create(context, R.raw.music).
It had no effect when I used URI
MediaPlayer.create(context, Uri.parse(myUri))
A possible workaround can be built with CountDownTimer
setAlarmStopperTimer(musicPlayer, delay = musicPlayer.duration.toLong())
.....
private fun setAlarmStopperTimer(mediaPlayer: MediaPlayer, delay: Long) {
alarmStopperTimer = object : CountDownTimer(delay, 100) {
@RequiresApi(Build.VERSION_CODES.O)
override fun onFinish() {
mediaPlayer.stop()
}
override fun onTick(millisUntilFinished: Long) {
}
}
alarmStopperTimer.start()
}
Upvotes: 1
Reputation: 2195
I use setOnSeekCompleteListener
method instead of setOnCompletionListener
. It plays once and complete stop now.
Upvotes: 1
Reputation: 8149
Use prepareAsync()
with setOnPreparedListener()
and when media is ready then play it.
try {
MediaPlayer mp = new MediaPlayer();
AssetFileDescriptor afd = getAssets().openFd("oxygen.ogg");
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
mp.setLooping(false);
mp.prepareAsync();
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
Log.i("ONComplete Media palyer", "onComplete hit");
mp.stop();
mp.release();
}
});
} catch (Exception e) {
}
Upvotes: 0