第十二篇 Android 系统电话管理机制与架构

本文深入探讨Android系统的电话管理机制,从硬件驱动层到PHONE应用层逐层解析,涵盖RIL daemon、Telephony框架和PHONE应用的核心组件。通过TelephonyManager、PhoneInterfaceManager等服务,阐述了如何实现电话、短信、电话簿等功能,并对比分析了GSMPhone和CDMAPhone的实现差异。
摘要由CSDN通过智能技术生成

     电话管理是Android 系统支持的重要的业务之一,提供接听电话,收发短信、电话薄、网络事件监听、读取用户信息等功能。

      从下到上可以分为四层:硬件驱动层、RIL daemon层、Telephony框架实现层、 PHONE应用层,下层为上层提供服务,每层之间采用不同的通讯方式交互。RIL daemon层实现为单独的一个开机启动的进程(rild命令),通过AT命令硬件驱动层交互,Telephony JAVA框架实现层包括一个RIL抽象层,RIL抽象层中通过一个本地socketRIL daemon层(rild)交互,PHONE应用层通过BINDER机制与Telephony框架交互。

      本文主要分析框架层相关的主要类的结构。

Telephony框架

        Telephony框架系统类图如下图:

        

        Telephony框架层为应用层和框架层的其它服务提供Telephony服务,提供了如下几个服务:PhoneInterfaceManager服务,是ITelephony接口的桩实现,IccSmsInterfaceManager短消息服务,是Isms接口的桩实现;IccPhoneBookInterfaceManager电话本服务,是IIccPhoneBook接口的桩实现;PhoneSubInfo提供用户信息读取服务,是IPhoneSubInfo接口的桩实现;TelephonyRegistry提供应用层的消息登记服务,是ITelephonyRegistry接口的桩实现。

       应用程序通过以下几个客户端对象使用Telephony框架提供的服务。

       应用程序可以在SmsManager单例对象(通过SmsManager类的getDefault函数返回SmsManager单例对象)中访问IccSmsInterfaceManager服务,用来收发短信。

       通过IccProvider一个内容提供对象提供对IccPhoneBookInterfaceManager服务的访问,读取和管理电话本。 

       通过TelephonyManager对象提供对PhoneSubInfoPhoneInterfaceManagerTelephonyRegistry服务的访问,TelephonyManager对象通过getSubscriberInfo函数获得PhoneSubInfo服务的远程访问代理对象。通过getITelephony函数获得PhoneInterfaceManager的远程访问代理对象。提供一个对象全局sRegistry(指向TelephonyRegistry服务的远程访问代理对象)访问TelephonyRegistry服务。

        TelephonyManager通过这三个接口函数提供对外的TelephonyAPI,因此应用程序可以通过 TelephonyManager对象提供的TelephonyAPI访问这些服务,使用Telephony框架层提供的接口功能。

        TelephonyManager对象本身通过Context对象调用getSystemService(Context.TELEPHONY_SERVICE)函数返回,TelephonyManager对象是一个单例对象。

        PhoneInterfaceManager服务在默认电话应用的PhoneApp对象中采用单例模式进行初始化(PhoneApp对象本身也是单例对象),和PhoneApp对象公用一个进程,PhoneInterfaceManager为框架层的其它服务提供Telephony API 服务,并通过TelephonyManager对象(通过getITelephony函数获得ITelephony接口)为其它应用提供服务。PhoneInterfaceManager通过PhoneAppCallManagerPhone对象实现相应功能。CallManager是一个单例对象,CallManager对象提供CALL控制以及登记通知等功能。

        Phone对象是整个Telephony服务的核心,主要的Telephony服务(IccSmsInterfaceManagerIccPhoneBookInterfaceManagerPhoneSubInfo)及数据连接功能都通过具体的Phone对象提供,具体的Phone对象包括CDMAPhoneCDMALTEPhoneGSMPhoneSipPhone

       PhoneBase抽象类是这些具体Phone对象的

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值