2017-01-03 4 views
2

У меня проблема с AlarmManager. Я могу настроить сигнал тревоги с этим кодомAlarmManager не запускается в определенное время

private void setAlarm(long when) { 
    Intent intent = new Intent(NoteActivity.this, AlarmReceiver.class); 
    intent.putExtra("ID", note.getId()); 
    AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, when, PendingIntent.getBroadcast(NoteActivity.this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT)); 
    Toast.makeText(getApplicationContext(),"Reminder set up", Toast.LENGTH_SHORT).show(); 
} 

Этот код работает хорошо, если я изложу long when = 5 * 1000; \\For example 5secs later, но если я использую этот код

Calendar calendar = Calendar.getInstance(); 
        calendar.setTime(date); 
        long selectedDate = date.getTime(); 
        long timeSince1970 = System.currentTimeMillis(); 
        long timeForAlarm = selectedDate - timeSince1970; 

        Intent intent = new Intent(NoteActivity.this, AlarmReceiver.class); 
        intent.putExtra("ID", note.getId()); 
        AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
        manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, timeForAlarm, PendingIntent.getBroadcast(NoteActivity.this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT)); 
        Toast.makeText(getApplicationContext(),"Reminder set for "+calendar.getTime().toString(), Toast.LENGTH_SHORT).show(); 

мои тревоги triggerd 2secs позже. Что я делаю неправильно? :/ Я пробовал AlarmManager.ELAPSED_REALTIME_WAKEUP и AlarmManager.RTC_WAKEUP, но ничего не изменилось.

Пожалуйста, не проверяйте мой вопрос как дублированный. Я не нашел что-то, чтобы попытаться решить мою проблему.

+1

(Совет. Рассказывая сообщество не закрывать что-то как дубликат ничего не изменится, если это действительно дубликат В лучшем случае это будет только помочь ему получите больше для закрытия.): - \ –

+0

@JonAdams Это правда. haha –

ответ

3

Предполагая, что вы работаете в Android Studio (если нет - вы должны переключиться), нажмите F1 в то время как указатель текста на set метод и прочитать описание AlarmManager::set.

Примечание: Начиная с API 19, время запуска прошел к этому методу рассматривается как неточные: сигнал не будет доставлен до этого времени, , но может быть отложен и доставлен спустя некоторое время. ОС будет использовать эту политику для того, чтобы «пакетные» сигналы тревоги находились вместе по всей системе , сводя к минимуму количество раз, когда устройство должно «просыпаться» и минимизировать использование батареи. В общем случае тревоги, запланированные в ближайшем будущем , не будут отложены до тех пор, пока аварийные сигналы, запланированные далеко в будущем .

+0

Итак, есть ли способ запланировать мою тревогу? Должен ли я использовать разрешение set_alarm или что-то вроде этого? –

+0

Человек, я уже дал вам ссылку и сказал, как использовать документы в AS. Только то, что вам нужно сделать, читается. Здесь copy-past from doc: «Если ваше приложение имеет сильные требования к заказу, есть другие API, которые вы можете использовать для получения необходимого поведения; см. setWindow (int, long, long, PendingIntent) и setExact (int, long, PendingIntent). – Divers

0

Вместо множества использования setExact

manager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, timeForAlarm, PendingIntent.getBroadcast(NoteActivity.this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT)); 
+0

Не работает:/Ставим ту же проблему. Тревога срабатывает через 2 секунды. –

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

  • Нет связанных вопросов^_^