#android #java
Возникла проблема при вызове 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-х часовой формат)
Ответы
Ответ 1
А можете проверить какое именно время вы получаете в calendar.getTimeInMillis()? И попробуйте вместо обычного использовать григорианский календарь Calendar calendar = new GregorianCalendar()Ответ 2
Достаточно 3 параметров. Можно упростить на Kotlin: Calendar calendar = Calendar.getInstance().apply { calendar.set(Calendar.HOUR_OF_DAY, 13); calendar.set(Calendar.MINUTE, 53); calendar.set(Calendar.SECOND, 0); }
Комментариев нет:
Отправить комментарий