11308


時間を指定(7時、12時、21時)してNotificationを発行しようと以下のコードを書きました。しかし、コードのsetNotificationAlarmが呼ばれる瞬間にNotificationがでてきてしまい困っております。どこを直せば良いかわかりますか?

補足:  
メソッドがOverrideされているのは別に用意されたFragmentでNotificationの設定を変更した時にそのFragmentから呼び出すためです。cancelAlarmメソッドはそのFragmentで設定を変更した時に以前にセットされたAlarmを解除するためのものです。あとこのメソッドはアプリ初回起動時にも呼ばれます。

[code]

    /**
         * 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);
        }
    
[/code]


CC BY-SA 3.0
2015-06-13T02:43:05.233
11306
2015-06-13T04:15:05.343
7232
question
android
alarmmanagerの謎の挙動


既に当日の7時を過ぎているからではないでしょうか。  
`calendar.getTimeInMillis() < System.currentTimeMillis()`の場合には、  
`calendar.getTimeInMillis() + 24 * 60 * 60 * 1000`の値を渡す必要があると思います。


CC BY-SA 3.0
2015-06-13T04:15:05.343
11308
2015-06-13T04:15:05.343
10126
11306
answer