关于AlarmManager就是google Android提供的定时管理器。通过get相应的服务来获得一个实例来操作我们的动作。看下面一段代码:
Calendar calende=Calendar.getInstance();
calende.set(Calendar.DAY_OF_WEEK, week);
calende.set(Calendar.HOUR, hour);
calende.set(Calendar.MINUTE, minute);
calende.set(Calendar.SECOND, 0);
calende.set(Calendar.MILLISECOND, 0);
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(有代码省略)
manager=(AlarmManager) this.getSystemService(ALARM_SERVICE);
manager.setRepeating(AlarmManager.RTC_WAKEUP, calende.getTimeInMillis(), 120*1000, pi);
首先获得一个日历的实例,通过set来自定义自己的日历实例。这里我设定了指定的星期、时间。然后我们设置了定时器即在calende.getTimeInMillis()这个时间到来时会做我的pi里的事情,120*1000是设定的循环周期吧单位是毫秒即每隔两分钟会循环执行pi动作一次。
有个问题来了:我只设置了星期几没有设置月份以及年份啊?manager会知道在哪个星期的星期几响起吗?
是的虽然这里我只设置了星期几但是在你calendar一个实例的时候系统自动取得了系统的当前时间即默认取当前的年份和月份。举个例子:比如我设置week=4(代表星期三 因为星期日是1以此类推)当前时间就是星期三的话如果设定的时间到了定时就会被击发。如果当前时间小于星期三比如星期二则系统会默认你设置的星期三和当前时间所在的那个星期是一样的它们的时间差只有一天。
还有一个问题:就是设置的时间如果小于当前系统时间就会立刻击发动作这显然不是我们想要的比如我设定7点闹钟而现在是8点我一设置闹钟响了显然不行,只需在第二个参数后加上要推迟的时间即可比如你想推迟一天即明天7点响只需这样:
manager.setRepeating(AlarmManager.RTC_WAKEUP, calende.getTimeInMillis()+1000*60*60*24, 120*1000, pi);
同理设置循环星期也是如此。