【问题标题】:Android - Alarms sometimes fires at the wrong time using AlarmManagerAndroid - 使用 AlarmManager 有时会在错误的时间触发警报
【发布时间】:2015-06-01 13:53:31
【问题描述】:

这个问题看起来有点奇怪,但是如果有人遇到这种情况,请帮助我...

我创建了一个警报调度程序,它通过以下代码使用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) ...

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

【问题讨论】:

    标签: android broadcastreceiver alarmmanager android-alarms


    【解决方案1】:

    对于 API 级别

    API 级别 >=19 及以上不再有效。 android 发生了变化,因此所有重复的警报都是不准确的。

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

    请参阅此question 了解更多信息。

    编辑 出于您的目的(一次性警报,在准确的时间),请使用 alarmManager.setExact(....)。见docs

    【讨论】:

    • 嗨,谢谢您的评论...我不想设置重复警报...只是一次警报...这个问题出现在带有 API 的 Android 中18...alarmManager.setalarmManager.setRepating 有区别吗?
    • "set" 是一次性警报并且 setRepeating 重复。出于您的目的(一次性,准确的警报)使用 alarmManager.setExact(....) - 这是文档 - developer.android.com/reference/android/app/…, long, android.app.PendingIntent)
    • 看来问题没有再出现了,所以我想这个问题已经解决了……我会接受这个答案
    猜你喜欢
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    相关资源
    最近更新 更多