2

Я пытаюсь воспроизводить песни один за другим в медиаплеере. Код, который я написал, воспроизводит одну песню, а затем останавливается. Как я могу заставить его воспроизводить все песни один за другим из списка. Мой код нижеКак заставить песни играть один за другим из списка?

mp = new MediaPlayer(); 
    seekbar.setVisibility(SeekBar.VISIBLE); 
    seekbar.setProgress(0); 

    mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 

    mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer player) { 
      seekbar.setMax(mp.getDuration()); 
      mp.start(); 

     } 
    }); 

    b2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Toast.makeText(getApplicationContext(), "Playing sound", Toast.LENGTH_SHORT).show(); 
      mp.start(); 

      finalTime = mp.getDuration(); 
      startTime = mp.getCurrentPosition(); 

      if (oneTimeOnly == 0) { 
       seekbar.setMax((int) finalTime); 
       oneTimeOnly = 1; 
      } 
      seekbar.setProgress((int) startTime); 
      myHandler.postDelayed(UpdateSongTime, 100); 
      b2.setEnabled(true); 
      b3.setEnabled(true); 
     } 
    }); 

    b3.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (mp.isPlaying()) { 
       Toast.makeText(getApplicationContext(), "Pausing sound", Toast.LENGTH_SHORT).show(); 
       mp.pause(); 
       mp.seekTo(0); 
      } 

      b2.setEnabled(true); 
      b3.setEnabled(true); 
     } 
    }); 
      b4.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        int temp = (int) startTime; 

        if ((temp + forwardTime) <= finalTime) { 
         startTime = startTime + forwardTime; 
         mp.seekTo((int) startTime); 
         Toast.makeText(getApplicationContext(), "You have Jumped forward 5 seconds", Toast.LENGTH_SHORT).show(); 
        } else { 
         Toast.makeText(getApplicationContext(), "Cannot jump forward 5 seconds", Toast.LENGTH_SHORT).show(); 
        } 
       } 
      }); 
    b1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      int temp = (int) startTime; 

      if ((temp - backwardTime) > 0) { 
       startTime = startTime - backwardTime; 
       mp.seekTo((int) startTime); 
       Toast.makeText(getApplicationContext(), "You have Jumped backward 5 seconds", Toast.LENGTH_SHORT).show(); 
      } else { 
       Toast.makeText(getApplicationContext(), "Cannot jump backward 5 seconds", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }); 


    S.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      if (isShuffle) { 
       isShuffle = false; 
       Toast.makeText(getApplicationContext(), "Shuffle is OFF", Toast.LENGTH_SHORT).show(); 
      } else { 

       isShuffle = true; 
       Toast.makeText(getApplicationContext(), "Shuffle is ON", Toast.LENGTH_SHORT).show(); 

       isRepeat = false; 
      } 
     } 
    }); 
    mListItems = new ArrayList<Track>(); 
    final ListView listView = (ListView)findViewById(R.id.listview); 
    mAdapter = new SCTrackAdapter(this, mListItems); 
    listView.setAdapter(mAdapter); 
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Track track = mListItems.get(position); 
      if (mp.isPlaying()) { 
       mp.start(); 
       mp.reset(); 
      } 

      try { 
       mp.setDataSource(track.getStreamURL() + "?client_id=" + Config.CLIENT_ID); 
       mp.prepareAsync(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      mp.start(); 
     } 
    }); 

Я создал классы соответственно Config, SCService, SCTrackAdapter, SounndCloude, Track. Скажите, пожалуйста, что код для кнопки тасования правильный или нет. Пожалуйста, дайте отзыв, если я что-то пропустил.

ответ