alarmmanagerの謎の挙動
時間を指定(7時、12時、21時)してNotificationを発行しようと以下のコードを書きました。しかし、コードのsetNotificationAlarmが呼ばれる瞬間にNotificationがでてきてしまい困っております。どこを直せば良いかわかりますか?
補足:
メソッドがOverrideされているのは別に用意されたFragmentでNotificationの設定を変更した時にそのFragmentから呼び出すためです。cancelAlarmメソッドはそのFragmentで設定を変更した時に以前にセットされたAlarmを解除するためのものです。あとこのメソッドはアプリ初回起動時にも呼ばれます。
/**
* Setting alarm for notification.
*/
@Override
public void setNotificationAlarm(){
if (mPref.getBoolean(PreferenceValue.NOTIFY_MORNING, true)){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 7);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Long startTime = calendar.getTimeInMillis();
cancelAlarm(MORNING_INTENT);
setAlarm(startTime, MORNING_INTENT);
}
if(mPref.getBoolean(PreferenceValue.NOTIFY_NOON, true)){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 12);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Long startTime = calendar.getTimeInMillis();
cancelAlarm(NOON_INTENT);
setAlarm(startTime, NOON_INTENT);
}
if(mPref.getBoolean(PreferenceValue.NOTIFY_NIGHT, true)){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 21);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Long startTime = calendar.getTimeInMillis();
cancelAlarm(NIGHT_INTENT);
setAlarm(startTime, NIGHT_INTENT);
}
}
private void setAlarm(Long startTime, String intentKind){
Intent intent = new Intent(MainActivity.this, NotificationService.class);
intent.setType(intentKind);
PendingIntent alarmIntent = PendingIntent.getService(MainActivity.this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, startTime, alarmIntent);
}
private void cancelAlarm(String intentKind){
Intent intent = new Intent(MainActivity.this, NotificationService.class);
intent.setType(intentKind);
PendingIntent alarmIntent = PendingIntent.getService(MainActivity.this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.cancel(alarmIntent);
}