0

I have looked everywhere to fix my problem but i just cant seem to get it going.

How do i make seekbar automatically slide with song play ?

this is what i have so 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 from updating progress bar
              seekHandler.removeCallbacks(mUpdateTimeTask);
              int totalDuration = mediaPlayer.getDuration();
              int currentPosition = progressToTimer(seekBar.getProgress(), totalDuration);

              // forward or backward to certain seconds
              mediaPlayer.seekTo(currentPosition);

              // update timer progress again
              updateProgressBar();
          }

          @Override
          public void onStartTrackingTouch(SeekBar seekBar) {
              // remove message Handler from 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 this 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 into 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 to seconds if it is one digit
      if (seconds < 10) {
          secondsString = "0" + seconds;
      } else {
          secondsString = "" + seconds;
      }

      finalTimerString = finalTimerString + minutes + ":" + secondsString;

      // return timer string
      return finalTimerString;
  }

I didnt include the song list and all the other stuff as i dont see why it would be necesary to put here. But anyways, when i do what i have here i dont get no error or anything, the seekbar just doesnt automatically move and when i try to move it manually to a position it goes right back to 0.

user3439273
  • 125
  • 1
  • 2
  • 12

1 Answers1

0

U set seekBar.setMax(mediaPlayer.getDuration()); where duration ~ 7 digits value. After that u count percents ~ 2 digits. U need set seekBar.setMax(100) or dont count percents and set progress as is.

Slampy
  • 326
  • 1
  • 7