android AlarmManager 设定时间小于当前时间,立即触发广播解决方案

转载 2014年07月30日 15:54:12
android AlarmManager的时间设定问题

        最近在做一个基于android操作系统的闹钟小程序,在网上找寻了很多资料,根据这些资料试着编写,但是在测试的时候遇到了如下一个问题:

        比如现在的时间是7:00,我设置闹钟为6:00,则闹钟马上会启动。但是如果设置为8:00,则闹钟不会立即启动而是在8:00准时启动。被这个问题纠结了一天,把自己的代码和网上其他人开发的闹钟程序代码比来比去没有什么差别,可就是无法解决这个问题,终于在刚刚又看了一下核心函数,由其传入的参数发现了问题的所在。

        网上主流的闹钟程序一定用到了下面两行程序:

[java] view plaincopy
  1. am= (AlarmManager) getSystemService(Activity.ALARM_SERVICE);            
  2. am.set(AlarmManager.RTC_WAKEUP, c_set.getTimeInMillis(), pIntent);  

        注意第二行set方法的第一和第二个参数,第一个参数表明使用的是绝对时间,而第二个参数说明是自1970年1月1日0:00至Calendar实例对象设定的时间的毫秒数。好,问题迎刃而解:如果现在的时间是7:00,那么你设定6:00的闹钟,在set方法中传入的第二个参数的值就会比现在的系统时间的getTimeInMillis()值要小,那么任务启动时间早已经提前到了1个小时,所以系统马上响应这个定时任务。

        这样看来,网上那些主流的闹钟开发教程就都面临一个通病,就是如果设定的闹钟时间比当前时间小(即想要闹钟在第二天某一时间响),那么就需要在set方法前先做一个判定,判定设定的闹钟时间和当前的系统时间的大小关系:如果设定的时间比系统时间大,那么不用做什么额外的操作,正常调用AlarmManager的set方法即可;反之如果设定的闹钟时间比当前时间小,那么需要把Calendar实例对象的Day变量自加1:

[java] view plaincopy
  1. if(c_cur.getTimeInMillis()> c_set.getTimeInMillis()){  
  2. c_set.set(Calendar.DAY_OF_YEAR, c_set.get(Calendar.DAY_OF_YEAR) + 1);  
  3. }  

        代码中c_set为闹钟设定时间的Calendar实例对象,c_cur为当前系统时间的Calendar实例对象。值得注意的是:DAY_OF_YEAR不要写成DAY,写成DAY_OF_YEAR的好处是不用考虑月份天数、进位等问题。

转载自:http://blog.csdn.net/yuanbohx/article/details/7161131

相关文章推荐

android5.1 系统alarmManger轮训间隔最小是1分钟了

今天同事遇到一问题, 用alarm manager来做定时任务, 比如每隔5秒执行一次操作。 结果在5.1的机器上的测试结果是每隔60秒才执行一次,而在低于5.1的系统上则是按预期的以5秒为周期执行。...

Android开发:闹钟响起时间不精准等问题

闹钟时间不精准、每周每天重复闹钟设置、重启后闹钟不响、锁屏情况下闹钟响...
  • chenht8
  • chenht8
  • 2016年12月22日 22:13
  • 1184

android AlarmManager的时间设定问题

最近在做一个基于android操作系统的闹钟小程序,在网上找寻了很多资料,根据这些资料试着编写,但是在测试的时候遇到了如下一个问题:         比如现在的时间是7:00,我设置闹钟为6:00,...
  • yuanbohx
  • yuanbohx
  • 2011年12月29日 10:39
  • 12024

android 设置系统dialog 样式

//修改默认AlertDialog的标题颜色 和 下面蓝色线的颜色 public static void dialogTitleLineColor(Dialog dialog,Context co...

android通过AlarmManager固定时间与周期性的发送广播

* Note: The Alarm Manager is intended for cases where you want to have  * your application code run ...
  • zdnuist
  • zdnuist
  • 2015年04月29日 17:18
  • 367

Android手机休眠后时间不准确的解决方案

上一篇讲到了计时的几种方法,在虚拟机中不会出现问题,但是在真机测试中,会遇到这样一种情况: 在手机进行休眠状态后,原来的睡60秒时间,大约变成了睡7分钟左右才再执行.这一直让我很不解,也没有发现代码上...
  • t12x3456
  • t12x3456
  • 2012年08月03日 13:51
  • 17193

Android AlarmManager的时间设定问题

做了一个基于android操作系统的闹钟小程序,但是在测试的时候遇到了如下一个问题: 比如现在的时间是7:00,我设置闹钟为6:00,则闹钟马上会启动。但是如果设置为8:00,则闹钟不会立即启动而是在...

android 后台长时间执行周期性定时任务 解决方案收集

我觉得用以下东西就可以: IntentService, AlarmManager, PendingIntent.加一个BroardcastReciever IntentService会自己开一...

易测软件无法登陆,提示:当前APP存在登陆风险,请立即升级--解决方案

在夜神模拟器中打开易测软件,输入账号密码,点击登陆时候,提示:当前APP存在登陆风险,请立即升级 在夜神模拟器里,点击设置--应用--易测,会看到当前易测软件的版本 进入易测官网下载新...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android AlarmManager 设定时间小于当前时间,立即触发广播解决方案
举报原因:
原因补充:

(最多只允许输入30个字)