728x90
반응형
SMALL
안드로이드 Service를 이용해서 bgm 재생하는 법을 알아보겠습니다.
우선 유튜브를 이용해서 저작권 없는 mp3파일 다운받습니다.
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
'Android Studio' 카테고리의 다른 글
[Firebase] Firebase란? (1) | 2023.11.13 |
---|---|
[Android Studio] 첫 안드로이드 앱 개발 시작해보기 - Spinner (12) (0) | 2023.11.10 |
[Android Studio] 첫 안드로이드 앱 개발 시작해보기 - Thread, Dialog (10) (1) | 2023.11.08 |
[Android Studio] Android Studio + Spring Boot + mariaDB ( 로그인 ) (3) (0) | 2023.11.06 |
[Android Studio] Android Studio + Spring Boot + mariaDB ( 회원가입 ) (2) (0) | 2023.11.06 |