public class WorkOrderAlarmReceiver extends BroadcastReceiver {
private final static int NOTIFICATION_ID = 0;
private String prefs_name = "pref";
private int mode = Context.MODE_PRIVATE;
@Override
public void onReceive(Context context, Intent intent) {
WorkOrderAlarmManager woam = new WorkOrderAlarmManager(context);
String action = intent.getAction();
if(Intent.ACTION_BOOT_COMPLETED.equals(action)){
SharedPreferences prefs = context.getSharedPreferences(prefs_name, mode);
long targetTime = prefs.getLong("jalarm_targetTime", 0);
long targetTIme2 = prefs.getLong("alarm_targetTime", 0);
long time = prefs.getLong("alarm_time", 0);
woam.jalarm(targetTime);
woam.alarm(targetTIme2, time);
}
package com.workoderalarm;
import java.util.Date;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.app.*;
import android.widget.*;
public class WorkOrderAlarmManager {
private static Context mContext;
private static String prefs_name = "pref";
private static int mode = Context.MODE_PRIVATE;
public WorkOrderAlarmManager(Context context) {
mContext = context;
}
/*
* 작업시간 설정
*/
public void set_time(EditText edit){
long time = Long.parseLong(""+edit.getText());//EditText의 값을 파싱
long timer = time * 1000; // 시간형식으로 변환
SharedPreferences prefs = mContext.getSharedPreferences(prefs_name, mode); //sharedpreference 객체생성
SharedPreferences.Editor ed = prefs.edit(); // sharedpreference Editor 생성
ed.putLong("jt", timer); // 저장하기위해 long 타입값 선언
ed.commit(); // 저장
}
/*
* 정각알람
*/
public void jalarm(long targetTime) {
Date t = new Date(); // Date객체생성
SharedPreferences prefs = mContext.getSharedPreferences(prefs_name, mode); // sharedpreference 객체 생성
long jTime = prefs.getLong("jt", 0); // sharedpreference의 값을 받아온다.
t.setTime(targetTime + jTime); // 알람 울릴시간 설정
Intent intent = new Intent(mContext.getApplicationContext(), // intent객체 생성
WorkOrderAlarmReceiver.class);
intent.putExtra("jalarm", "1"); // 서로 다른 notification을 나타내기위한 id
PendingIntent sender = PendingIntent.getBroadcast(mContext, 1, intent, 0); // getbroadcast로 수신
AlarmManager am = (AlarmManager) mContext
.getSystemService(Context.ALARM_SERVICE); // 알람매니저 사용하기 위해 객체 생성
am.set(AlarmManager.RTC_WAKEUP, t.getTime(), sender); // 알람매니저 셋팅
SharedPreferences.Editor ed = prefs.edit();
ed.putLong("jalarm_getTime", targetTime);
ed.commit();
}
지금 알람을 이용하여 특정한 시간에 알람이 울리게 구현하고 있는데요 알람매니저가 전원이 꺼지면 전부 초기화 되더라구여..
그래서 전원이 꺼져도 알람이 사라지지 않게 하고 싶어서 ACTION_BOOT_COMPLETED를 사용하여 부팅시 다시 알람을 등록하고 싶은데요 여기서 질문입니다. 다른분들은 pendingIntent를 getService로 하신분들이 많은데 저는 getBroadcast로 받았습니다. 그리고
사용자가 편하게 하기위해 시간을 받는 함수로 만들었는데요... WorkOrderAlarmReceive에서 다시 알람을 등록하려면...
어떻게 해야될지 잘 모르겠습니다. 알람이 울릴 시간도 어딘가에 저장을 해놔야 될것 같고... 부팅이 되자마자 알람을 다시 등록하려면..
제가 함수 안에 알람매니저를 넣어놔서...음...어떻게 해야 될지 감이 잘 안오는데요...
고수분들 이런상황에서 부팅됬을때 다시 알람을 등록해서 알람이 사라지지 않게 하는 방법좀 자세하게 조언해주세요..ㅠㅠ
부탁드립니다~