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

时间:2015-01-02 09:51:45

标签: java android calendar android-alarms

我的数据库中有两个值:

小时= 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.

0 个答案:

没有答案