NoticationMgr对于未接来电的处理
通过本文档将要学习Android KK和Android L两大版本对于未接来电逻辑处理上的差异,这个差异主要体现在架构设计。 主要是通过以下三个方面: ? 取消未接来电的通知; ? 有未接来电时的通知; ? 开机显示未接来电的能知;
Android KK版本对未接来电(Missed call)的处理
取消未接来电的通知
当有未接来电时显示未接来电的通知
当有未接来电时显示未接来电的通知是由CallNotifier的onDisconnect方法调用NotificationMgr的notifyMissedCall方法,第8行调用PhoneGlobals.createCallLogIntent方法获得拉起通话记录的intent,第16行的mNumberMissedCalls++未接来电计数器自增1,第20至第27行是设置显示的信息
只有一个未接来电时,会显示“未接来电/XX”,XX是联系人的姓名或号码,有多个未接来电时,会显示“未接来电/n个未接来电”,
当只有一个未接来电时,且号码有效时,增加两个action,即“回拨”、“发信息”,当参数phoneIcon或photo不为null时,还可以设置在托盘中显示的大图标。
最后调用NotificationManager的notify方法在托盘中显示未接来电通知
开机后显示未接来电通知
当Phone应用启动的时候在PhoneGlobals的onCreate方法中调用NotificationMgr的init方法进行初始化,接着调用updateNotificationAtStartup方法
在NotificationMgr的updateNotificationAtStartup方法中实例化QueryHandler,主要用于查询通话记录、联系人等信息,第10至12行是设置查询的条件,第16行调用QueryHandler的startQuery方法执行查询,注意在调用startQuery方法的第一个参数CALL_LOG_TOKEN,此查询是异步执行的。
整体介绍一个QueryHandler的结构,QueryHandler是异常查询处理器,主要完成查询通话记录,根据通话记录查询联系人,加载联系人的头像
NotificationInfo用于存储查询出来的未接来电的基本信息
相关推荐: