android - how to get seekbar to automatically move on song play? -
i have looked everywhere fix problem cant seem going.
how make seekbar automatically slide song play ?
this have far.
arraylist<string> arrlist = new arraylist<string>(20); private handler seekhandler = new handler(); imagebutton next, playpause, previous; seekbar seekbar; protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.layout); getsupportactionbar().hide(); getinit(); } public void getinit() { songcurrentdurationlabel = (textview) findviewbyid(r.id.starttime); songtotaldurationlabel = (textview) findviewbyid(r.id.endtime); mediaplayer = new mediaplayer(); mediaplayer = mediaplayer.create(this, r.raw.firstsong); seekbar = (seekbar) findviewbyid(r.id.seekbar1); seekbar.setmax(mediaplayer.getduration()); seekbar.setonseekbarchangelistener(new seekbar.onseekbarchangelistener() { @override public void onstoptrackingtouch(seekbar seekbar) { // remove message handler updating progress bar seekhandler.removecallbacks(mupdatetimetask); int totalduration = mediaplayer.getduration(); int currentposition = progresstotimer(seekbar.getprogress(), totalduration); // forward or backward seconds mediaplayer.seekto(currentposition); // update timer progress again updateprogressbar(); } @override public void onstarttrackingtouch(seekbar seekbar) { // remove message handler updating progress bar seekhandler.removecallbacks(mupdatetimetask); } @override public void onprogresschanged(seekbar seekbar, int progress, boolean fromuser) { if (mediaplayer != null && fromuser) { mediaplayer.seekto(progress); // mediaplayer.seekto(progress * 1000); } } }); spinner = ((spinner) findviewbyid(r.id.spinner1)); spinner.setadapter(songadapter); previous = ((imagebutton) findviewbyid(r.id.previous)); playpause = ((imagebutton) findviewbyid(r.id.play)); next = ((imagebutton) findviewbyid(r.id.next)); spinner.setonitemselectedlistener(this); previous.setonclicklistener(this); playpause.setonclicklistener(this); next.setonclicklistener(this); totalduration = mediaplayer.getduration(); currentduration = mediaplayer.getcurrentposition() / 1000; // displaying total duration time songtotaldurationlabel.settext("" + millisecondstotimer(totalduration)); // displaying time completed playing songcurrentdurationlabel.settext("" + millisecondstotimer(currentduration)); } public void updateprogressbar() { seekhandler.postdelayed(mupdatetimetask, 100); } private runnable mupdatetimetask = new runnable() { @override public void run() { long totalduration = mediaplayer.getduration(); long currentduration = mediaplayer.getcurrentposition() / 1000; int progress = (int) getprogresspercentage(currentduration, totalduration); // updating progress bar seekbar.setprogress(progress); // running thread after 100 milliseconds seekhandler.postdelayed(this, 100); } }; public int progresstotimer(int progress, int totalduration) { int currentduration = 0; totalduration = (int) (totalduration / 1000); currentduration = (int) ((((double) progress) / 100) * totalduration); // return current duration in milliseconds return currentduration * 1000; } public int getprogresspercentage(long currentduration1, long totalduration1) { double percentage = (double) 0; long currentseconds = (int) (currentduration1 / 1000); long totalseconds = (int) (totalduration1 / 1000); // calculating percentage percentage = (((double) currentseconds) / totalseconds) * 100; // return percentage return percentage.intvalue(); } public string millisecondstotimer(long milliseconds) { string finaltimerstring = ""; string secondsstring = ""; // convert total duration time int hours = (int) (milliseconds / (1000 * 60 * 60)); int minutes = (int) (milliseconds % (1000 * 60 * 60)) / (1000 * 60); int seconds = (int) ((milliseconds % (1000 * 60 * 60)) % (1000 * 60) / 1000); // add hours if there if (hours > 0) { finaltimerstring = hours + ":"; } // prepending 0 seconds if 1 digit if (seconds < 10) { secondsstring = "0" + seconds; } else { secondsstring = "" + seconds; } finaltimerstring = finaltimerstring + minutes + ":" + secondsstring; // return timer string return finaltimerstring; } } i didnt include song list , other stuff dont see why necesary put here. anyways, when have here dont no error or anything, seekbar doesnt automatically move , when try move manually position goes right 0.
first of should define runnable object triggered each second. situation, in everysecond class triggered.
i paste example code. here runnable class.
runnable timerrunnable = new runnable() { public void run() { // mediaplayer time , set value // trigger every 1 second. updatehandler.postdelayed(this, 1000); } }; and should have handler trigger runnable instance.
handler updatehandler = new handler(); updatehandler.postdelayed(timerrunnable, 1000); i hope sample you.
Comments
Post a Comment