参考:
http://www.360doc.com/content/13/0110/23/11991_259460170.shtml
使用闹钟首先是获取AlarmManager
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
然后是生成一个PendingIntent
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,req, intent, PendingIntent.FLAG_UPDATE_CURRENT);
其中req是这个PendingIntent的标志,Intent是将来要转发给BroadCastReceiver的Intent。
之后是通过AlarmManager设置闹钟,
其中
1.alarmManager.set(AlarmManager.RTC_WAKEUP, startTime, pendingIntent); //设置单次闹钟2.alarmManager.setRepeating(AlarmManager.RTC, startTime, interval,pendingIntent); //设置重复发生的闹钟,比如每天一次的
3.设置非准确时间闹钟
alarmManager.setInexactRepeating(AlarmManager.RTC, startTime,intervalL, pendingIntent);
非准确闹钟只能保证大致的时间间隔,但是不一定准确,可能出现设置间隔为30分钟,但是实际上一次间隔20分钟,另一次间隔40分钟。它的最大的好处是可以合并闹钟事件,比如间隔设置每30分钟一次,不唤醒休眠,在休眠8小时后已经积累了16个闹钟事件,而在手机被唤醒的时候,非准时闹钟可以把16个事件合并为一个。 非准时闹钟一般来说比较节约能源。
闹钟的标志有四种:
AlarmManager.RTC,硬件闹钟,不唤醒休眠;
AlarmManager.RTC_WAKEUP,硬件闹钟,唤醒休眠;
AlarmManager.ELAPSED_REALTIME,真实时间流逝闹钟,不唤醒休眠;
AlarmManager.ELAPSED_REALTIME_WAKEUP,真实时间流逝闹钟,唤醒休眠;
RTC闹钟和ELAPSED_REALTIME最大的差别就是前者可以通过修改时间触发闹钟事件,后者要通过真实时间的流逝,即使在休眠状态,时间也会被计算。