I am having Problem in playing multiple mp3 files in MediaPlayer for android ...It plays all files together and creates mess.I want the solution that it just play each file at a time and then after it other file get played.
Asked
Active
Viewed 1.9k times
1
-
use exoPlayer. this library help you to concatenate multi video together – roghayeh hosseini Jan 18 '19 at 06:13
3 Answers
7
You can try something like this:
public class MainActivity extends Activity implements MediaPlayer.OnCompletionListener
{
int[] tracks = new int[3];
int currentTrack = 0;
private MediaPlayer mediaPlayer = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tracks[0] = R.raw.say1;
tracks[1] = R.raw.say2;
tracks[2] = R.raw.say3;
mediaPlayer = MediaPlayer.create(getApplicationContext(), tracks[currentTrack]);
mediaPlayer.setOnCompletionListener(this);
mediaPlayer.start();
}
public void onCompletion(MediaPlayer arg0) {
arg0.release();
if (currentTrack < tracks.length) {
currentTrack++;
arg0 = MediaPlayer.create(getApplicationContext(), tracks[currentTrack]);
arg0.setOnCompletionListener(this);
arg0.start();
}
}
}

Valentina Chumak
- 279
- 6
- 17
-
This only executes first two audio files ,the third one does not play. Why is this happening ,do you have any fix for it? – Parag Kadam Oct 12 '15 at 10:38
5
I did this by following code:
private ArrayList<MediaPlayer> mPlayerList = new ArrayList<MediaPlayer>();
public void playSound4FileList(ArrayList<String> fileList)
{
mPlayerList.clear();
for (String fileName : fileList)
{
try {
MediaPlayer mPlayerT = new MediaPlayer();
AssetFileDescriptor descriptor = context.getAssets().openFd(fileName);
mPlayerT.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
descriptor.close();
mPlayerT.prepare();
mPlayerT.setVolume(1f, 1f);
mPlayerT.setLooping(false);
mPlayerList.add(mPlayerT);
} catch (Exception e) {
}
}
for (int i=0; i<mPlayerList.size()-1; i++) //Do not include last element
{
mPlayerList.get(i).setNextMediaPlayer(mPlayerList.get(i+1));
}
mPlayerList.get(0).start();
}

heMac
- 1,529
- 14
- 14
-
Call requires API level 16 : android.media.MediaPlayer#setNextMediaPlayer ! – yoosha Dec 25 '14 at 15:20
-
2
there is various MediaPlayer callback use them like :
http://www.androidadb.com/class/on/OnCompletionListener.html
mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer theMediaPlayer) {
mParent.playNextAudio();
mParent = null;
}

Dheeresh Singh
- 15,643
- 3
- 38
- 36
-
String PATH_TO_FILE = "/sdcard/my_downloads/ "+ filenum + ".mp3"; mediaPlayer = new MediaPlayer(); try { mediaPlayer.setDataSource(PATH_TO_FILE); mediaPlayer.prepare(); mediaPlayer.start(); mediaPlayer.setOnCompletionListener(new OnCompletionListener() { public void onCompletion(MediaPlayer mp) { // TODO String path = "/sdcard/my_downloads/ "+ filenum + ".mp3"; mediaPlayer = new MediaPlayer(); try { mediaPlayer.setDataSource(path); mediaPlayer.prepare(); mediaPlayer.start(); } catch (Exception e) { // TODO: handle exception } filenum++; } }); – Faisal Amjad Jun 06 '12 at 14:28
-
I implemented this but...it's not working properly...it only plays first 2 files – Faisal Amjad Jun 06 '12 at 14:29
-
I have the same, it only plays the first two files. You seem to have to add an oncompletionlistener to theMediaPlayer. No idea how though... – dorien Sep 13 '12 at 13:07
-