Android 앱에서 배경 음악을 재생하는 방법
이 튜토리얼에서는 Service와 MediaPlayer를 활용해 Android 앱에서 배경 음악을 재생하는 방법을 단계별로 살펴봅니다. 사용자가 다른 화면으로 이동하거나 앱을 최소화한 상태에서도 음악이 계속 흐르게 하려면, UI와 독립적으로 동작하는 백그라운드 컴포넌트인 서비스(Service)가 필요합니다.
1단계 — 새 프로젝트 생성
Android Studio에서 File → New Project 메뉴로 이동한 후, 필요한 정보를 모두 입력하여 새 프로젝트를 생성합니다.
2단계 — 레이아웃 파일 작성
res/layout/activity_main.xml 파일에 아래 코드를 추가합니다. 버튼 하나와 안내 텍스트로 구성된 간단한 세로 레이아웃입니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
android:padding="16dp">
<Button
android:onClick="PlayBackgroundSound"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Run background Sound"/>
<TextView
android:layout_marginTop="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:textStyle="bold"
android:text="Playing Music in Background"/>
</LinearLayout>
3단계 — MainActivity 구현
src/MainActivity.java에 아래 코드를 추가합니다. 버튼 클릭 시 BackgroundSoundService를 시작하는 인텐트(Intent)를 전달하는 것이 핵심입니다.
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void PlayBackgroundSound(View view) {
Intent intent = new Intent(MainActivity.this, BackgroundSoundService.class);
startService(intent);
}
}
4단계 — 오디오 리소스 파일 준비
res/raw 폴더를 새로 만들고, 배경에서 재생하고 싶은 오디오 파일(예: audio.mp3)을 복사해서 넣어줍니다. 이 파일이 서비스에서 재생되는 사운드 소스가 됩니다.
5단계 — BackgroundSoundService 클래스 작성
새 자바 클래스 BackgroundSoundService.java를 생성하고 아래 코드를 입력합니다. 서비스의 생명주기 콜백(onCreate, onStartCommand, onDestroy)에서 MediaPlayer 객체를 초기화하고, 반복 재생을 설정하며, 종료 시 리소스를 해제합니다.
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.widget.Toast;
import androidx.annotation.Nullable;
public class BackgroundSoundService 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.sound);
mediaPlayer.setLooping(true); // 무한 반복 재생 설정
mediaPlayer.setVolume(100, 100);
}
public int onStartCommand(Intent intent, int flags, int startId) {
mediaPlayer.start();
Toast.makeText(getApplicationContext(), "Playing Bohemian Rashpody in the Background", Toast.LENGTH_SHORT).show();
return startId;
}
public void onStart(Intent intent, int startId) {
}
@Override
public void onDestroy() {
mediaPlayer.stop();
mediaPlayer.release();
}
@Override
public void onLowMemory() {
}
}
6단계 — AndroidManifest.xml에 서비스 등록
androidManifest.xml 파일에 아래와 같이 서비스를 등록해야 합니다. 서비스는 매니페스트에 선언하지 않으면 실행 시 오류가 발생하므로 반드시 추가해야 합니다.
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".BackgroundSoundService" />
</application>
</manifest>
앱 실행 및 결과 확인
이제 애플리케이션을 실행해 보겠습니다. 실제 Android 기기를 컴퓨터에 연결했다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 툴바의
Run 아이콘을 클릭하세요. 목록에서 연결된 모바일 기기를 선택하면, 기기 화면에 아래와 같은 기본 화면이 표시됩니다.

버튼을 누르면 서비스가 시작되면서 배경 음악이 재생되고, 화면에는 짧은 토스트 메시지가 나타납니다. 앱을 백그라운드로 보내도 음악은 계속 흐르는 것을 확인할 수 있습니다.
참고: 최신 Android 버전에서의 주의 사항
Android 8.0(API 26)부터는 백그라운드 서비스 제약이 강화되어, 위 방식처럼 일반 서비스를 장시간 실행하면 시스템이 이를 중단할 수 있습니다. 실제 배포용 앱이라면 Foreground Service(포그라운드 서비스)로 전환하고 알림(Notification)을 함께 표시하는 것이 권장됩니다. 또한 Android 13 이상에서는 POST_NOTIFICATIONS 권한도 함께 요청해야 합니다. 학습용 예제로는 위 코드만으로 충분히 배경 음악 재생의 기본 원리를 익힐 수 있습니다.