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

android AlarmManager的时间设定问题

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

currentTimeMillis,getTimeInMillis与getTime获取当前时间戳耗时比较

在生成当前的时间戳的方面,我们有多种方法,比如说currentTimeMillis,getTimeInMillis与getTime,在生成时间戳方面我们总是想生成的时间越短越好,生成的时间消耗越短,这...
  • ZZY1078689276
  • ZZY1078689276
  • 2017年03月18日 22:03
  • 5463

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

android AlarmManager的时间设定问题 2011-12-29 10:39 1929人阅读 评论(6) 收藏 举报 androidcalendar任务servicec测试...
  • xzwjraohuamin1
  • xzwjraohuamin1
  • 2014年07月30日 15:54
  • 964

定时任务,AlarmManager使用

项目需要:实现一个定时提醒的功能 查阅资料知道,需要使用AlarmManager AlarmManager介绍:  AlarmManager是Android的一个系统服务,通过Context.get...
  • wei_chong_chong
  • wei_chong_chong
  • 2016年04月27日 09:31
  • 7812

安卓中AlarmManager结合广播的使用

安卓中AlarmManager可以做到提醒的作用,在特定的时刻为我们广播一个特定的Intent。可以通过设置,然后传递给广播接收器,响应一些事件。 首先我们写好一个静态广播,这里为什么不适用动态注册广...
  • qq_21267961
  • qq_21267961
  • 2016年06月01日 11:21
  • 999

动态注册BroadcastReceiver无法被alarmManager启用???

IntentFilter filter=new IntentFilter(); filter.addAction(ACTION_NOTIFY_DATA);  filter.addAction(Me...
  • fanflame4444
  • fanflame4444
  • 2013年11月21日 17:37
  • 2098

AlarmManager后台一直周期性的执行(解决API大于19的问题)

需求:需要app在后台一直记录当前位置坐标,5s上传服务器一次,app退出依然执行。 分析:根据需求,决定使用AlarmManager+pendingIntent启动一个service,后台记录当前...
  • u013340638
  • u013340638
  • 2017年04月19日 17:35
  • 859

Android AlarmManager设置多个定时事件时只最后一个有效问题解决

转自http://blog.csdn.net/wangjia55/article/details/21518931 最近用到了AlarmManager,遇到了问题,当我设置多个定时器时,发现只有...
  • m0_37203672
  • m0_37203672
  • 2017年05月05日 19:59
  • 1075

AlarmManager 定时广播,定时服务

AlarmManager的作用文档中的解释是:在特定的时刻为我们广播一个指定的Intent。简单的说就是我们设定一个时间,然后在该时间到来时,AlarmManager为我们广播一个我们设定的Inten...
  • wds1181977
  • wds1181977
  • 2016年04月09日 16:34
  • 1563

Android定时器AlarmManager(定时发送广播)

1、MainActivity.java AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); Calendar calen...
  • u010164190
  • u010164190
  • 2017年04月24日 14:29
  • 1061
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android AlarmManager 设定时间小于当前时间,立即触发广播解决方案
举报原因:
原因补充:

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