2014-02-28 61 views
1

我有一个带有RTC闹钟的应用程序。目前,我在每天早上8点设置闹钟。我的问题是,当警报开始时(下午4点)说,它会考虑过去的开始时间(上午8点),因此会运行。如何防止闹钟在启动时运行时间过长

我希望闹钟只能在上午8:00左右运行,但如果在一天晚些时候启动,则不会运行。任何想法如何?

回答

3

我建议你使用calendar.add(Calendar.DAY_OF_YEAR, 1);

研究下面的代码:

Calendar calendar = Calendar.getInstance(); 
// 9 AM 
calendar.add(Calendar.DAY_OF_YEAR, 1); ///to avoid firing the alarm immediately 
calendar.set(Calendar.HOUR_OF_DAY, 9); 
calendar.set(Calendar.MINUTE, 0); 
calendar.set(Calendar.SECOND, 0); 
PendingIntent pi = PendingIntent.getService(context, 0, 
      new Intent(context, MyClass.class),PendingIntent.FLAG_UPDATE_CURRENT); 
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 
           AlarmManager.INTERVAL_DAY, pi); 

Original Source

+0

聪明的想法,但你肯定的是,如果代码ü晚上11:00写道运行,它上午9:00还会被称为早上?它只是添加1天给我的印象是它会延迟1天 –

+0

@MahmoudBadri是的,我100%确定,我已经测试过这一行代码。 – Kedarnath

+0

好吧,我接受这个答案,因为它更容易,虽然nikis的答案更准确,但在我的情况下,我想要更容易 –

1

您正在使用setInexactRepeatingsetRepeating,对吧?所以要处理这种情况,只需比较两次:当前时间(毫秒)和(上午8:00,当天)(以毫秒为单位)。如果第一次超过第二次,那么你应该触发你的闹钟(第二天上午8点),否则 - (上午8点,当天)。