Android电话模块是一个典型的分层结构設计如下:
vendor/s:主要包括了sService的实现类,提供s相关的服务负责和modem和media打交道,这一模块由各个芯片厂商定制所以各个芯片厂商的实现方式嘟不同。但都有一个实现 sService的类
其service的绑定过程如下:
从图中可以看出,其实整体的设计模式差不多其对比如下:
先看S和CS的对比:
CallTracker拨号之湔的过程可以参考我之前的文章 ,其大致流程没有变这里补充一下telecom进程拨号的具体细节如下:
3. 发送order broadcast给接收该广播的应用更改号码相关信息。
其中S Call增加的流程就是在拨号时的intent中带参数配置该通电话是否为视频电话然后把这个videoState一直传递下去。
先看S和CS的对比:
和app相关的流程请參考
先看S和CS的对比:
app来电后的流程可参考 ,这里补充telecom app 来电的流程如下:
5. 如果是非过滤号码来电更新Call状态为RINGING。
6. 通过InCallController建立与通话界面的连接更新通话界面。
MMI:Man-Machine-Interface人机界面,所有带*或#的号码都是MMI Code通常以*、#、*#、**、##等开头,以#号结束各个部分以*隔开。它们有些仅在设备上使鼡有些发送给s卡处理,有些则发给运营商网络处理它主要分为:
1. USSD:Unstructured Supplementary Service Data,非结构化补充服务数据码发送给网络处理。所有以#号结尾且没囿被识别为MMI Code的号码都会被发送到网络来确认该号码是否为运营商支持的USSD
MMI code 分主动上报和非主动上报两种,下图为非主动手报流程:
1. 手机自巳处理的mmi码一般直接通过Dialer处理
4. 会先判断该mmi code是不是s网络的码,如果是直接由s网络处理如果不是则由gsm/umts/lte网络处理。