본문 바로가기
Android Studio

[Android Studio] 첫 안드로이드 앱 개발 시작해보기 - Service (11)

by jisayDeveloper 2023. 11. 9.
728x90
반응형
SMALL

안드로이드 Service를  이용해서 bgm 재생하는 법을 알아보겠습니다.

 

우선 유튜브를 이용해서 저작권 없는 mp3파일 다운받습니다.

https://studio.youtube.com/

 

YouTube

이메일 또는 휴대전화

accounts.google.com

위 사이트 오디오 보관함에 가서 저작권 없는 아무 노래 다운받습니다.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        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"
        android:orientation="vertical"
        tools:context=".MainActivity">

    <Button android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:text="Start"
            android:id="@+id/btn_start"/>

    <Button android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:text="End"
            android:id="@+id/btn_stop"/>

</LinearLayout>

간단하게 음악을 켜고 끌 버튼을 만듭니다.

 

그리고 다운받은 음악을 프로젝트에 저장하는데 다음과 같은 순서를 따릅니다.

res 우클릭 → New →  Android Resource Directory 를 누르면 

Resource type 에 raw를 선택하면 res 하위에 raw폴더가 만들어지면 이 폴더에 다운받은 음악을 복붙합니다.

 

이때 주의할 점은 음악이름에 대문자가 들어가면 안됩니다!

 

MusicService

package com.example.serviceexample;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import androidx.annotation.Nullable;

public class MusicService extends Service {

    MediaPlayer mediaPlayer;


    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();

        mediaPlayer = MediaPlayer.create(this, R.raw.sample_music1);
        mediaPlayer.setLooping(true); //연속재생
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        mediaPlayer.start();
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mediaPlayer.stop();
    }
}

Service를 상속하면 onBind를 꼭 오버라이드 해야하는데 onBind는 간단하게 말해서 클라이언트와 서비스 간의 통신을 설정하기 위한 인터페이스를 제공하는 역할을 합니다.  지금 예제에선 사용 안 할 겁니다.

 

onCreate 메서드에서 MediaPlayer를 초기화하는데 onStartCommend에서 안하는 이유는 onCreate에서 Service 가 호출될 때 한번만 생성하기 때문에 onStartCommend에 초기화하면 호출될때마다 생성하기 때문에 일반적으로 onCreate에 초기화하고 onStartCommend에서 start()하는게 맞습니다.

 

MainActivity

package com.example.serviceexample;

import android.content.Intent;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    Button btn_start, btn_stop;

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

        btn_start = (Button) findViewById(R.id.btn_start);
        btn_stop = (Button) findViewById(R.id.btn_stop);

        btn_start.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                startService(new Intent(getApplicationContext(),
                        MusicService.class));
            }
        });

        btn_stop.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                stopService(new Intent(getApplicationContext(),
                        MusicService.class));
            }
        });


    }
}

 

btn_start와 btn_stop 버튼에 이벤트 걸고 intent 통해서 각각의 맞는 서비스를 실행합니다.

 

 

728x90
반응형
LIST