电话管理是Android 系统支持的重要的业务之一,提供拨打电话、接听电话、收发短信、电话薄、网络事件监听、读取用户信息等功能。
从下到上可以分为四层:modem驱动层、RILD层、Telephony框架实现层、 PHONE应用层,下层为上层提供服务,每层之间采用不同的通讯方式交互。RILD层实现为单独的一个开机启动的进程(rild命令),通过AT命令与modem驱动层交互,Telephony JAVA框架实现层包括一个RIL抽象层,RIL抽象层中通过一个本地socket与RILD层交互,Phone应用层通过Binder机制与Telephony框架交互。
- PHONE应用层
Phone 应用主要处理两种事件 , 即通话事件与非通话事件 . 其基础是框架层的 telephony. 通话事件包括来电,接听,保持,挂断,两种电话切换等. 对通话事件的处理包括界面处理与非界面处理, 前者由IncallScreen 完成, 后者由CallNotifier 完成. 通话事件的发送是由 callManger 将事件转化为消息发送给应用层. 非通话事件包括耳机插拨, 飞行模式变更. 非通话事件由 PhoneApp处理, 通过广播形式让PhoneApp接收到.
Telephony 暴露给应用层的并不多, 主要是 CallManager 将 ril 事件转化为消息, 并把消息发送给由callManager 所注册的应用层, PhoneFactory 创建具体的phone 类对象,以及提供电话相关信息(如信号强度, 获取电话类型, 获取网络类型)的TelePhonyManger. 另一类是一些接口