nafiefn_10

Untitled

Jun 20th, 2021
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.48 KB | None | 0 0
  1. package nofieanggraeni.blogspot.com.musicplayer;
  2.  
  3. import androidx.appcompat.app.AppCompatActivity;
  4.  
  5. import android.content.res.AssetFileDescriptor;
  6. import android.media.MediaMetadataRetriever;
  7. import android.media.MediaPlayer;
  8. import android.os.Bundle;
  9. import android.os.Handler;
  10. import android.util.Log;
  11. import android.view.View;
  12. import android.widget.SeekBar;
  13. import android.widget.TextView;
  14.  
  15. import java.util.concurrent.TimeUnit;
  16.  
  17. public class MainActivity extends AppCompatActivity {
  18.     private MediaPlayer mediaPlayer;
  19.     private TextView songName, songDuration;
  20.     private SeekBar seekBar;
  21.     private double timeStart =0, finalTime =0;
  22.     private int forwardTime = 20000, backwardTime = 20000;
  23.     private Handler durationHandler = new Handler();
  24.     private boolean swtch = false;
  25.     @Override
  26.     protected void onCreate(Bundle savedInstanceState) {
  27.         super.onCreate(savedInstanceState);
  28.         setContentView(R.layout.activity_main);
  29.         songName = (TextView) findViewById(R.id.songName);
  30.         songDuration = (TextView) findViewById(R.id.songDuration);
  31.         mediaPlayer = MediaPlayer.create(this, R.raw.music1);
  32.         MediaMetadataRetriever meta = new MediaMetadataRetriever();
  33.         final AssetFileDescriptor afd= getResources().openRawResourceFd(R.raw.music1);
  34.         meta.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(),afd.getLength());
  35.         String music_duration = meta.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
  36.         finalTime = Long.parseLong(music_duration);
  37.  
  38.         Log.v("musicDuration", "Duration :" +music_duration);
  39.         seekBar = (SeekBar) findViewById(R.id.seekBar);
  40.         songName.setText("Virgoun - Bukti.mp3");
  41.         seekBar.setMax((int) finalTime);
  42.         seekBar.setOnSeekBarChangeListener(new yourListener());
  43.         seekBar.setClickable(false);
  44.  
  45.     }
  46.  
  47.     private class yourListener implements SeekBar.OnSeekBarChangeListener {
  48.         public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){
  49.             if (swtch){
  50.                 mediaPlayer.seekTo(progress);
  51.             }
  52.         }
  53.         public void onStartTrackingTouch(SeekBar seekBar){
  54.             swtch = true;
  55.         }
  56.         public void onStopTrackingTouch(SeekBar seekBar){
  57.             swtch = false;
  58.         }
  59.     }
  60.     private Runnable updateSeekBarTime = new Runnable() {
  61.         @Override
  62.         public void run() {
  63.             timeStart = mediaPlayer.getCurrentPosition();
  64.             seekBar.setProgress((int) timeStart);
  65.             double timeRemaining = finalTime-timeStart;
  66.             songDuration.setText(String.format("%d min, %d sec", TimeUnit.MILLISECONDS.toMinutes((long) timeRemaining), TimeUnit.MILLISECONDS.toSeconds((long) timeRemaining)- TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) timeRemaining))));
  67.             durationHandler.postDelayed(this, 1000);
  68.         }
  69.     };
  70.     public void play(View view){
  71.         mediaPlayer.start();
  72.         timeStart = mediaPlayer.getCurrentPosition();
  73.         seekBar.setProgress((int) timeStart);
  74.         durationHandler.postDelayed(updateSeekBarTime, 100);
  75.     }
  76.     public void pause(View view){
  77.         mediaPlayer.pause();
  78.     }
  79.     public void forward(View view){
  80.         timeStart = timeStart + forwardTime;
  81.         mediaPlayer.seekTo((int) timeStart);
  82.     }
  83.     public void backforward(View view){
  84.         timeStart = timeStart - backwardTime;
  85.         mediaPlayer.seekTo((int) timeStart);
  86.     }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment