【问题标题】:Java set alarmmanager with intervals and stop it at specific timeJava用间隔设置alarmmanager并在特定时间停止它
【发布时间】:2015-03-27 15:08:39
【问题描述】:

我正在用 Java 构建一个任务提醒(使用 Eclipse)。任务提醒需要在任务开始前的特定时间提示提醒。此外,它需要在任务开始前每 X 分钟重复一次,最后在设置任务提醒的特定时间发送最后一个提醒。

例如:

我将标题为“Deadline JAVA”的任务设置为“17:00 27-3-2015”。我需要在“16:00 27-3-2015”设置一个闹钟,每隔 5 分钟设置一次,直到“17:00 27-3-2015”。

我有这个setReminder 方法:

new ReminderManager(this).setReminder(mRowId, rCalendar, mCalendar);

mRowId是任务的ID,rCalendar是任务之前的时间,所以16:00,mCalendar是最后的提醒时间。

我正在将此代码用于 setReminder:

public void setReminder(Long taskId, Calendar when, Calendar when2) {
    Intent i = new Intent(mContext, OnAlarmReceiver.class);
    i.putExtra(RemindersDbAdapter.KEY_ROWID, (long) taskId);

    int ID = taskId.intValue();

    PendingIntent pi = PendingIntent.getBroadcast(mContext, ID, i,
            PendingIntent.FLAG_UPDATE_CURRENT);

    mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
            when.getTimeInMillis(), 300000 , pi);
}

这行得通。闹钟开始响起,每 5 分钟重复一次。现在最困难的部分,我需要帮助的地方是发送一个最终警报并让警报停止重复。我该怎么做?

编辑:mAlarmManager 的代码

private AlarmManager mAlarmManager;
public ReminderManager(Context context) {
    mContext = context;
    mAlarmManager = (AlarmManager) context
            .getSystemService(Context.ALARM_SERVICE);
}

【问题讨论】:

  • 你能把mAlarmManager的代码贴出来吗?
  • 这是一个活动还是一个服务?如果是活动,你有没有后台操作的服务组件?

标签: java android


【解决方案1】:

由于您使用的是 Android 库中的 AlarmManager 类,所以这并不太难。

为了做到这一点,您需要跟踪重复警报何时响起,以便捕捉是否应该是“最后一个”。一旦你确定最后一个被激活,你可以这样调用:

mAlarmManager.cancel(pi);

取消操作采用PendingIntent 并取消具有相同PendingIntent 实例集的任何警报。这将阻止警报在最后一个响起后继续。

这里有一篇关于取消闹钟的相关帖子:Delete alarm from AlarmManager using cancel() - Android

【讨论】:

  • 这是我的大问题。我如何跟踪重复警报何时响起以捕获“最后一个”?
  • 有几种方法可以做到这一点。一种可能性是编写服务并拦截警报并增加计数器。另一种方法是使用 SQLite 之类的数据库,并在警报响起时通过将记录写入在 PendingIntent 中激活的活动或片段来更新记录
猜你喜欢
  • 2013-05-02
  • 1970-01-01
  • 2018-05-10
  • 1970-01-01
  • 2012-07-31
  • 2011-02-25
  • 2015-04-24
  • 2014-11-28
相关资源
最近更新 更多