我正在尝试制作一个应用程序,它可以让我想起每天同一时间发生的事件。为此,我使用了一个 AlarmManager。
这就是我注册事件的方式:
Intent alarmIntent = new Intent(getApplicationContext(), ReminderAlarm.class);
alarmIntent.putExtra("id_bundle", cursor.getInt(0));
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), cursor.getInt(0), alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
这就是我取消注册事件的方式:
Intent alarmIntent = new Intent(getApplicationContext(), ReminderAlarm.class);
alarmIntent.putExtra("id_bundle", id);
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), id, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
am.cancel(pendingIntent);
这就是我编辑事件的方式:
Intent alarmIntent = new Intent(getApplicationContext(), ReminderAlarm.class);
alarmIntent.putExtra("id_bundle", id);
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), id, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
am.cancel(pendingIntent);
Intent alarmIntentNew = new Intent(getApplicationContext(), ReminderAlarm.class);
alarmIntentNew.putExtra("id_bundle", id);
PendingIntent pendingIntentNew = PendingIntent.getActivity(getApplicationContext(), id, alarmIntentNew, PendingIntent.FLAG_UPDATE_CURRENT);
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntentNew);
我尝试使用间隔为 24*3600*1000 的 setRepeating 但这似乎不起作用,所以我决定在事件触发时取消注册并再次注册。我在警报触发后启动的 ReminderAlarm 活动中执行此操作。
此外,每当我启动应用程序时,我都会使用我发布的用于注册事件的代码块再次注册所有事件。我从数据库中提取有关哪些事件以及何时注册它们的数据。
我的问题是这也不起作用。当我将事件添加到时间 T+1 分钟时,它会正确触发。但是第二天,就没有了。
可能是因为我给日历实例提供了错误的数据?我有一个相当长的函数,它在事件触发之后和将此日历实例发送到 AlarmManager 实例之前设置日历实例。在这个函数中,我检查新月份、新年等内容并设置日历字段(年、月、day_of_month、hour_of_day、minute)。这甚至是必要的吗?calendar.getTimeInMillis() 是否考虑所有这些字段或仅考虑 hour_of_day 和 minute?你看到什么可能是错的吗?谢谢!