android - Auto playing songs in a list? -
i read through tutorial , created simple music player dubbed simpleplayer. when click song want play, plays fine.
however, when song finishes, instead of playing next song plays sec song in list, keeps playing on , on again.
i know choosing of song when first song finishes within oncompletion method mp.setdatasource, i'm not sure need set in brackets other +1 plays next song in list:
public void oncompletion(mediaplayer mp) { seek { mp.reset(); mp.setdatasource(sd_path + songs.get(+1)); mp.prepare(); mp.start(); play.setenabled(false); pause.setenabled(true); stop.setenabled(true); } catch(ioexception e) { log.v(getstring(r.string.app_name), e.getmessage()); } here rest of code in case have alter there well:
public class mainactivity extends listactivity implements oncompletionlistener { private static final string sd_path = new string(environment.getexternalstoragedirectory().getpath() + "/"); private list<string> songs = new arraylist<string>(); private mediaplayer mp = new mediaplayer(); private view play; private view pause; private view stop; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); updateplaylist(); play = (imagebutton)findviewbyid(r.id.imagebutton1); pause = (imagebutton)findviewbyid(r.id.imagebutton2); stop = (imagebutton)findviewbyid(r.id.imagebutton3); mp.setoncompletionlistener(this); play.setenabled(false); pause.setenabled(false); stop.setenabled(false); } @override protected void onlistitemclick(listview list, view view, int position, long id) { seek { mp.reset(); mp.setdatasource(sd_path + songs.get(position)); mp.prepare(); mp.start(); play.setenabled(false); pause.setenabled(true); stop.setenabled(true); } catch(ioexception e) { log.v(getstring(r.string.app_name), e.getmessage()); } } private void updateplaylist() { file home = new file(sd_path); if (home.listfiles(new mp3filter()).length > 0) { (file file : home.listfiles( new mp3filter())) { songs.add(file.getname()); } arrayadapter<string> songlist = new arrayadapter<string>(this,r.layout.song_item,songs); setlistadapter(songlist); } } public void play(view view){ toast.maketext(getapplicationcontext(), "playing song", toast.length_short).show(); mp.start(); play.setenabled(false); pause.setenabled(true); stop.setenabled(true); } public void pause(view view){ toast.maketext(getapplicationcontext(), "pausing song", toast.length_short).show(); mp.pause(); play.setenabled(true); pause.setenabled(false); stop.setenabled(true); } public void stop(view view){ toast.maketext(getapplicationcontext(), "stopping song", toast.length_short).show(); mp.stop(); play.setenabled(false); pause.setenabled(false); stop.setenabled(false); } @override public void oncompletion(mediaplayer mp) { seek { mp.reset(); mp.setdatasource(sd_path + songs.get(+1)); mp.prepare(); mp.start(); play.setenabled(false); pause.setenabled(true); stop.setenabled(true); } catch(ioexception e) { log.v(getstring(r.string.app_name), e.getmessage()); } } } also, how can create when app runs, lists songs on sdcard, phone storage , in folders on sdcard? @ moment lists songs on root of sdcard.
what have written continuously playing sec song. need utilize global variable indicate song number , increment , pass setdatasource();
first,create public global variable
public static int song_number=0; in oncompletion method
@override public void oncompletion(mediaplayer mp) { seek { mp.reset(); if(song_number == songs.size()) { song_number=0; } else { song_number=song_number+1; } mp.setdatasource(sd_path + songs.get(song_number));// pass song_number++ instead +1 mp.prepare(); mp.start(); play.setenabled(false); pause.setenabled(true); stop.setenabled(true); } catch(ioexception e) { log.v(getstring(r.string.app_name), e.getmessage()); } } in on listitemclick method,assign song_number based on position
@override protected void onlistitemclick(listview list, view view, int position, long id) { seek { song_number=position; // <------------------------add line mp.reset(); mp.setdatasource(sd_path + songs.get(position)); mp.prepare(); mp.start(); play.setenabled(false); pause.setenabled(true); stop.setenabled(true); } catch(ioexception e) { log.v(getstring(r.string.app_name), e.getmessage()); } } android audio android-mediaplayer
No comments:
Post a Comment