Возникла проблема при вызове Notification в определенное время суток.
Notification вызываю при помощи AlarmManager.
Когда задаю текущее время (System.currentTimeMillis()), проблем не возникает, все отлично запускается и выводится, но как только пытаюсь задать определенное, то бишь, точное время, ничего не происходит. Что подскажете? Как правильно задать время?
Рабочий вариант:
private void restartNotify(Context context) {
alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent notifyIntent = new Intent(context, NotificationMessage.class);
contentIntent = PendingIntent.getBroadcast(this, 0,
notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT );
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), contentIntent);
}
Не рабочий:
private void restartNotify(Context context) {
alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent notifyIntent = new Intent(context, NotificationMessage.class);
contentIntent = PendingIntent.getBroadcast(this, 0,
notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT );
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR, 15);
calendar.set(Calendar.MINUTE, 20);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), contentIntent);
}
Решил проблему. Вот реализация:
private void restartNotify(Context context) {
alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent notifyIntent = new Intent(context, NotificationMessage.class);
contentIntent = PendingIntent.getBroadcast(this, 0,
notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT );
Calendar calendar = Calendar.getInstance();
Calendar cal = Calendar.getInstance();
calendar.set(Calendar.YEAR, cal.get(Calendar.YEAR));
calendar.set(Calendar.MONTH, cal.get(Calendar.MONTH));
calendar.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH));
calendar.set(Calendar.HOUR_OF_DAY, 13);
calendar.set(Calendar.MINUTE, 53);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), contentIntent);
}
Прошу обратить внимание, кому интересно, что бы все заработало, нужно задать все пункты (год, месяц, день, часы, минуты, секунды, миллисекунды). Важный пункт calendar.set(Calendar.HOUR OF DAY, 13);. Если указать Calendar.HOUR вместо Calendar.HOUR OF DAY то время вместо 24-х часового формата, будет использовать 12-ти часовой, из-за чего время будет считаться указанным не верно (Если у вас на телефоне 24-х часовой формат)
Ответ
А можете проверить какое именно время вы получаете в calendar.getTimeInMillis()? И попробуйте вместо обычного использовать григорианский календарь Calendar calendar = new GregorianCalendar()
Комментариев нет:
Отправить комментарий