본문 바로가기
안드로이드

[Android] 7. 멀티미디어 - 음악 재생하기

qbang 2019. 9. 6.

이번 시간에는 7강 데이터베이스의 두번째 강의인 '음악 재생하기' 리뷰입니다.

개념을 알아보면서 실습한 내용을 덧붙여 알아보도록 하겠습니다!

 


스마트폰에서 음악을 재생하는 일, 정말 많습니다.

음악 파일을 재생하기 위해서는 미디어 플레이어(MediaPlayer)를 사용하며 대상을 먼저 지정해야 합니다.

미디어플레이어를 이용하면 음악 파일의 재생은 물론 동영상 재생도 가능합니다.

 

AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"/>

파일이 인터넷에 있다면 먼저 권한을 추가해줍니다.

 

activity_main.xml

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


    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="147dp"
        android:layout_marginEnd="157dp"
        android:text="재생" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="49dp"
        android:layout_marginEnd="77dp"
        android:text="일시정지" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="48dp"
        android:layout_alignParentEnd="true"
        android:layout_alignParentBottom="true"
        android:layout_marginTop="-47dp"
        android:layout_marginEnd="289dp"
        android:layout_marginBottom="436dp"
        android:text="재시작" />

    <Button
        android:id="@+id/button5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentBottom="true"
        android:layout_marginStart="166dp"
        android:layout_marginBottom="361dp"
        android:text="정지" />
</RelativeLayout>

 

MainActivity.java

package com.example.myaudioplayer;

import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    public static String url = "http://techtown.org/download/a.mp3";

    MediaPlayer player;
    int position = 0;

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

        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                playAudio();
            }
        });

        Button button2 = (Button) findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                pauseAudio();
            }
        });

        Button button3 = (Button) findViewById(R.id.button3);
        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                resumeAudio();
            }
        });

        Button button4 = (Button) findViewById(R.id.button5);
        button4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                stopAudio();
            }
        });
    }

    //오디오 재생
    public void playAudio(){
        try{
            //사용자가 여러번 버튼을 클릭했을 경우를 대비하여 항상 초기화를 해줌
            closePlayer();

            player = new MediaPlayer();
            player.setDataSource(url);
            player.prepare();
            player.start();

            Toast.makeText(this, "재생 시작됨", Toast.LENGTH_LONG).show();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    //오디오 일시중지
    public void pauseAudio(){
        if(player != null){
            position = player.getCurrentPosition();
            player.pause();

            Toast.makeText(this, "일시정지됨", Toast.LENGTH_LONG).show();
        }
    }
    //오디오 재시작
    public void resumeAudio(){
        if(player != null && player.isPlaying()){
            player.seekTo(position);
            player.start();

            Toast.makeText(this, "재시작됨", Toast.LENGTH_LONG).show();
        }
    }
    //오디오 중지
    public void stopAudio(){
        if(player != null && player.isPlaying()){
            player.stop();

            Toast.makeText(this, "중지됨", Toast.LENGTH_LONG).show();
        }
    }


    //오디오 초기화
    public void closePlayer(){
        if(player != null){
            player.release();
            player = null;
        }
    }


}

댓글