본문 바로가기
안드로이드 자바

[JAVA][Android] MediaPlayer로 음악 재생하기

by teamnova 2024. 6. 26.
728x90

안녕하세요.

오늘은 안드로이드에서 MediaPlayer를 사용해서 음악을 재생하는 예제입니다.

 

MediaPlayer는 안드로이드의 미디어 프레임워크의 일부로, 다양한 기능을 제공합니다.
MediaPlayer에 대한 자세한 내용은 다음 개발자 문서를 참고하세요.

https://developer.android.com/reference/android/media/MediaPlayer

 

MediaPlayer  |  Android Developers

 

developer.android.com

 

 

이 글에서는 /res/raw 폴더에 미리 넣어둔 mp3 파일을 실행하는 간단한 작업부터 시작해보겠습니다.

 

1. raw 폴더 안에 mp3 파일 집어넣기.

 

먼저 res 폴더를 우클릭해서 리소스 디렉토리 생성 창을 엽니다.

 

위 이미지처럼 리소스 타입을 raw로 놓고 폴더를 생성합니다.

 

 

그리고 예제에 사용할 mp3파일을 위 이미지와 같이 raw 폴더 안에 넣어줍니다.

 

 

2. 레이아웃 파일 작성

 

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <!-- 재생 버튼 -->
    <Button
        android:id="@+id/buttonPlay"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="재생"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <!-- 음악 재생 상태를 표시할 텍스트 뷰 -->
    <TextView
        android:id="@+id/textViewStatus"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="100dp"
        android:text="상태 : 표시"
        app:layout_constraintBottom_toTopOf="@+id/buttonPlay"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

 

3. MainActivity 작성

 

package com.walkfriend.musicplayertest;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    // MediaPlayer 객체를 선언합니다.
    private MediaPlayer mediaPlayer;
    // 음악 재생 상태를 표시할 TextView를 선언합니다.
    private TextView textViewStatus;

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

        // 레이아웃에서 버튼과 텍스트 뷰를 찾습니다.
        Button buttonPlay = findViewById(R.id.buttonPlay);
        textViewStatus = findViewById(R.id.textViewStatus);

        // 버튼 클릭 리스너를 설정합니다.
        buttonPlay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // MediaPlayer가 이미 초기화되었다면, 재생을 멈추고 자원을 해제합니다.
                if (mediaPlayer != null) {
                    mediaPlayer.stop();
                    mediaPlayer.release();
                    mediaPlayer = null;
                }

                // MediaPlayer 객체를 새로 생성하고 로컬 음악 파일을 설정합니다.
                mediaPlayer = MediaPlayer.create(MainActivity.this, R.raw.music_file);

                // 준비 완료 리스너를 설정합니다.
                mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        // 준비가 완료되면 재생을 시작합니다.
                        mediaPlayer.start();
                        textViewStatus.setText("상태: 재생중");
                    }
                });
                // 재생 완료 리스너를 설정합니다.
                mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mp) {
                        // 재생이 완료되면 상태를 업데이트합니다.
                        textViewStatus.setText("상태: 종료");
                    }
                });

                // 예외가 발생할 수 있는 초기화 과정을 try-catch 블록으로 감쌉니다.
                try {
                    mediaPlayer.prepare();
                } catch (Exception e) {
                    // 예외가 발생하면 로그를 출력하고 상태를 업데이트합니다.
                    Log.e("mediaPlayer", "오류: ", e);
                    textViewStatus.setText("상태: 오류");
                }
            }
        });
    }

    @Override
    protected void onDestroy() {
        // 액티비티가 종료될 때, MediaPlayer 자원을 해제합니다.
        if (mediaPlayer != null) {
            mediaPlayer.release();
            mediaPlayer = null;
        }
        super.onDestroy();
    }
}