java - How do i make an repeat button that cycles through repeat all and repeat one for an android music player? -




this code have got repeat 1 working want able repeat songs not stop playing music, want able repeat 1 single song. have tried find documentation me haven't found anything. appreciated

import android.manifest; import android.app.activity; import android.content.pm.packagemanager; import android.media.mediaplayer; import android.os.bundle; import android.os.handler; import android.support.v4.app.activitycompat; import android.support.v4.content.contextcompat; import android.support.v7.widget.linearlayoutmanager; import android.support.v7.widget.recyclerview; import android.util.log; import android.view.view; import android.widget.adapterview; import android.widget.imagebutton; import android.widget.seekbar; import android.widget.textview;  import java.io.ioexception; import java.util.collections; import java.util.comparator; import java.util.list; import java.util.locale; import java.util.concurrent.timeunit;  import static android.r.drawable.ic_media_play;  public class mainactivity extends activity {      private static final int update_frequency = 500;     private static final int step_value = 5000;     private static final int call = 872;     static mediaplayer mp = null;     private final handler handler = new handler();     private textview selectedfile;     private textview selectedartist;     private recyclerview recyclerview;     private seekbar seekbar;     private mediaplayer player;     private imagebutton playbutton;     private imagebutton prevbutton;     private imagebutton nextbutton;     private imagebutton repeatbutton;     private imagebutton shufflebutton;     private boolean isstarted = true;     private int currentposition;     private boolean ismovingseekbar = false;     private myrecyclerviewadapter adapter;     private final runnable updatepositionrunnable = new runnable() {         public void run() {             updateposition();         }     };     private list<music> musiclist;      private boolean isshuffle = false;     private boolean isrepeat = false;     private view.onclicklistener onbuttonclick = new view.onclicklistener() {          @override         public void onclick(view v) {              switch (v.getid()) {                  case r.id.play:                     if (player.isplaying()) {                         handler.removecallbacks(updatepositionrunnable);                         player.pause();                         playbutton.setimageresource(android.r.drawable.ic_media_play);                     } else {                         if (isstarted) {                             player.start();                             playbutton.setimageresource(android.r.drawable.ic_media_pause);                              updateposition();                         } else {                             startplay(currentposition);                         }                     }                      break;                  case r.id.prev:                     startplay(currentposition - 1);                       break;                   case r.id.next:                     startplay(currentposition + 1);                      break;                   case r.id.shuffle:                     if (isshuffle) {                         collections.shuffle(musiclist);                         adapter.notifydatasetchanged();                         shufflebutton.setcolorfilter(-16776961);                     } else {                         sortmusiclist();                         shufflebutton.setcolorfilter(-16777216);                     }                      isshuffle = !isshuffle;                     break;                  case r.id.repeat: {                     if (isrepeat) {                         player.setlooping(true);                         repeatbutton.setimageresource(r.drawable.ic_repeat_black_24dp);                         repeatbutton.setcolorfilter(-16776961);                     } else {                         player.setlooping(false);                         repeatbutton.setcolorfilter(-16777216);                     }                      break;                 }              }          }     };      private void sortmusiclist() {         collections.sort(musiclist, new comparator<music>() {             @override             public int compare(music o1, music o2) {                 return o1.getartists().compareto(o2.getartists());             }         });          if (adapter != null) {             adapter.notifydatasetchanged();          }     }      private mediaplayer.oncompletionlistener oncompletion = new mediaplayer.oncompletionlistener() {          @override         public void oncompletion(mediaplayer mp) {              stopplay();             startplay(currentposition + 1);         }      };     private mediaplayer.onerrorlistener onerror = new mediaplayer.onerrorlistener() {          @override         public boolean onerror(mediaplayer mp, int what, int extra) {              return false;         }     };     private seekbar.onseekbarchangelistener seekbarchanged = new seekbar.onseekbarchangelistener() {         @override         public void onstoptrackingtouch(seekbar seekbar) {             ismovingseekbar = false;         }          @override         public void onstarttrackingtouch(seekbar seekbar) {             ismovingseekbar = true;         }          @override         public void onprogresschanged(seekbar seekbar, int progress, boolean fromuser) {             if (ismovingseekbar) {                 player.seekto(progress);                  log.i("onseekbarchangelistener", "onprogresschanged");             } else {                 textview duration = findviewbyid(r.id.song_duration);                 duration.settext(string.valueof(progress));                 long totalseconds = timeunit.milliseconds.toseconds(progress);                 long minss = totalseconds / 60;                 long seconds = totalseconds % 60;                  duration.settext(string.format(locale.uk, "%02d:%02d", minss, seconds));             }         }     };       @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_main3);           recyclerview = findviewbyid(r.id.list);         recyclerview.setlayoutmanager(new linearlayoutmanager(getapplicationcontext()));           int permissioncheck = contextcompat.checkselfpermission(this,                 manifest.permission.read_external_storage);           if (permissioncheck == packagemanager.permission_granted) {             setupui();         } else {              activitycompat.requestpermissions(this,                     new string[]{manifest.permission.read_external_storage},                     call);          }     }      @override     protected void onpause() {         super.onpause();         player.getcurrentposition();     }       private void setupui() {         selectedfile = findviewbyid(r.id.selected_file);         selectedartist = findviewbyid(r.id.artists);         seekbar = findviewbyid(r.id.seekbar);         prevbutton = findviewbyid(r.id.prev);         playbutton = findviewbyid(r.id.play);         nextbutton = findviewbyid(r.id.next);         repeatbutton = findviewbyid(r.id.repeat);         shufflebutton = findviewbyid(r.id.shuffle);           player = new mediaplayer();          player.setoncompletionlistener(oncompletion);          player.setonerrorlistener(onerror);          seekbar.setonseekbarchangelistener(seekbarchanged);           musiclist = new musicmanager().getmusic(getcontentresolver());         sortmusiclist();          adapter = new myrecyclerviewadapter(musiclist);         adapter.setonitemclicklistener(new adapterview.onitemclicklistener() {             @override             public void onitemclick(adapterview<?> adapterview, view view, int position, long l) {                 startplay(position);             }         });         recyclerview.setadapter(adapter);          prevbutton.setonclicklistener(onbuttonclick);         playbutton.setonclicklistener(onbuttonclick);         nextbutton.setonclicklistener(onbuttonclick);         shufflebutton.setonclicklistener(onbuttonclick);         repeatbutton.setonclicklistener(onbuttonclick);     }      @override     protected void ondestroy() {         super.ondestroy();          handler.removecallbacks(updatepositionrunnable);         player.stop();         player.reset();         player.release();          player = null;     }      private void startplay(int position) {         if (position < 0) {             position = 0;         }         if (position >= musiclist.size()) {             position = musiclist.size() - 1;         }         string file = musiclist.get(position).getfile();         string title = musiclist.get(position).gettitle();         string artists = musiclist.get(position).getartists();          currentposition = position;         if (artists != null) {             selectedartist.settext(artists);         }         if (title != null) {             selectedfile.settext(title);         }           seekbar.setprogress(0);         updateposition();          player.stop();         player.reset();          try {             player.setdatasource(file);             player.prepare();             player.start();         } catch (illegalargumentexception e) {             e.printstacktrace();         } catch (illegalstateexception e) {             e.printstacktrace();         } catch (ioexception e) {             e.printstacktrace();         }         seekbar.setmax(player.getduration());         playbutton.setimageresource(android.r.drawable.ic_media_pause);           isstarted = true;     }      private void stopplay() {         player.stop();         player.reset();         playbutton.setimageresource(ic_media_play);         handler.removecallbacks(updatepositionrunnable);          isstarted = false;     }      private void updateposition() {         handler.removecallbacks(updatepositionrunnable);          seekbar.setprogress(player.getcurrentposition());          handler.postdelayed(updatepositionrunnable, update_frequency);          if (adapter == null) {             return;         }      }   } 

this main activity if need else ask.

to play list of songs loop continuously, can define variable used index of number of songs completed. after completion of of list, replay list of songs calling index again. example of is:

int[] myaudio = {r.raw.audio1, r.raw.audio2, r.raw.audio3}; int msongfinish = 0;  mediaplayer mp = mediaplayer.create(this, myaudio[0]);  mp.setoncompletionlistener(new oncompletionlistener() { @override public void oncompletion(mediaplayer mp) {     msongfinish++;     mp.reset();     if (msongfinish < myaudio.length()) {         try {             assetfiledescriptor asset = getresources().openrawresourcefd(myaudio[msongfinish]);             if (asset != null) {                 mp.setdatasource(afd.getfiledescriptor(), asset.getstartoffset(), asset.getlength());                 asset.close();                 mp.prepare();             }         } catch (exception ex) {             // report crash         }     } else {         msongfinish=0;         mp.release();         mp = null;     // either set counter 0 , start again or call end of list      } } }); mp.start(); 

to on button click, use onclicklistener. loop single song on button click, use mp.setlooping(true).





wiki

Comments

Popular posts from this blog

Asterisk AGI Python Script to Dialplan does not work -

python - Read npy file directly from S3 StreamingBody -

kotlin - Out-projected type in generic interface prohibits the use of metod with generic parameter -