1

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.

Nandkumar Tekale
  • 16,024
  • 8
  • 58
  • 85
Faisal Amjad
  • 107
  • 2
  • 4
  • 10

3 Answers3

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
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;
    }

http://developer.android.com/reference/android/media/MediaPlayer.html#setOnCompletionListener(android.media.MediaPlayer.OnCompletionListener)

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
  • but beware you may hear mp3s twice :/ – Faisal Naseer Jun 13 '16 at 10:53