-2

I want to add an automatically play next song option when previous is finished in my Android app. I have trying many ways but failed. Please, give full code, not hints. Here are the Full Class:

public class AlbumPlayActivity extends AppCompatActivity implements View.OnClickListener {
private List<SongListModel> songs = new ArrayList<SongListModel>();
private SongAdapter songAdapter;
String URL_SONGS;
String URL_ALBUM_ART;
String URL_ALBUM_ART_BIG;
String URL_ALBUM_ART_BLUR;
String URL_MP3;
ListView lvSongs;
MediaPlayer mediaPlayer;
NetworkImageView nivAlbumArt,nivAlbumArtBlur;
private double startTime = 0;
private double finalTime = 0;
private Handler myHandler = new Handler();

public int currentlyPlaying;

private int forwardTime = 5000;
private int backwardTime = 5000;
private SeekBar seekbar;
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
public int oneTimeOnly = 0;
int songID = 0;
ImageButton ibPrev, ibPlay, ibPause, ibNext, ibFastForward, ibFastRewind;
TextView tvStartTime, tvEndTime;
RelativeLayout llList;
ImageButton ibShare;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_album_play);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayShowTitleEnabled(false);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    URL_SONGS = getIntent().getExtras().getString("URL_SONG");
    URL_ALBUM_ART = getIntent().getExtras().getString("URL_ALBUM_ART");
    URL_ALBUM_ART_BIG = getIntent().getExtras().getString("URL_ALBUM_ART_BIG");
    URL_ALBUM_ART_BLUR = getIntent().getExtras().getString("URL_ALBUM_ART_BLUR");
    imageLoader = AppController.getInstance().getImageLoader();
    lvSongs = (ListView) findViewById(R.id.lvSongList);
    nivAlbumArt = (NetworkImageView) findViewById(R.id.nivAlbumArt);
    ibNext = (ImageButton) findViewById(R.id.ibNext);
    ibPlay = (ImageButton) findViewById(R.id.ibPlay);
    ibFastRewind = (ImageButton) findViewById(R.id.ibFastRewind);
    ibFastForward = (ImageButton) findViewById(R.id.ibFastForward);
    ibPrev = (ImageButton) findViewById(R.id.ibPrev);
    seekbar = (SeekBar) findViewById(R.id.seekBar);
    tvStartTime = (TextView) findViewById(R.id.tvStartTime);
    tvEndTime = (TextView) findViewById(R.id.tvEndTime);
    llList = (RelativeLayout)findViewById(R.id.llList);
    ibShare = (ImageButton)findViewById(R.id.ibShare);
    seekbar.setClickable(false);
    ibNext.setOnClickListener(this);
    ibPlay.setOnClickListener(this);
    ibPrev.setOnClickListener(this);
    ibFastRewind.setOnClickListener(this);
    ibFastForward.setOnClickListener(this);
    ibShare.setOnClickListener(this);

    songAdapter = new SongAdapter(this, songs);
    lvSongs.setAdapter(songAdapter);


    loadSongs();

    lvSongs.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            songs.get(songID).setVisible(false);
            songAdapter.notifyDataSetChanged();
            songID = position;
            stopPlaying();
            URL_MP3 = "http://.../apps/content/mp3/" + songs.get(position).getSong().replace(" ", "%20");
            songs.get(songID).setVisible(true);
            mediaPlayer = new MediaPlayer();
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            try {
                mediaPlayer.setDataSource(URL_MP3);
            } catch (IOException e) {
                e.printStackTrace();
            }
            mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp.start();
                    ibPlay.setImageResource(R.drawable.ic_pause_circle_outline_white_48dp);

                    finalTime = mp.getDuration();
                    startTime = mp.getCurrentPosition();
                    if (oneTimeOnly == 0) {
                        seekbar.setMax((int) finalTime);
                        oneTimeOnly = 1;
                    }
                    tvEndTime.setText(String.format("%d:%d",
                            TimeUnit.MILLISECONDS.toMinutes((long) finalTime),
                            TimeUnit.MILLISECONDS.toSeconds((long) finalTime) -
                                    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) finalTime)))
                    );

                    tvStartTime.setText(String.format("%d:%d",
                            TimeUnit.MILLISECONDS.toMinutes((long) startTime),
                            TimeUnit.MILLISECONDS.toSeconds((long) startTime) -
                                    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) startTime)))
                    );

                    seekbar.setProgress((int) startTime);
                    myHandler.postDelayed(UpdateSongTime, 100);
                }
            });
            mediaPlayer.prepareAsync();
        }
    });

    seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            if(mediaPlayer != null && fromUser){
                mediaPlayer.seekTo(progress);
            }
        }
    });
}

@Override
public void onClick(View v) {

    switch (v.getId()) {
        case R.id.ibPrev:
            songs.get(songID).setVisible(false);
            songAdapter.notifyDataSetChanged();
            songID--;
            if(songID<0){
                songID=0;
            }

            if (songID >= 0) {
                startPlaying("http://.../apps/content/mp3/" + songs.get(songID).getSong().replace(" ", "%20"));
                songs.get(songID).setVisible(true);
                songAdapter.notifyDataSetChanged();
            }
            break;

        case R.id.ibPlay:
            if (mediaPlayer.isPlaying()) {
                if (mediaPlayer != null) {
                    mediaPlayer.pause();
                    Log.i("Status:", " Paused");
                    ibPlay.setImageResource(R.drawable.ic_play_circle_outline_white_48dp);
                }
            } else {
                if (mediaPlayer != null) {
                    mediaPlayer.start();
                    Log.i("Status:", " Playing");
                    ibPlay.setImageResource(R.drawable.ic_pause_circle_outline_white_48dp);
                    finalTime = mediaPlayer.getDuration();
                    startTime = mediaPlayer.getCurrentPosition();
                    if (oneTimeOnly == 0) {
                        seekbar.setMax((int) finalTime);
                        oneTimeOnly = 1;
                    }
                    tvEndTime.setText(String.format("%d:%d",
                            TimeUnit.MILLISECONDS.toMinutes((long) finalTime),
                            TimeUnit.MILLISECONDS.toSeconds((long) finalTime) -
                                    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) finalTime)))
                    );

                    tvStartTime.setText(String.format("%d:%d",
                            TimeUnit.MILLISECONDS.toMinutes((long) startTime),
                            TimeUnit.MILLISECONDS.toSeconds((long) startTime) -
                                    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) startTime)))
                    );

                    seekbar.setProgress((int) startTime);
                    myHandler.postDelayed(UpdateSongTime, 100);
                }
            }
            break;

        case R.id.ibShare:
            Intent sendIntent = new Intent();
            sendIntent.setAction(Intent.ACTION_SEND);
            sendIntent.putExtra(Intent.EXTRA_TEXT, "Welcome to music radio");
            sendIntent.setType("text/plain");
            startActivity(sendIntent);
            break;

        case R.id.ibNext:
            songs.get(songID).setVisible(false);
            songAdapter.notifyDataSetChanged();
            songID++;
            if (songID==songs.size()){
                ibNext.setEnabled(false);
            }

            if (songID <= songs.size()) {
                startPlaying("http://..../apps/content/mp3/" + songs.get(songID).getSong().replace(" ", "%20"));
                songs.get(songID).setVisible(true);
                songAdapter.notifyDataSetChanged();
            }

            break;
        case R.id.ibFastForward:
            int temp = (int) startTime;

            if ((temp + forwardTime) <= finalTime) {
                startTime = startTime + forwardTime;
                mediaPlayer.seekTo((int) startTime);

            } else {
                Toast.makeText(getApplicationContext(), "Cannot jump forward 5 seconds", Toast.LENGTH_SHORT).show();
            }
            break;
        case R.id.ibFastRewind:
            int temp1 = (int) startTime;

            if ((temp1 - backwardTime) > 0) {
                startTime = startTime - backwardTime;
                mediaPlayer.seekTo((int) startTime);

            } else {
                Toast.makeText(getApplicationContext(), "Cannot jump backward 5 seconds", Toast.LENGTH_SHORT).show();
            }
            break;
    }
}


public void loadSongs() {

    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(URL_SONGS, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            nivAlbumArt.setImageUrl(URL_ALBUM_ART_BIG, imageLoader);
            Glide.with(AlbumPlayActivity.this).load(URL_ALBUM_ART_BLUR).asBitmap().into(new SimpleTarget<Bitmap>(700,300) {
                @Override
                public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                    Drawable drawable = new BitmapDrawable(resource);
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                        llList.setBackground(drawable);
                    }
                }
            });
            for (int i = 0; i < response.length(); i++) {
                try {
                    JSONObject jObj = response.getJSONObject(i);
                    SongListModel songModel = new SongListModel();

                    Log.i(">>REQ", jObj.toString());
                    songModel.setAlbum_id(jObj.getString("album_id"));
                    songModel.setCategory_id(jObj.getString("category_id"));
                    songModel.setId(jObj.getString("id"));
                    songModel.setSinger_id(jObj.getString("singer_id"));
                    songModel.setSong(jObj.getString("song"));

                    songs.add(songModel);
                    startPlaying("http://.../apps/content/mp3/" + songs.get(songID).getSong().replace(" ", "%20"));
                    songs.get(songID).setVisible(true);
                } catch (JSONException e) {
                    e.printStackTrace();
                }


            }
            songAdapter.notifyDataSetChanged();
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

        }
    });
    jsonArrayRequest.setRetryPolicy(new DefaultRetryPolicy(
            (int) TimeUnit.SECONDS.toMillis(20),
            DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
   AppController.getInstance().addToRequestQueue(jsonArrayRequest);
}

private void startPlaying(final String position) {
    stopPlaying();
    mediaPlayer = new MediaPlayer();
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    try {
        mediaPlayer.setDataSource(position);
    } catch (IOException e) {
        e.printStackTrace();
    }
    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            mp.start();
            currentlyPlaying=songID; // member field (int)
            finalTime = mp.getDuration();
            startTime = mp.getCurrentPosition();
            ibPlay.setImageResource(R.drawable.ic_pause_circle_outline_white_48dp);
            if (oneTimeOnly == 0) {
                seekbar.setMax((int) finalTime);
                oneTimeOnly = 1;
            }
            tvEndTime.setText(String.format("%d:%d",
                    TimeUnit.MILLISECONDS.toMinutes((long) finalTime),
                    TimeUnit.MILLISECONDS.toSeconds((long) finalTime) -
                            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) finalTime)))
            );

            tvStartTime.setText(String.format("%d:%d",
                    TimeUnit.MILLISECONDS.toMinutes((long) startTime),
                    TimeUnit.MILLISECONDS.toSeconds((long) startTime) -
                            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) startTime)))
            );

            seekbar.setProgress((int) startTime);
            myHandler.postDelayed(UpdateSongTime, 100);
        }
    });

    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mediaPlayer) {
            if(currentlyPlaying >= songs.size()){

            } else {
                startPlaying(position);
            }
        }
    });

    mediaPlayer.prepareAsync();
}



private void stopPlaying() {
    if (mediaPlayer != null) {
        mediaPlayer.stop();
        mediaPlayer.reset();
        mediaPlayer.release();
        mediaPlayer = null;

        myHandler.removeCallbacks(UpdateSongTime);
    }
}

@Override
public void onBackPressed() {
    stopPlaying();
    finish();
}
@Override
public boolean onCreateOptionsMenu (Menu menu) {

    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == android.R.id.home) {
        stopPlaying();
        finish();
        return true;
    }

    if (id == R.id.action_home) {
        stopPlaying();
        Intent intent = new Intent(AlbumPlayActivity.this,HomeActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
        finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

private Runnable UpdateSongTime = new Runnable() {
    public void run() {
        startTime = mediaPlayer.getCurrentPosition();
        seekbar.setProgress((int) startTime);
        tvStartTime.setText(String.format("%d:%d",

                TimeUnit.MILLISECONDS.toMinutes((long) startTime),
                TimeUnit.MILLISECONDS.toSeconds((long) startTime) -
                        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.
                                toMinutes((long) startTime)))
        );

        myHandler.postDelayed(this, 100);
    }
};

}

I am trying to modification on my apps. First I submit one method by now I submitted full class. One person trying to help me but I am not successful its not properly working. Last Time I updated my code but its player same song again and again. Please observe my code and give me the best suggestion. I am not a professional expert developer. I am a beginner in app development.. So Please give me exact code.

Community
  • 1
  • 1
it's JU
  • 31
  • 1
  • 2
  • 6

1 Answers1

0

You already have a list of all songs, so I suggest you provide the position of the song you want to play instead of the URL to your MediaPlayer:

public class AlbumPlayActivity extends AppCompatActivity implements View.OnClickListener {
private List<SongListModel> songs = new ArrayList<SongListModel>();
private SongAdapter songAdapter;
String URL_SONGS;
String URL_ALBUM_ART;
String URL_ALBUM_ART_BIG;
String URL_ALBUM_ART_BLUR;
String URL_MP3;
ListView lvSongs;
MediaPlayer mediaPlayer;
NetworkImageView nivAlbumArt,nivAlbumArtBlur;
private double startTime = 0;
private double finalTime = 0;
private Handler myHandler = new Handler();

public int currentlyPlaying;

private int forwardTime = 5000;
private int backwardTime = 5000;
private SeekBar seekbar;
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
public int oneTimeOnly = 0;
int songID = 0;
ImageButton ibPrev, ibPlay, ibPause, ibNext, ibFastForward, ibFastRewind;
TextView tvStartTime, tvEndTime;
RelativeLayout llList;
ImageButton ibShare;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_album_play);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayShowTitleEnabled(false);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    URL_SONGS = getIntent().getExtras().getString("URL_SONG");
    URL_ALBUM_ART = getIntent().getExtras().getString("URL_ALBUM_ART");
    URL_ALBUM_ART_BIG = getIntent().getExtras().getString("URL_ALBUM_ART_BIG");
    URL_ALBUM_ART_BLUR = getIntent().getExtras().getString("URL_ALBUM_ART_BLUR");
    imageLoader = AppController.getInstance().getImageLoader();
    lvSongs = (ListView) findViewById(R.id.lvSongList);
    nivAlbumArt = (NetworkImageView) findViewById(R.id.nivAlbumArt);
    ibNext = (ImageButton) findViewById(R.id.ibNext);
    ibPlay = (ImageButton) findViewById(R.id.ibPlay);
    ibFastRewind = (ImageButton) findViewById(R.id.ibFastRewind);
    ibFastForward = (ImageButton) findViewById(R.id.ibFastForward);
    ibPrev = (ImageButton) findViewById(R.id.ibPrev);
    seekbar = (SeekBar) findViewById(R.id.seekBar);
    tvStartTime = (TextView) findViewById(R.id.tvStartTime);
    tvEndTime = (TextView) findViewById(R.id.tvEndTime);
    llList = (RelativeLayout)findViewById(R.id.llList);
    ibShare = (ImageButton)findViewById(R.id.ibShare);
    seekbar.setClickable(false);
    ibNext.setOnClickListener(this);
    ibPlay.setOnClickListener(this);
    ibPrev.setOnClickListener(this);
    ibFastRewind.setOnClickListener(this);
    ibFastForward.setOnClickListener(this);
    ibShare.setOnClickListener(this);

    songAdapter = new SongAdapter(this, songs);
    lvSongs.setAdapter(songAdapter);


    loadSongs();

    lvSongs.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            songs.get(songID).setVisible(false);
            songAdapter.notifyDataSetChanged();
            songID = position;
            stopPlaying();
            URL_MP3 = "http://your_host/apps/content/mp3/" + songs.get(position).getSong().replace(" ", "%20");
            songs.get(songID).setVisible(true);
            mediaPlayer = new MediaPlayer();
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            try {
                mediaPlayer.setDataSource(URL_MP3);
            } catch (IOException e) {
                e.printStackTrace();
            }
            mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp.start();
                    ibPlay.setImageResource(R.drawable.ic_pause_circle_outline_white_48dp);

                    finalTime = mp.getDuration();
                    startTime = mp.getCurrentPosition();
                    if (oneTimeOnly == 0) {
                        seekbar.setMax((int) finalTime);
                        oneTimeOnly = 1;
                    }
                    tvEndTime.setText(String.format("%d:%d",
                            TimeUnit.MILLISECONDS.toMinutes((long) finalTime),
                            TimeUnit.MILLISECONDS.toSeconds((long) finalTime) -
                                    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) finalTime)))
                    );

                    tvStartTime.setText(String.format("%d:%d",
                            TimeUnit.MILLISECONDS.toMinutes((long) startTime),
                            TimeUnit.MILLISECONDS.toSeconds((long) startTime) -
                                    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) startTime)))
                    );

                    seekbar.setProgress((int) startTime);
                    myHandler.postDelayed(UpdateSongTime, 100);
                }
            });
            mediaPlayer.prepareAsync();
        }
    });

    seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            if(mediaPlayer != null && fromUser){
                mediaPlayer.seekTo(progress);
            }
        }
    });
}

@Override
public void onClick(View v) {

    switch (v.getId()) {
        case R.id.ibPrev:
            songs.get(songID).setVisible(false);
            songAdapter.notifyDataSetChanged();
            songID--;
            if(songID<0){
                songID=0;
            }

            if (songID >= 0) {
                startPlaying("http://..../apps/content/mp3/" + songs.get(songID).getSong().replace(" ", "%20"));
                songs.get(songID).setVisible(true);
                songAdapter.notifyDataSetChanged();
            }
            break;

        case R.id.ibPlay:
            if (mediaPlayer.isPlaying()) {
                if (mediaPlayer != null) {
                    mediaPlayer.pause();
                    Log.i("Status:", " Paused");
                    ibPlay.setImageResource(R.drawable.ic_play_circle_outline_white_48dp);
                }
            } else {
                if (mediaPlayer != null) {
                    mediaPlayer.start();
                    Log.i("Status:", " Playing");
                    ibPlay.setImageResource(R.drawable.ic_pause_circle_outline_white_48dp);
                    finalTime = mediaPlayer.getDuration();
                    startTime = mediaPlayer.getCurrentPosition();
                    if (oneTimeOnly == 0) {
                        seekbar.setMax((int) finalTime);
                        oneTimeOnly = 1;
                    }
                    tvEndTime.setText(String.format("%d:%d",
                            TimeUnit.MILLISECONDS.toMinutes((long) finalTime),
                            TimeUnit.MILLISECONDS.toSeconds((long) finalTime) -
                                    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) finalTime)))
                    );

                    tvStartTime.setText(String.format("%d:%d",
                            TimeUnit.MILLISECONDS.toMinutes((long) startTime),
                            TimeUnit.MILLISECONDS.toSeconds((long) startTime) -
                                    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) startTime)))
                    );

                    seekbar.setProgress((int) startTime);
                    myHandler.postDelayed(UpdateSongTime, 100);
                }
            }
            break;

        case R.id.ibShare:
            Intent sendIntent = new Intent();
            sendIntent.setAction(Intent.ACTION_SEND);
            sendIntent.putExtra(Intent.EXTRA_TEXT, "Welcome to music radio");
            sendIntent.setType("text/plain");
            startActivity(sendIntent);
            break;

        case R.id.ibNext:
            songs.get(songID).setVisible(false);
            songAdapter.notifyDataSetChanged();
            songID++;
            if (songID==songs.size()){
                ibNext.setEnabled(false);
            }

            if (songID <= songs.size()) {
                startPlaying("http://..../apps/content/mp3/" + songs.get(songID).getSong().replace(" ", "%20"));
                songs.get(songID).setVisible(true);
                songAdapter.notifyDataSetChanged();
            }

            break;
        case R.id.ibFastForward:
            int temp = (int) startTime;

            if ((temp + forwardTime) <= finalTime) {
                startTime = startTime + forwardTime;
                mediaPlayer.seekTo((int) startTime);

            } else {
                Toast.makeText(getApplicationContext(), "Cannot jump forward 5 seconds", Toast.LENGTH_SHORT).show();
            }
            break;
        case R.id.ibFastRewind:
            int temp1 = (int) startTime;

            if ((temp1 - backwardTime) > 0) {
                startTime = startTime - backwardTime;
                mediaPlayer.seekTo((int) startTime);

            } else {
                Toast.makeText(getApplicationContext(), "Cannot jump backward 5 seconds", Toast.LENGTH_SHORT).show();
            }
            break;
    }
}


public void loadSongs() {

    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(URL_SONGS, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            nivAlbumArt.setImageUrl(URL_ALBUM_ART_BIG, imageLoader);
            Glide.with(AlbumPlayActivity.this).load(URL_ALBUM_ART_BLUR).asBitmap().into(new SimpleTarget<Bitmap>(700,300) {
                @Override
                public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                    Drawable drawable = new BitmapDrawable(resource);
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                        llList.setBackground(drawable);
                    }
                }
            });
            for (int i = 0; i < response.length(); i++) {
                try {
                    JSONObject jObj = response.getJSONObject(i);
                    SongListModel songModel = new SongListModel();

                    Log.i(">>REQ", jObj.toString());
                    songModel.setAlbum_id(jObj.getString("album_id"));
                    songModel.setCategory_id(jObj.getString("category_id"));
                    songModel.setId(jObj.getString("id"));
                    songModel.setSinger_id(jObj.getString("singer_id"));
                    songModel.setSong(jObj.getString("song"));

                    songs.add(songModel);
                    startPlaying(songID);
                    songs.get(songID).setVisible(true);
                } catch (JSONException e) {
                    e.printStackTrace();
                }


            }
            songAdapter.notifyDataSetChanged();
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

        }
    });
    jsonArrayRequest.setRetryPolicy(new DefaultRetryPolicy(
            (int) TimeUnit.SECONDS.toMillis(20),
            DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
   AppController.getInstance().addToRequestQueue(jsonArrayRequest);
}

private void startPlaying(final int position) {
    stopPlaying();
    mediaPlayer = new MediaPlayer();
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    try {
        mediaPlayer.setDataSource("http://..../apps/content/mp3/" + songs.get(position).getSong().replace(" ", "%20"));
    } catch (IOException e) {
        e.printStackTrace();
    }
    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            mp.start();
            currentlyPlaying = position;
            finalTime = mp.getDuration();
            startTime = mp.getCurrentPosition();
            ibPlay.setImageResource(R.drawable.ic_pause_circle_outline_white_48dp);
            if (oneTimeOnly == 0) {
                seekbar.setMax((int) finalTime);
                oneTimeOnly = 1;
            }
            tvEndTime.setText(String.format("%d:%d",
                    TimeUnit.MILLISECONDS.toMinutes((long) finalTime),
                    TimeUnit.MILLISECONDS.toSeconds((long) finalTime) -
                            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) finalTime)))
            );

            tvStartTime.setText(String.format("%d:%d",
                    TimeUnit.MILLISECONDS.toMinutes((long) startTime),
                    TimeUnit.MILLISECONDS.toSeconds((long) startTime) -
                            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) startTime)))
            );

            seekbar.setProgress((int) startTime);
            myHandler.postDelayed(UpdateSongTime, 100);
        }
    });

    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mediaPlayer) {
         currentlyPlaying++;
            if(currentlyPlaying >= songs.size())
                currentlyPlaying = 0;
             startPlaying(currentlyPlaying);                
        }
    });

    mediaPlayer.prepareAsync();
}



private void stopPlaying() {
    if (mediaPlayer != null) {
        mediaPlayer.stop();
        mediaPlayer.reset();
        mediaPlayer.release();
        mediaPlayer = null;

        myHandler.removeCallbacks(UpdateSongTime);
    }
}

@Override
public void onBackPressed() {
    stopPlaying();
    finish();
}
@Override
public boolean onCreateOptionsMenu (Menu menu) {

    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == android.R.id.home) {
        stopPlaying();
        finish();
        return true;
    }

    if (id == R.id.action_home) {
        stopPlaying();
        Intent intent = new Intent(AlbumPlayActivity.this,HomeActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
        finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

private Runnable UpdateSongTime = new Runnable() {
    public void run() {
        startTime = mediaPlayer.getCurrentPosition();
        seekbar.setProgress((int) startTime);
        tvStartTime.setText(String.format("%d:%d",

                TimeUnit.MILLISECONDS.toMinutes((long) startTime),
                TimeUnit.MILLISECONDS.toSeconds((long) startTime) -
                        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.
                                toMinutes((long) startTime)))
        );

        myHandler.postDelayed(this, 100);
    }
};
Droidman
  • 11,485
  • 17
  • 93
  • 141
  • what is currentlyPlaying?? I tried your code but 'currentlyPlaying = position' is the error. @Droidman – it's JU Sep 21 '17 at 12:32
  • currentlyPlaying ist just an `int` that you declare in the same class you have the playback method in - it indicates the position (or index) of the song currently being played in your List – Droidman Sep 21 '17 at 12:39
  • Sorry man as a beginner I can't understand what you say about currentlyPlaying. I also added loadSongs method. Plese, Just tell me what I write place of currentlyPlaying..@Droidman – it's JU Sep 21 '17 at 13:06
  • as I've said, this is just a *member variable* that you'll need to declare - I can't add this line for you since I don't have your complete class code. If you don't know what a member variable/field is, you start by learning Java basics. Check https://docs.oracle.com/javase/tutorial/java/javaOO/variables.html in their example Bicycle class, cadence, gear and speed are *member fields* – Droidman Sep 21 '17 at 13:10
  • I add my complete class. Now Please help me and give me the exact code. Update your answer code...@Droidman – it's JU Sep 21 '17 at 13:44
  • actually I see that you already declared that int.. your code should work from what I can see. Any specific problems? Don't forget to change your method to private void `startPlaying(int position)` – Droidman Sep 21 '17 at 13:53
  • I tried now same song played again and again. I uploaded my modified code.Do you please again review my class and give me solution..@Droidman – it's JU Sep 22 '17 at 06:26
  • @it'sJU here you have the full code. Try it now - though I haven't tested it – Droidman Sep 22 '17 at 08:24
  • @it'sJU Let me know if your IDE shows any errors - it's hard to edit such a ton of code with the StackOverflow text editor – Droidman Sep 22 '17 at 08:30