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 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, 3, 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", t.getTime());
ed.commit();
}
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) {
String action = intent.getAction();
if(action.equals(android.content.Intent.ACTION_BOOT_COMPLETED)){
SharedPreferences prefs = context.getSharedPreferences(prefs_name, mode);
long time = prefs.getLong("jalarm_getTime", 0);
long time2 = prefs.getLong("alarm_getTime", 0);
PendingIntent sender = PendingIntent.getBroadcast(context, 3, intent, 0); // getbroadcast로 수신
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); // 알람매니저 사용하기 위해 객체 생성
am.set(AlarmManager.RTC_WAKEUP, time, sender); // 알람매니저 셋팅
PendingIntent sender2 = PendingIntent.getBroadcast(context, 3, intent, 0);
am.set(AlarmManager.RTC_WAKEUP, time2, sender2); // 알람매니저 셋팅
}
알람매니저에 등록할 시간을 Sharedpreference로 저장하고 ACTION_BOOT_COMPLETED를 사용하여 부팅됬을때
그 시간값을 가져와 다시 알람매니저에 등록하도록 해봤습니다. 그런데 여기서
if(action.equals(android.content.Intent.ACTION_BOOT_COMPLETED))여기서 nullpointerexception이 발생합니다.
그이유를 잘 모르겠습니다. 고수분들 도와주세요
그리고 이렇게 하는게 맞는것인지 조언좀 부탁드립니다..혹시나 초보자가 할정도로 더 쉬운방법이 있으면 조언해주세요~




if (intent.getAction().equals(intent.ACTION_BOOT_COMPLETED)
로 바꿔보시구요
메니패스트에
퍼미션 등록해 보세요
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED">