Alarm (알람)
- 알람은 PendingIntent()로 밖에 못함
- 알람이 울렸을 때 브로드캐스트와 서비스 가동 해보기
[1] 알람앱 이용하기
- 인텐트 이용
- 기본 앱인 알람앱을 실행함
- 기본 이걸로 함
![](https://velog.velcdn.com/images/thwjd9393/post/66a5c830-fb5b-410a-bef3-006f7e83b557/image.png)
[2] 알람매니저
1. 알람 매니저 이용한 10초 뒤 알람 울리기
![](https://velog.velcdn.com/images/thwjd9393/post/0ebf6aab-7377-43b3-9471-555c9276fc43/image.png)
2. 알람 매니저 이용한 특정 시간 알람
![](https://velog.velcdn.com/images/thwjd9393/post/240f6b13-19db-46a1-b0d1-4c885b119e74/image.png)
총 코드
main.java
package com.bsj0420.ex64alarm;
import androidx.appcompat.app.AppCompatActivity;
import android.app.AlarmManager;
import android.app.DatePickerDialog;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.provider.AlarmClock;
import android.widget.DatePicker;
import android.widget.TimePicker;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn_app).setOnClickListener(view -> clickBtnApp());
findViewById(R.id.btn_mg).setOnClickListener(view -> clickBtnMg());
findViewById(R.id.btn_mg_setTime).setOnClickListener(view -> clickBtnMgSetTime());
}
private void clickBtnMgSetTime() {
DatePickerDialog dialog = new DatePickerDialog(this);
dialog.setOnDateSetListener(new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
year = i;
month = i1;
day = i2;
Calendar calendar = Calendar.getInstance();
hour = calendar.get(Calendar.HOUR_OF_DAY);
minute = calendar.get(Calendar.MINUTE);
new TimePickerDialog(MainActivity.this,timeSetListener,hour,minute,true).show();
}
});
dialog.show();
}
int year, month, day;
int hour, minute;
TimePickerDialog.OnTimeSetListener timeSetListener = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int i, int i1) {
hour = i;
minute = i1;
Calendar calendar = Calendar.getInstance();
calendar.set(year,month,day,hour,minute,6);
AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(MainActivity.this , AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this,200,intent,PendingIntent.FLAG_IMMUTABLE);
manager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),pendingIntent);
}
};
private void clickBtnMg() {
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent= new Intent(this, AlarmReceiver.class);
PendingIntent pendingIntent= PendingIntent.getBroadcast(this, 100, intent, PendingIntent.FLAG_IMMUTABLE);
alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+10000, pendingIntent);
}
private void clickBtnApp() {
Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM);
intent.putExtra(AlarmClock.EXTRA_HOUR, 14);
intent.putExtra(AlarmClock.EXTRA_MINUTES,35);
intent.putExtra(AlarmClock.EXTRA_MESSAGE,"Test Message");
ArrayList<Integer> list=new ArrayList<Integer>();
list.add(Calendar.MONDAY);
list.add(Calendar.WEDNESDAY);
list.add(Calendar.FRIDAY);
intent.putExtra(AlarmClock.EXTRA_DAYS, list);
intent.putExtra(AlarmClock.EXTRA_SKIP_UI,true);
startActivity(intent);
}
}
브로드캐스트.java
package com.bsj0420.ex64alarm;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "알람 받음", Toast.LENGTH_SHORT).show();
Log.i("EX64", "알람 받음");
}
}
매니패스트
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<!-- 알람시계 앱을 통해 알람 설정 하려면 필요한 퍼미션 (개발자 사이트 확인)-->
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
<!-- 안드로이드 12버전에서 새로 추가된 퍼미션 -->
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Ex64Alarm"
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".AlarmReceiver"/>
</application>
</manifest>