AlarmManager不会在特定时间触发

时间:2017-01-03 15:33:39

标签: android 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();

我的闹钟在2秒后触发。我做错了什么? :/ 我尝试了AlarmManager.ELAPSED_REALTIME_WAKEUPAlarmManager.RTC_WAKEUP但没有改变。

请不要将我的问题视为重复。我找不到可以解决问题的东西。

2 个答案:

答案 0 :(得分:2)

假设您在Android Studio中工作(如果没有 - 您必须切换),请在文本指针位于set方法时点击 F1 并阅读AlarmManager::set的说明

  

注意:从API 19开始,传递给此方法的触发时间是   被视为不精确:在此时间之前不会发出警报,   但可能会推迟并在一段时间后交付。操作系统将使用   这个政策是为了在整个过程中“批处理”警报   系统,最大限度地减少设备需要“唤醒”的次数   并尽量减少电池使用。一般来说,警报安排在附近   只要警报安排在远期,将来不会推迟   将来

答案 1 :(得分:0)

而不是使用setExact

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