java - Is it possible to have MediaPlayer play one audio file and when it finishes play the next? -


i want mediaplayer take in arraylist of songtitles , have check song title came in, play song. when finishes, want go next song title in loop , play one. however, code plays last song.

public void play(context c, arraylist<string> songtitles) {     stop();      (string song: songtitles){         if (song.equalsignorecase("shakeitoff")){             msongplayer = mediaplayer.create(c, r.raw.shaketoff);          } else if (song.equalsignorecase("dropitlow")){             msongplayer = mediaplayer.create(c, r.raw.dropitlow);          } else if (song.equalsignorecase("chachaslide")){             msongplayer = mediaplayer.create(c, r.raw.chachaslide);         }          msongplayer.setonpreparedlistener(new mediaplayer.onpreparedlistener() {             @override             public void onprepared(mediaplayer mp) {                 if (mp == msongplayer) {                     msongplayer.start();                 }             }         });          msongplayer.setoncompletionlistener(new mediaplayer.oncompletionlistener() {             @override             public void oncompletion(mediaplayer mp) {                 stop();             }         });       } } 

you need use mediaplayer.oncompletionlistener start new track when previous 1 finishes, more following (i haven't compiled it, there may syntax errors):

public void play(final context c, arraylist<string> songtitles) {     stop();     if (songtitles != null && songtitles.size > 0) {         final list<string> playlist = new arraylist<string>(songtitles);          string song = playlist.get(0);         playlist.remove(0);          msongplayer = mediaplayer.create(c, getsongresourceid(song));          msongplayer.setonpreparedlistener(new mediaplayer.onpreparedlistener() {             @override             public void onprepared(mediaplayer mp) {                 if (mp == msongplayer) {                     msongplayer.start();                 }             }         });          msongplayer.setoncompletionlistener(new mediaplayer.oncompletionlistener() {             @override             public void oncompletion(mediaplayer mp) {                 stop();                 // recursively call play() method 1 less                 // track in list.                 play(c, playlist);             }         });     }  }   public int getsongresourceid(string songtitle) {     if (song.equalsignorecase("shakeitoff")){         return r.raw.shaketoff;     } else if (song.equalsignorecase("dropitlow")){         return r.raw.dropitlow;     } else if (song.equalsignorecase("chachaslide")){         return r.raw.chachaslide;     } } 

the first time through, plays first track in list, in mediaplayer.oncompletionlistener, recursively calls play() method copy of list has had first track removed it. means each time play() called, list shorter until reach end of list.


Comments