Android中支持多种不同类型的闹钟,包括RTC硬件闹钟,根据真实时间流逝的ELAPSED_REALTIME闹钟,唤醒休眠和不唤醒休眠的闹钟,以及很有意思的非准时闹钟。不过至今为止,Android还不支持关机闹钟。
使用闹钟首先是获取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设置闹钟,其中
alarmManager.set(AlarmManager.RTC_WAKEUP, startTime, pendingIntent); //设置单次闹钟//设置重复发生的闹钟,比如每天一次的
long startTime = System.currentTimeMillis();
alarmManager.setRepeating(AlarmManager.RTC, startTime, interval,pendingIntent);
long elapsedTime =
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, elapsedTime , interval,pendingIntent);
闹钟的标志有四种:
AlarmManager.RTC,硬件闹钟,不唤醒休眠;
AlarmManager.RTC_WAKEUP,硬件闹钟,唤醒休眠;
AlarmManager.ELAPSED_REALTIME,真实时间流逝闹钟,不唤醒休眠;
AlarmManager.ELAPSED_REALTIME_WAKEUP,真实时间流逝闹钟,唤醒休眠;
RTC闹钟和ELAPSED_REALTIME最大的差别就是前者可以通过修改时间触发闹钟事件,后者要通过真实时间的流逝,即使在休眠状态,时间也会被计算。
最后说一下设置非准确时间闹钟
alarmManager.setInexactRepeating(AlarmManager.RTC, startTime,intervalL, pendingIntent);
非准确闹钟只能保证大致的时间间隔,但是不一定准确,可能出现设置间隔为30分钟,但是实际上一次间隔20分钟,另一次间隔40分钟。它的最大的好处是可以合并闹钟事件,比如间隔设置每30分钟一次,不唤醒休眠,在休眠8小时后已经积累了16个闹钟事件,而在手机被唤醒的时候,非准时闹钟可以把16个事件合并为一个。非准时闹钟一般来说比较节约能源。