1.Android Telephony 结构
Android Telephony业务跨越AP与BP侧,AP和BP之间的相互通讯。
1. Android 系统在 AP 上运行,而 Telephony 运行在 Linux Kernel 之上的用户空间 。
2. Android Telephony 也采用了分层结构的设计,共跨越了三层:应用层 、应用框架层和系统运行库层,与 Android操作系统整体分层结构保持一致;
3. Android Telephony 从上到下共分三层: Telephony 应用、 Telephony 框架、 RIL (Radio Interface Layer ,无线通信接口层,主要位于系统运行库层的 HAL 中)。
4. BP SoftWare 在 BP 上运行,主要负责实际的无线通信能力处理
2.主要功能
Android telephony主要涉及三个业务模块:
1. 通话业务(Phone Call Relative)
2. 数据业务(Data service related)
3. 补充业务(Supplimentary service)
通话业务涉及到的功能点有:来电(MO)、去电(MT)、多方通话(Multi-Call)、会议电话(Conference call)、高清语音电话(VoLTE Call)、视频电话(ViLTE Call)、WI-FI Call、SIP Call等。
数据业务涉及到的功能点有:MMS发送、设置中APN、数据网络设置相关等。
补充业务涉及到的功能点有:语音信箱、双卡选择、呼叫转移、呼叫限制、网络搜索、FDN等,这个都应该是补充业务的范畴。
3.Telecomm的初始化
看Dialer代码发现通过如下方式来打电话的,通过调用framework/base/telecomm/java/
android/telecomm/下的TelecomManager的placeCall来开始拨号。
我们发现当前类中的getTelecomService 方法,通过Context.TELECOM_SERVICE字段,可以获取 Service 服务的 Binder 对象,代码逻辑详情如下:
frameworks/base/services/core/Java/com/android/server/telecom/TelecomLoaderService.java(SystemServer)中服务绑定的时候会把binder添加到ServiceManager当中,给系统其他地方通过TELECOM_SERVICE字段get到binder对象来调用Telecomm
当中具体的接口实现
这里有具体的绑定服务的逻辑
TelecomManager 对象和Telecom 系统服务均是在手机启动过程中,SystemServer 加载时同步创
建的。我们需要在这里做一下区分:
? TelecomManager 类的 from 方法通过Context 获取的是 TelecomManager 对象 。
?TelecomManager类的getTelecomService方法通过ServiceManager获取的是 IT elecomService服务对象。
这样我们可以知道最终placeCall函数调用的是这里绑定的TelecomService当中的具体实现,它的代码在packages/services/Telecomm当中,在绑定TelecomService时,TelecomService会进行一系列的初始化操作
这里有个用单例模式设计的类TelecommSystem,它首先通过TelecomService绑定后在initializeTelecomSystem函数会new一个TelecommSystem对象,并通过他的静态方法setInstance缓存起来,这个单例类TelecommSystem初始化需要很多参数,基本上所有的功能都在TelecommSystem的构造函数申明新建了,这样Telecomm的代码就可以通过TelecomSystem的静态方法getInstance全局访问这里面申明的每一个功能
通过代码可以看到TelecomService最终返回的是binder对象是从TelecommSystem当中获取到,mTelecomServiceImpl是在TelecommSystem初始化的时候新建一个TelecomServiceImpl对象
再来看一下TelecomServiceImpl类,从这里可以看出来framework/base下面的TelecomManager获取到的binder就是Telecomm App里面的TelecomServiceImpl类当中申明的mBinderImpl对象,这样调用的具体实现也都是在这个类当中,这样Telecomm的初始化流程就分析完了
看完这段初始化的内容,也给了我们启示,我们也可以模仿这段原生的逻辑添加我们自己的app系统服务,如何添加以后会说到......