有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓 Java设置alarmmanager的时间间隔,并在特定时间停止

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

例如:

I set a task with title "Deadline JAVA" at "17:00 27-3-2015". I need to set an alarm at "16:00 27-3-2015", and every 5 minutes until "17:00 27-3-2015".

我有这个setReminder方法:

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

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

我将此代码用于设置提醒:

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);
}

共 (1) 个答案

  1. # 1 楼答案

    因为您使用的是Android库中的AlarmManager类,所以这并不太困难

    为了做到这一点,您需要跟踪重复警报何时发出,以便捕获该警报是否为“最后一个”一旦确定要激活最后一个,您可以将其称为:

    mAlarmManager.cancel(pi);
    

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

    这里有一个关于警报取消的相关帖子:Delete alarm from AlarmManager using cancel() - Android