Android - 警报有时会在错误的时间使用AlarmManager触发

时间:2015-06-01 13:53:31

标签: android broadcastreceiver alarmmanager android-alarms

这个问题似乎有些奇怪,但如果有人遇到这样的事情,请帮助我......

我创建了一个警报调度程序,它通过以下代码使用AlarmManager向用户发送警报:

    Intent intent = new Intent(context, AlarmReceiver.class);
    intent.putExtra("tk_alert_id", lastAlertId.getId()+"");
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, idRandom, intent, Intent.FLAG_ACTIVITY_NEW_TASK);
    AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, date.getTimeInMillis(), pendingIntent);

问题在于,有时候,我会在错误的时间在AlarmReceiver(BroadcastReceiver)上收到此警报,如下图所示: image,我无法弄清楚问题是什么......我检查了日期的时间并被设置为“2015-05-27 17:00:00”,但它提前几分钟收到了(16:57左右)...

有谁知道我在这遇到什么样的问题?

1 个答案:

答案 0 :(得分:1)

对于API级别< 19,您应该使用AlarmManager.setRepeating(),并且您的警报将在指定时间准确触发。

Api等级> = 19及以上不再有效。 android中有变化,所有重复警报都是不准确的。

因此,如果您想要实现精确的重复警报,请使用AlarmManager.setExact()。

有关详细信息,请参阅此question

修改 为了您的目的(一次性警报,在精确的时间)使用alarmManager.setExact(....)。见docs