做了一个基于android操作系统的闹钟小程序,但是在测试的时候遇到了如下一个问题:
比如现在的时间是7:00,我设置闹钟为6:00,则闹钟马上会启动。但是如果设置为8:00,则闹钟不会立即启动而是在8:00准时启动。被这个问题纠结了一天,把自己的代码和网上其他人开发的闹钟程序代码比来比去没有什么差别,可就是无法解决这个问题,终于在刚刚又看了一下核心函数,由其传入的参数发现了问题的所在。
网上主流的闹钟程序一定用到了下面两行程序:
am= (AlarmManager) getSystemService(Activity.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, c_set.getTimeInMillis(), pIntent);
这样看来,网上那些主流的闹钟开发教程就都面临一个通病,就是如果设定的闹钟时间比当前时间小(即想要闹钟在第二天某一时间响),那么就需要在set方法前先做一个判定,判定设定的闹钟时间和当前的系统时间的大小关系:如果设定的时间比系统时间大,那么不用做什么额外的操作,正常调用AlarmManager的set方法即可;反之如果设定的闹钟时间比当前时间小,那么需要把Calendar实例对象的Day变量自加1:
if(c_cur.getTimeInMillis()> c_set.getTimeInMillis()){
c_set.set(Calendar.DAY_OF_YEAR, c_set.get(Calendar.DAY_OF_YEAR) +1);
}