2017-01-02 4 views
0

Я воспользовался следующей ссылкой https://developer.android.com/training/scheduling/alarms.html.Настройка уведомления с помощью AlarmManager путем передачи calendar.getTimeInMillis(), инициирует уведомление немедленно не в назначенное время

Первый код RTC, чтобы установить будильник в течение определенного времени в течение всех дней. Даже после того, как он будет следовать одному и тому же коду, будильник не запускается в момент его запуска. Вместо этого notification запускается сразу после установки времени, которое выполняется с помощью таймера. Ниже мой фрагмент кода,

AlarmManager alarmMgr = (AlarmManager)  getSystemService(Context.ALARM_SERVICE); 
Intent intent = new Intent(this, NotificationReceiver.class); 
PendingIntent intentalarm = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.set(Calendar.HOUR_OF_DAY,4); 
    calendar.set(Calendar.MINUTE, 30); 

    alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, intentalarm); 

Вместо setRepeating я также попытался setInexactRepeating, но не было luck.I также не хотел бы добавить, что, когда я изменил

calendar.getTimeInMillis() и используется SystemClock.elapsedRealtime() + 120 * 1000 сигнализация срабатывает точно после 2 минуты с момента его установки.

Но когда используется calendar.getTimeInMillis(), предполагаемая работа не происходит, а происходит немедленное срабатывание.

Было бы очень полезно, если кто-нибудь может помочь мне найти решение. Только для заметки я мог бы узнать, установлен ли будильник до текущего времени устройства, будильник будет срабатывать немедленно, но здесь это не так.

NotificationReceiver.class работает нормально, поскольку он сгенерирован и отображается в названии. Но время, о котором идет речь, вызывает беспокойство.

ответ

0

Вы используете как setTimeInMillis, так и hourofday и минуту.

Если вы хотите, чтобы будильник срабатывал в 4:30, просто добавьте hourofday и минуту.

Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.HOUR_OF_DAY,4); 
calendar.set(Calendar.MINUTE, 30);` 
0

Я мог бы определить проблему, с которой я столкнулся. Я использовал TimePicker с 24-часовым форматом. Но я использовал SimpleDateFormat «hh: mm». Что означает «h», так это «h-> Hour in am/pm (1-12)». Поэтому любая тревога, которую я установил на AM, срабатывает правильно. Когда я установил время в PM, так как я использовал формат 1-12 'h', сигнал тревоги устанавливается на время AM, и поскольку это время уже передано по сравнению с временем устройства, тревога/уведомление сразу вызываются. Правый формат для использования было «HH: MM», где «H» означает «H-> Hour in day (0-23)». Это решило мою проблему.

Проверка TimeinMillis на онлайн-конвертер времени эпохи помогла мне идентифицировать эту проблему. Еще раз спасибо за помощь.

Смежные вопросы