0

我正在尝试制作一个应用程序,它可以让我想起每天同一时间发生的事件。为此,我使用了一个 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?你看到什么可能是错的吗?谢谢!

4

1 回答 1

1

为什么不这样做以获得时间。

Calendar cal = Calendar.getInstance();

int now = cal.getTimeInMillis();

cal.add(Calendar.DAY_OF_MONTH, 1);

int tomorrow = cal.getTimeInMillis();

我认为日历可能是在做什么。

PS。我是在上一篇文章中建议警报的人:P 看起来你做得很好。


那个有用的代码:

//Create a calendar.
Calendar cal = Calendar.getInstance();

//Get the time in miilis since Jan 1st 1970 I think? 
cal.getTimeInMillis();

//Set the calendar
cal.set(year, month, day, hour, minute, second);

//set a certain aspect of the calendar
cal.set(Calendar.<What you want to set>, <amount>);

//for example
cal.set(Calendar.DAY_OF_MONTH, 1);

//Add to the calendar, Calendar.DAY_OF_MONTH what ever you are using specifies the amount of milliseconds to add, for example a day is 100*60*60*24 milliseconds where a second is 1000 milliseconds.
cal.add(Calendar.<Day or month or what ever>, <amount>);

//for example
cal.add(Calendar.MONTH, 1);

//Take of the calendar
cal.add(Calendar.MONTH, -1);

//Get that value
int day_of_month = cal.get(Calendar.DAY_OF_MONTH);
int hour = cal.get(Calendar.HOUR_OF_DAY);

希望你喜欢 :)

于 2012-05-05T09:12:47.057 回答