Notice
Recent Posts
Recent Comments
Link
투케이2K
132. (AndroidStudio/android/java) AlarmManager 알람 매니저 사용해 지정된 시간에 알림 메시지 표시 실시 본문
Android
132. (AndroidStudio/android/java) AlarmManager 알람 매니저 사용해 지정된 시간에 알림 메시지 표시 실시
투케이2K 2021. 5. 4. 18:36/* =========================== */
[ 개발 환경 설정 ]
개발 툴 : AndroidStudio
개발 언어 : java
/* =========================== */
/* =========================== */
[소스 코드]
[AndroidManifest.xml 파일]
<퍼미션 등록 부분>
<uses-permission android:name="android.permission.WAKE_LOCK" />
<액티비티 등록 부분>
<activity
android:name=".A_Alarm"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan"/>
<브로드캐스트 등록 부분>
<receiver
android:name=".A_AlarmReceiver"
android:enabled="true"
android:exported="true"/>
[JAVA 파일 : A_Alarm]
//TODO [알림 등록 실시 메소드]
public void setAlarmSetting(String year, String month, String day, String hour, String minute, String second){
String str_date = "";
//TODO [2021-05-04 11:35:12] 형태
str_date = String.valueOf(year+"-"+month+"-"+day+" "+hour+":"+minute+":"+second);
Log.d("---","---");
Log.d("//===========//","================================================");
Log.d("","\n"+"[A_Alarm > setAlarmSetting() 메소드 : 알람 등록 수행 실시]");
Log.d("","\n"+"[날짜 : "+str_date+"]");
Log.d("//===========//","================================================");
Log.d("---","---");
try {
String now = getNowTime2();
int result = str_date.compareTo(now);
if(result < 0){ //TODO 저장하려는 시간이 현재시간보다 작은 경우
getAlertDialog("알람 설정",
"\n"+"[설정하려는 알람 시간을 다시 확인해주세요]"+"\n"+"\n"+
"[현재 날짜]"+"\n"+String.valueOf(now)+"\n"+"\n"+
"[예약할 날짜]"+"\n"+String.valueOf(str_date),
"확인",
"취소",
"");
}
else{
//TODO [알림 매니저 객체 생성]
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
//TODO [인텐트 등록]
Intent intent = new Intent(A_Alarm.this, A_AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(A_Alarm.this, 1, intent, 0);
//TODO [캘린더에 알림 날짜 저장 실시]
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss", Locale.KOREA);
try {
Date date = simpleDateFormat.parse(str_date);
calendar.setTime(date);
} catch (ParseException e) {
e.printStackTrace();
}
Log.d("---","---");
Log.w("//===========//","================================================");
Log.d("","\n"+"[A_Alarm > setAlarmSetting() 메소드 : 알람 등록 수행 실시]");
Log.d("","\n"+"[Calendar : "+calendar.toString()+"]");
Log.w("//===========//","================================================");
Log.d("---","---");
//TODO [알림 등록 실시]
if (Build.VERSION.SDK_INT >= 23) { //TODO 23보다 큰 경우
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); //TODO 버전 23 이상
}
else { //TODO 23보다 크지 않은 경우
if(Build.VERSION.SDK_INT >= 19){ //TODO 19보다 큰 경우
alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); //TODO 버전 19 이상
}
else { //TODO 19보다 크지 않은 경우
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); //TODO 버전 19 미만
}
}
S_Preference.setString(getApplication(), "Alarm_Date", str_date);
getAlertDialog("알람 설정",
"\n"+"[알림이 정상적으로 예약되었습니다]"+"\n"+"\n"+S_Preference.getString(getApplication(), "Alarm_Date"),
"확인",
"취소",
"");
}
}
catch (Exception e){
e.printStackTrace();
}
}
//TODO [알림 등록 취소 메소드]
public void setAlarmCancle(){
Log.d("---","---");
Log.e("//===========//","================================================");
Log.d("","\n"+"[A_Alarm > setAlarmCancle() 메소드 : 알람 등록 해제 실시]");
Log.e("//===========//","================================================");
Log.d("---","---");
String save = S_Preference.getString(getApplication(), "Alarm_Date");
try {
if(save != null && save.length() > 0 && !save.equals("") && !save.contains("null")){
String now = getNowTime2();
int result = save.compareTo(now);
if(result < 0){ //TODO 저장된 시간이 현재 시간보다 작은 경우 (비정상)
getAlertDialog("알람 해제",
"\n"+"[알람 해제할 시간을 다시 확인해주세요]"+"\n"+"\n"+
"[현재 날짜]"+"\n"+String.valueOf(now)+"\n"+"\n"+
"[저장된 날짜]"+"\n"+S_Preference.getString(getApplication(), "Alarm_Date"),
"확인",
"취소",
"");
}
else { //TODO 저장된 시간이 현재 시간보다 큰 경우 (정상)
//TODO [알림 매니저 객체 생성]
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
//TODO [인텐트 해제]
Intent intent = new Intent(A_Alarm.this, A_AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(A_Alarm.this, 1, intent, 0);
alarmManager.cancel(pendingIntent);
}
}
else {
getAlertDialog("알람 해제",
"\n"+"[등록된 알람 설정이 없습니다]",
"확인",
"취소",
"");
}
}
catch (Exception e){
e.printStackTrace();
}
}
[JAVA 파일 : A_AlarmReceiver]
package kr.co.two2k.manager;
import android.app.AlertDialog;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.os.Build;
import android.os.PowerManager;
import android.util.Log;
import android.widget.Toast;
import androidx.core.app.NotificationCompat;
import androidx.core.content.ContextCompat;
public class A_AlarmReceiver extends BroadcastReceiver {
//TODO [클래스 전역 변수 선언 부분]
Context mContext;
//TODO [onReceive 메소드를 재정의 (채널 알림 메시지 확인 부분)]
@Override
public void onReceive(Context context, Intent intent) {
try {
mContext = context;
Log.d("---","---");
Log.w("//===========//","================================================");
Log.d("","\n"+"[A_AlarmReceiver > onReceive() 메소드 : 수신받은 알림 내용 확인]");
Log.w("//===========//","================================================");
Log.d("---","---");
//TODO 노티피케이션 알림 호출 실시
Toast.makeText(mContext,S_Preference.getString(mContext, "Alarm_Date")+" [알림]",Toast.LENGTH_SHORT).show();
serviceContent = S_Preference.getString(mContext, "Alarm_Date");
setNotificationShow();
}
catch (Exception e){
e.printStackTrace();
}
}
}
/* =========================== */
/* =========================== */
[결과 출력]
/* =========================== */
/* =========================== */
[파일 첨부 : 전체 소스코드]
/* =========================== */
반응형
'Android' 카테고리의 다른 글
Comments