안드로이드 알람 매니저(AlarmManager)란?
AlarmManager는 앱이 실행 중이 아니더라도 지정된 시간에 특정 작업을 수행할 수 있게 해주는 안드로이드의 핵심 시스템 서비스입니다. 이 튜토리얼에서는 사용자가 입력한 시간(초)이 지난 후 알람 사운드가 재생되는 간단한 예제를 통해 AlarmManager의 기본적인 사용법을 단계별로 살펴보겠습니다.
1단계: 새 프로젝트 생성
Android Studio에서 File → New Project를 선택한 뒤, 필요한 정보를 모두 입력하여 새 프로젝트를 생성합니다.
2단계: 레이아웃 작성 — activity_main.xml
res/layout/activity_main.xml 파일에 아래 코드를 추가합니다. 화면 상단에는 알람 시간(초)을 입력받는 EditText가, 하단에는 알람을 시작하는 Button이 배치됩니다.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://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:text="Start"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="103dp" />
<EditText
android:id="@+id/time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="22dp"
android:ems="10" />
</RelativeLayout>
3단계: 메인 액티비티 구현 — MainActivity.java
src/MainActivity.java에 다음 코드를 추가합니다. 버튼을 클릭하면 startAlert() 메서드가 호출되어, 입력한 초만큼의 시간이 지난 뒤 알람이 발생하도록 AlarmManager에 등록됩니다.
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Button start;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
start = findViewById(R.id.button);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startAlert();
}
});
}
public void startAlert() {
EditText text = findViewById(R.id.time);
int i = Integer.parseInt(text.getText().toString());
Intent intent = new Intent(this, MyBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent, 0);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (i * 1000), pendingIntent);
Toast.makeText(this, "Alarm set in " + i + " seconds", Toast.LENGTH_LONG).show();
}
}
4단계: 브로드캐스트 리시버 클래스 생성
MyBroadcastReceiver라는 이름의 자바 클래스를 만들고 아래 코드를 추가합니다. 알람이 발생하면 onReceive() 메서드가 호출되어 raw 폴더의 알람음을 재생하고, 화면에 토스트 메시지를 표시합니다.
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.widget.Toast;
class MyBroadcastReceiver extends BroadcastReceiver {
MediaPlayer mp;
@Override
public void onReceive(Context context, Intent intent) {
mp = MediaPlayer.create(context, R.raw.alarm);
mp.start();
Toast.makeText(context, "Alarm....", Toast.LENGTH_LONG).show();
}
}
5단계: 매니페스트 등록 — AndroidManifest.xml
androidManifest.xml에 다음 코드를 추가합니다. 브로드캐스트 리시버가 정상적으로 동작하려면 반드시 매니페스트에 선언되어야 한다는 점을 잊지 마세요.
<?xml version="1.0" encoding="utf-8"?>
<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>
<receiver android:name="MyBroadcastReceiver"></receiver>
</application>
</manifest>
6단계: 알람 사운드 리소스 추가
File → New → Android Resource Directory를 선택하고, Resource type 목록에서 “raw”를 선택한 후 OK를 클릭하여 raw 폴더를 생성합니다. 그다음 원하는 알람 벨소리 파일을 내려받아 프로젝트의 raw 폴더에 복사해 넣습니다. 코드에서 R.raw.alarm 형태로 파일을 참조하므로, 벨소리 파일의 이름을 정확하게 지정하는 것이 매우 중요합니다.
앱 실행 및 결과 확인
이제 애플리케이션을 실행해 보겠습니다. 실제 안드로이드 기기가 컴퓨터와 연결되어 있다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤 툴바의 Run 아이콘을 클릭하고, 실행할 모바일 기기를 선택하세요. 기기의 기본 화면이 표시되면 알람 시간(초)을 입력하고 Start 버튼을 누르면, 지정한 시간이 지난 후 알람음과 함께 토스트 메시지가 나타납니다.


참고 사항
예제 코드는 이전 버전의 support 라이브러리를 사용하고 있으므로, 최신 프로젝트에서는 androidx.appcompat.app.AppCompatActivity를 임포트하는 것이 좋습니다. 또한 Android 12(API 31) 이상에서는 정확한 알람(exact alarm)을 사용하려면 매니페스트에 SCHEDULE_EXACT_ALARM 권한을 추가로 선언해야 할 수 있으며, PendingIntent 생성 시에도 FLAG_IMMUTABLE 플래그 지정이 요구됩니다. 이러한 부분을 함께 고려하면 최신 환경에서도 안정적으로 동작하는 알람 기능을 구현할 수 있습니다.