Android - 使用 AlarmManager 有时会在错误的时间触发警报
Android - Alarms sometimes fires at the wrong time using AlarmManager
这个问题看起来有点奇怪,但是如果有人遇到这样的事情,请帮助我...
我创建了一个 Alarm Scheduler,它使用 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,我不知道是什么问题...我检查了 date 的时间,设置为“2015-05-27 17:00:00”,但收到时间早了几分钟(大约 16:57)...
有人知道我在这里遇到什么样的问题吗?
对于 API 级别 <19,您应该使用 AlarmManager.setRepeating() 并且您的警报将在指定时间准确触发。
Api 级别 >=19 及以上不再有效。 android 发生了变化,因此所有重复的警报都不准确。
因此,如果您想实现精确的重复警报,请使用 AlarmManager.setExact()。
查看此 question 了解更多信息。
编辑
为了您的目的(一次性警报,在精确的时间)使用 alarmManager.setExact(....)。参见 docs
这个问题看起来有点奇怪,但是如果有人遇到这样的事情,请帮助我...
我创建了一个 Alarm Scheduler,它使用 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,我不知道是什么问题...我检查了 date 的时间,设置为“2015-05-27 17:00:00”,但收到时间早了几分钟(大约 16:57)...
有人知道我在这里遇到什么样的问题吗?
对于 API 级别 <19,您应该使用 AlarmManager.setRepeating() 并且您的警报将在指定时间准确触发。
Api 级别 >=19 及以上不再有效。 android 发生了变化,因此所有重复的警报都不准确。
因此,如果您想实现精确的重复警报,请使用 AlarmManager.setExact()。
查看此 question 了解更多信息。
编辑 为了您的目的(一次性警报,在精确的时间)使用 alarmManager.setExact(....)。参见 docs