Playing multiple files in MediaPlayer one after other In android

前端 未结 3 2019
情歌与酒
情歌与酒 2020-12-16 09:01

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

相关标签:
3条回答
  • 2020-12-16 09:24

    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();
    }
    
    0 讨论(0)
  • 2020-12-16 09:30

    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)

    0 讨论(0)
  • 2020-12-16 09:32

    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();
          }
        }
    }
    
    0 讨论(0)
提交回复
热议问题