Android Alarm学习笔记

Android Alarm学习笔记
Android Alarm学习笔记

设置一个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广播出去。

相关主题
相关文档
最新文档