Media player trong android (Bài 4)

Android cung cấp nhiều cách để điều khiển tập tin audio hoặc video. Một trong những cách này là sử dụng lớp MediaPlayer. Xử lý media player trong android chính là việc phát các tập tin audio/video, …. Để sử dụng lớp MediaPlayer trong android, chúng ta phải gọi phương thức create(). Phương thức này giúp chúng ta tạo một thể hiện của lớp MediaPlayer.

Phương thức start() sẽ được phát audio ngay từ đầu khi gọi phương thức này. Nếu phương thức start() được gọi sau phương thức pause() thì audio sẽ được phát từ chỗ nó bị dừng chứ không phải được phát từ đầu. Để phát audio ngay từ đầu, chúng ta phải sử dụng phương thức reset(). Ngoài ra MediaPlayer còn cung cấp các phương thức khác như bảng mô tả bên dưới.

 STT Phương thức và miêu tả
1 isPlaying()
Phương thức này trả về true nếu âm nhạc đang được phát và ngược lại
2 seekTo(position)
Nhận vào một số nguyên và di chuyển bài hát đến vị trí được chỉ định dựa vào position
3 getCurrentDuration()
Phương thức này trả về vị trí hiện tại của bài hát theo đơn vị mili giây
4 getDuration()
Phương thức này trả về tổng thời gian của bài hát theo đơn vị mili giây
5 setVolume(float leftVolume, float rightVolume)
Thiết lập âm lượng to nhỏ

Ví dụ xây dựng ứng dụng xử lý media player trong android cho phép bạn phát một bài hát (Play), dừng một bài hát (Pause), …

media player trong android

Hướng dẫn sử dụng media player trong android

Sử dụng project hiện có hoặc tạo mới project trong Android Studio và thực hiện các bước sau

Bước 1: Tạo thư mục tên raw và copy file nhạc vào thư mục này

Chuột phải package -> chọn New -> chọn Android resource directory

media player trong android

Nhập tên thư mục là raw tại Directory name và chỉ định raw tại Resource type

media player trong android 3

Copy file nhạc vào thư mục raw

Bước 2: Tạo activity và đặt tên MediaPlayerActivity

Tải hình và đặt vào thư mục drawable.

media player trong android 6

Thiết kế layout

media player trong android 5

Viết xử lý

public class MediaPlayerActivity extends AppCompatActivity {

    private ImageButton btnForward,btnPause,btnPlay,btnBackward;
    private MediaPlayer mediaPlayer;
    private double startTime = 0;
    private double finalTime = 0;
    private Handler myHandler = new Handler();;
    private int forwardTime = 5000;
    private int backwardTime = 5000;
    private SeekBar seekbar;
    private TextView tvStatus,tvStartTime,tvFinalTime,tvSongName;

    public static int oneTimeOnly = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_media_player);

        // Tham chiếu id của các View
        // ...
        tvSongName.setText("Nguoi Mien Tay");

        mediaPlayer = MediaPlayer.create(this,R.raw.nguoi_mien_tay);
        seekbar=(SeekBar)findViewById(R.id.seekBar);
        seekbar.setClickable(false);
        btnPause.setEnabled(false);
    }

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

                            TimeUnit.MILLISECONDS.toMinutes((long) startTime),
                            TimeUnit.MILLISECONDS.toSeconds((long) startTime) -
                                    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.
                                            toMinutes((long) startTime)))
            );
            seekbar.setProgress((int)startTime);
            myHandler.postDelayed(this, 100);
        }
    };

    public void playAction(View view){
        tvStatus.setText("Playing sound");
        mediaPlayer.start();

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

        if (oneTimeOnly == 0) {
            seekbar.setMax((int) finalTime);
            oneTimeOnly = 1;
        }
        tvFinalTime.setText(String.format("%d min, %d sec",
                        TimeUnit.MILLISECONDS.toMinutes((long) finalTime),
                        TimeUnit.MILLISECONDS.toSeconds((long) finalTime) -
                                TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) finalTime)))
        );

        tvStartTime.setText(String.format("%d min, %d sec",
                        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);
    }

    public void pauseAction(View v) {
        tvStatus.setText("Pausing sound");
        mediaPlayer.pause();
    }

    public void forwardAction(View v) {
        int temp = (int)startTime;

        if((temp+forwardTime)<=finalTime){
            startTime = startTime + forwardTime;
            mediaPlayer.seekTo((int) startTime);
            tvStatus.setText("You have Jumped forward 5 seconds");
        }
        else{
            tvStatus.setText("Cannot jump forward 5 seconds");
        }
    }

    public void backwardAction(View v) {
        int temp = (int)startTime;

        if((temp-backwardTime)>0){
            startTime = startTime - backwardTime;
            mediaPlayer.seekTo((int) startTime);
            tvStatus.setText("You have Jumped backward 5 seconds");
        }
        else{
            tvStatus.setText("Cannot jump backward 5 seconds");
        }
    }
}

Bước 3: Đăng ký sự kiện onClick cho các button

media player trong android 7

Media player trong android – Bài tập thực hành

Viết một ứng dụng nghe nhạc cho phép nghe nhạc từ một list.

Xem giáo trình môn Phát triển App Android

9 thoughts on “Media player trong android (Bài 4)

      1. đào văn thắng

        nhiều lắm ak
        ad cho em hỏi là giờ làm vậy cho hiển thị lời bài hát thì phải thêm j nữa ak cho e câu lệnh vs ak, với sao mà nhạc thì của ước nguyện mùa xuân lại hiển thị người miền tây ad

        1. David

          đoạn code trên là đọc cả một list trong raw kìa.
          mình muốn biết làm sao để lấy nhạc từ file Music trên bộ nhớ máy hoặc chỉ cần nó là nhạc thì tự động nó thêm vào list trên app_music? tương tự cho video luôn?

Trả lời