为什么我的报警是递归设置的?

我的数据库中有两个值:

小时= 10

分钟= 20

编辑:

通过Recursive我不是说明天就会设置闹钟,因此我的Alarm类的onReceive会被递归调用。

我有以下function使用数据库中的上述值设置和报警。

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。