Android设置多个长日期闹钟

时间:2016-06-08 12:39:29

标签: android scheduled-tasks alarmmanager android-alarms

我试图在我的应用程序中创建一个功能,该功能在他租借的书籍的到期日通知用户。我将使用listview中的复选框,如下所示:

No description

(日期仅供展示用途)

现在我想知道我怎样才能做到最好。我有使用AlarmManager和BroadcastReceivers的经验,但我还没有得到一个清晰的流程图。

这是因为我需要为每本书设置特定警报,并在请求时取消该特定警报。此外,它需要在重新设备时重新激活所有警报(通过调用BOOT_COMPLETE广播)。

PS。:警报通常会在当前日期后的一周内设置。

PS2。:我可以使用日历吗?我的意思是,这样我就不必重新激活所有警报,或以毫秒计算(expirationDate - currentDate)。

有想法的人可以试着给我指路吗?谢谢!

1 个答案:

答案 0 :(得分:1)

我认为,只要您第一次为本书设置闹钟,关键就是给每本书都有自己的闹钟ID。

然后你应该保留一个运行的警报id和时间戳的列表(可能在SharedPreferences中)。

使用这样的方法,您可以取消与其警报ID相关的特定警报:

public static void cancelAlarm(Context context, int alarmId) {
    PendingIntent pi = PendingIntent.getService(context, alarmId,
            new Intent(context, YourService.class),
            PendingIntent.FLAG_NO_CREATE);
    if(pi!=null) {
       AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
       am.cancel(pi);
    }
}

当您收到BOOT广播时,您可以从SharedPreferences获取警报ID列表以及时间戳,并使用各自的警报ID启动所有警报