我的数据库中有两个值:
小时= 10
分钟= 20
By Recursive我不是说明天会设置闹钟,因此我的Alarm类的onReceive会被递归调用。
我有以下功能使用数据库中的上述值设置和报警。
public void SetAlarm(Context context){
retrieve(context); // returns the hour, minute and day value.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
Calendar calendarNow = Calendar.getInstance();
calendarNow.setTimeInMillis(System.currentTimeMillis()); //Now calendar
calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(timeOneHour));
calendar.set(Calendar.MINUTE,Integer.valueOf(timeOneMinute) );
calendar.set(Calendar.SECOND, 00);
if(calendar.after(calendarNow)){
calendar.set(Calendar.DAY_OF_MONTH, (calendar.get(Calendar.DAY_OF_MONTH)));
}else{
calendar.set(Calendar.DAY_OF_MONTH, (calendar.get(Calendar.DAY_OF_MONTH+1)));
}
AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, NotificationsEngine.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(), 1000*60*60*24, pi);
}
我只想要为今天设置一个闹钟,如果时间(10:20 - 这可以被用户改变但是现在我发现特别是这个时间的问题)还没有通过 - 否则设置闹钟明天在同一时间。
我首先在Mainactivity中注册此警报 - 这是我的应用程序的开始(我确实检查警报是否已经设置 - 所以我不重复。然后我在执行我的代码后再次注册警报此警报调用的服务。
@Override
public void onReceive(Context context, Intent intent) {
context.startService(new Intent(context, NotificationService.class));
}
服务中的(执行我打算通过此警报执行的代码后:
notifEngine.SetAlarm(getApplicationContext());
这个问题直到2014年才发生。我认为年度变化引发了一些不好的事情!
在调试时,以下几行似乎是罪魁祸首:
calendar.set(Calendar.DAY_OF_MONTH, (calendar.get(Calendar.DAY_OF_MONTH+1)));
System.out.println("On Day"+calendar.get(Calendar.DAY_OF_MONTH));
System.out打印2到控制台,理想情况下应该打印3 - 我可能在这里错了但我认为这里有问题。
所以我认为我已经把问题归结为:
System.out.println("On Day before adding: "+calendar.get(Calendar.DAY_OF_MONTH));
calendar.set(Calendar.DAY_OF_MONTH, (calendar.get(Calendar.DAY_OF_MONTH+1)));
System.out.println("On Day after adding: "+calendar.get(Calendar.DAY_OF_MONTH));
以上两个打印命令都输出2.