Android Alarm学习笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设置一个Alarm需要更新一下数据。
1. update alarms.db
2. update com.android.alarmclock_preferences.xml
3. update Settings.System.NEXT_ALARM_FORMATTED for status bar
4. set Kernel RTC alarm or send a message if no driver
具体的函数调用如下所示:
com.android.alarmclock.AlarmClock.onCreate() -> SetAlarm.onPreferenceTreeClick() -> SetAlarm.saveAlarm() ->
Alarm.setAlarm() -> Alarm.setNextAlert() -> Alarm.enableAlert(ALARM_ALERT_ACTION)/saveNextAlarm(Settings.System.NEXT _ALARM_FORMATTED) ->
android.app.AlarmManager.set() -> AlarmManagerService.set() -> AlarmManagerService.setRepeating -> AlarmManagerService.setLocked() -> android.app.IAlarmManager.set() -> RTC.save()// /dev/alarms
Alarm闹铃的函数调用如下所示:
RTC (WAKEUP) -> AlarmReceiver.onReceive(ALARM_ALERT_ACTION) -> AlarmAlert.onCreate() ->
AlarmAlertWakeLock.acquire()/KeyguardManager.newKeyguardLock().disableKeyg uard() ->
AlarmKlaxon.postPlay() -> AlarmKlaxon.KillerCallback().onKilled() -> AlarmAlert.dismiss() ->
AlarmAlertWakeLock.release()/KeyguardManager.newKeyguardLock().reenableKey guard()
DeskClock App中的code block说明如下:
Alarm是描述闹钟的抽象类。
AlarmAlert处理闹铃过程中系统相关的事件,继承AlarmAlertFullScreen。AlarmAlertFullScreen显示闹铃界面,并处理闹钟界面上到控件消息。AlarmAlertWakeLock提供控制wakelock接口。
AlarmClock闹钟界面,包括闹钟列表、数字时钟、option菜单。
AlarmKlaxon是一个服务,提供闹铃和震动功能,如果一个闹铃fire,前面一个闹铃已经在闹来,则取消前面那个,闹后来者。
AlarmPreference闹铃文件。
ContentProvider维护闹钟表,字段包括_id、hour、minutes、daysofweek、alarmtime、enabled、vibrate、message、alert。
Alarms提供了操作闹钟的接口,相当于AlarmManager。enableAlert()设置一个闹钟,用的是PendingIntent到方式计算时间。RTC的设置在enableAlert()的am.set(AlarmManager.RTC_WAKEUP, atTimeInMillis, sender); RTC_WAKEUP表示该Alarm如果在关机的情况下来到,则会自动开机闹铃。
DeskClock桌面时钟到activity。其中包括了系统时间、日期、电池及天气等信息,其中天气信息是判断是否存在提供天气信息的app后,从数据库中读取当前的天气信息来更新。也就
是天气APP只需要更新数据库中的天气信息即可。
DigitalClock维护数字时钟。
HandleSetAlarm设置alarm到activity。
Framework相关的code block如下:
AlarmManager和AlarmManagerService,这两个文件组成了AlarmService。
关于PendingIntent:
PendingIntent就是一个Intent的描述,我们可以把这个描述交给别的程序,别的程序根据这个描述在后面的别的时间做你安排做的事情(By giving a PendingIntent to another application, you are granting it the right to perform the operation you have specified as if the other application was yourself,就相当于PendingIntent代表了Intent)。本例中别的程序就是发送短信的程序,短信发送成功后要把intent广播出去。