본문 바로가기

안드로이드

[안드로이드] 간단한 MP3 플레이어 앱 만들기

728x90

# 간단한 MP3 플레이어 기능

안드로이드 스튜디오에서 구현할 수 있는 간단한 MP3 플레이어 앱입니다.

 

# 준비물

mp3 파일 2~3개 이상

 

 

# AndroidManifest.xml

SD카드 공간을 사용하기 위해 permission 속성 추가입니다.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>	// 이 코드와
<application
    android:requestLegacyExternalStorage="true"					// 이 코드를 추가합니다.

 

 

# mp3 파일 저장

몇 개의 mp3파일을 Device File Explorer에서

storage > emulated > 0 에 넣어줍니다.

해당 폴더를 우클릭하여 upload로 저장할 수 있습니다.

저장하고나면 아래쪽에 song1.mp3 ~ song3.mp3 처럼 파일이 저장된 것을 확인할 수 있습니다.

 

 

# activity_main.xml

메인 액티비티의 화면을 구성합니다.

위치: project > app > res > layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="6">
        
        // mp3 리스트를 보여주고 선택합니다.
        <ListView
            android:id="@+id/listViewMP3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
        
        // 재생버튼, 정지버튼
        <Button
            android:id="@+id/btnPlay"
            android:layout_weight="1"
            android:layout_margin="3dp"
            android:text="재생"
            android:textSize="30dp"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
        <Button
            android:id="@+id/btnStop"
            android:layout_weight="1"
            android:layout_margin="3dp"
            android:textSize="30dp"
            android:text="정지"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
        
        // 현재 재생중인 음악을 보여줍니다.
        <TextView
            android:id="@+id/tvMP3"
            android:gravity="center"
            android:text="실행중인 음악:"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"/>
        
        // 재생되고 있다는 애니메이션을 표현합니다.
        <ProgressBar
            android:id="@+id/pbMP3"
            android:visibility="invisible"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"/>
    </LinearLayout>
</LinearLayout>

 

 

# MainActivity.java

메인 액티비티의 기능을 구현합니다.

위치: project > add > java > "프로젝트명" 

 

package com.exam.p13_1_mp3player;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import android.Manifest;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    ListView listViewMP3;
    Button btnPlay, btnStop;
    TextView tvMP3;
    ProgressBar pbMP3;

    ArrayList<String> mp3List;
    String selectedMP3;

    String mp3Path = Environment.getExternalStorageDirectory().getPath() + "/";
    MediaPlayer mPlayer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("MP3 PLAYER");
        
        // SD카드를 사용하겠다는 permission 설정
        ActivityCompat.requestPermissions(this, new String[] {
                Manifest.permission.WRITE_EXTERNAL_STORAGE}, MODE_PRIVATE);

        mp3List = new ArrayList<String>();

        // mp3 파일 불러오기
        File[] listFiles = new File(mp3Path).listFiles();
        String fileName, extName;
        for(File file : listFiles){
            fileName = file.getName();
            extName = fileName.substring(fileName.length() - 3);
            if(extName.equals((String) "mp3"))
                mp3List.add((fileName));
        }

        // 리스트뷰에 mp3 음악 추가하기
        listViewMP3 = findViewById(R.id.listViewMP3);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_single_choice, mp3List);
        listViewMP3.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        listViewMP3.setAdapter(adapter);
        listViewMP3.setItemChecked(0, true);

        listViewMP3.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                selectedMP3 = mp3List.get(i);
            }
        });
        selectedMP3 = mp3List.get(0);


        btnPlay = findViewById(R.id.btnPlay);
        btnStop = findViewById(R.id.btnStop);
        tvMP3 = findViewById(R.id.tvMP3);
        pbMP3 = findViewById(R.id.pbMP3);
		
        // 재생버튼
        btnPlay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                try{
                    mPlayer = new MediaPlayer();
                    mPlayer.setDataSource(mp3Path + selectedMP3);
                    mPlayer.prepare();
                    mPlayer.start();
                    btnPlay.setClickable(false);
                    btnStop.setClickable(true);
                    tvMP3.setText("실행중인 음악:" + selectedMP3);
                    pbMP3.setVisibility(View.VISIBLE);
                }catch (IOException e){}
            }
        });

        // 정지 버튼
        btnStop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mPlayer.start();
                mPlayer.reset();
                btnPlay.setClickable(true);
                btnStop.setClickable(false);
                tvMP3.setText("실행중인 음악: ");
                pbMP3.setVisibility(View.INVISIBLE);

            }
        });

        btnStop.setClickable(false);
    }
}
728x90