如何设置 android 警报在特定日期前触发

How to set android alarm to trigger until an specific date

我是 android 的新手,正在使用 alarmManager,我想知道是否有办法在 android 中设置一个警报,例如每周一触发,直到某个特定日期。像这样 : 开始日期 10/09/15 每个星期一下午 2:30 提醒我一些事情 直到 结束日期 11/09/15

如果您知道如何设置闹钟,解决方法就很简单:

1) 在设置闹钟时,计算您希望它使用的最大时间戳 运行,并将其保存为本地首选项。

2) 然后在警报代码本身中,每次触发时,您都可以进行第一次测试,以查看当前时间戳是在您第一次保存的限制偏好之前还是之后。

3) 如果达到,则取消警报,如@karthik 所说。如果没有,请继续编写代码...

 AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 14);
        calendar.set(Calendar.MINUTE, 30);
        int weekInMillis = 7 * 24 * 60 * 60 * 1000;

        alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                weekInMillis, PendingIntent.getBroadcast(context, 0, new Intent(context, ReminderAlarmWakefulBroadcastReceiver.class), PendingIntent.FLAG_UPDATE_CURRENT));

以上代码片段为 2:30 PM 设置了每周重复的警报。调整 calendar 以改变警报响起的时间。例如,即将到来的星期一。

当闹钟响起时,它会发送一个广播,该广播将由 ReminderWakefulBroadcastReceiver 接收,这是一个自定义接收器,其中包含您想要 运行 的代码,每周一 2:30 下午.此代码还应检查是否到了取消警报的时间,如果是,则以下代码将其取消:

 AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
 alarmManager.cancel(PendingIntent.getBroadcast(context, 0, new Intent(context, ReminderAlarmWakefulBroadcastReceiver.class));

参考资料: AlarmManager, Scheduling Repeating Alarms, PendingIntent