赞
踩
6572_Telephony
3.1.8 TelephonyRegistry向ServiceManager注册 23
(本文在文字描述和图片引用方面,使用了其他同学的部分内容,在此感谢!本人着重于架构和功能的逻辑组织和源码分析过程。)
Android手机操作系统是一个基于Linux Kernel的分层智能手机操作系统,其共分为4层,从上到下分别是:
Ø 应用层(Java Application),包括了Android各种应用程序
Ø 应用框架层(Java Frameworks),是Google发布的核心应用所使用的API框架
Ø 系统运行库层(User Libraries),包含了手机系统平台必须的C/C++核心库、Dalvik虚拟机运行环境和HAL子层
Ø 核心层(Linux Kernel),Android 4.0 基于Linux Kernel 3.0.8 提供核心系统服务,例如文件管理、内存管理、进程管理、网络堆栈、驱动模型等操作系统的基本服务能力
Telephony为手机提供通信功能,其通信逻辑关系如下,
Android Telephony采用了分层结构,共跨越了4层:
Ø Telephony应用,包括了Phone、MMS和STK等应用程序
Ø Telephony框架,提供TelephonyManager,包含数据连接、通话、信息和SIM相关的API
Ø 无线通信接口层(RIL),主要位于User Libraries层中的HAL层,提供AP(Application Processor)和BP( Baseband Processor)之间的通信功能
Ø Modem,位于BP,主要负责实际的无线通信能力处理
其中,Telephony框架层是以Phone实例为核心的,Phone接口及其子类管理整个整个手机的Telephony功能。Phone相关信息在后面介绍。
Telephony框架层为应用层和框架层的其它服务提供Telephony服务,如下:
PhoneInterfaceManager服务,是ITelephony接口的实现,PhoneInterfaceManage
通过PhoneApp、CallManager、Phone对象实现相应功能。
IccSmsInterfaceManager短消息服务,是Isms接口的实现;IccPhoneBookInterfaceManager电话本服务,是IIccPhoneBook接口的实现;PhoneSubInfo提供用户信息读取服务,是IPhoneSubInfo接口的实现;
TelephonyRegistry提供应用层的消息登记服务,是ITelephonyRegistry接口的实现。
应用程序通过以下几个客户端对象使用Telephony框架提供的服务。
通过在SmsManager对象实例(通过SmsManager类的getDefault函数返回SmsManager对象)中访问IccSmsInterfaceManager服务,用来收发短信。
通过IccProvider一个内容提供对象提供对IccPhoneBookInterfaceManager服务的访问,读取和管理电话本。
通过TelephonyManager对象提供对PhoneSubInfo、PhoneInterfaceManager、TelephonyRegistry服务的访问,TelephonyManager对象通过getSubscriberInfo函数获得PhoneSubInfo服务的远程访问代理对象。
通过getITelephony函数获得PhoneInterfaceManager的远程访问代理对象。提供一个对象全局sRegistry(指向TelephonyRegistry服务的远程访问代理对象)访问TelephonyRegistry服务。
Android中关于telephony相关的java代码主要在下列目录中:
1. frameworks/base/telephony/java/android/telephony
提供Android telephony的公开接口,任何具有权限的第三方应用都可使用,如接口类TelephonyManager。
2. frameworks/base/telephony/java/com/android/internal/telephony
3. frameworks/base/services/java/com/android/server/TelephonyRegistry.java
提供一系列内部接口,目前第三方应用还不能使用。当前似乎只有packages/apps/Phone能够使用
4. frameworks/opt/telephony
5. packages/apps/Phone
一个特殊应用,或者理解为一个平台内部进程。其他应用通过intent方式调用这个进程的服务。
Phone相关类的关系图:
Phone |
接口,定义了一些telephony相关的常量和方法 |
PhoneBase |
类,继承了handler,实现了phone接口, 类里定义了一些常用类的引用,如mCM,SMSDispatcher |
PhoneNotifier |
接口,定义了一些telephony相关的通知方法 |
PhoneFactory |
类,创建phone实例,主要完成socket创建、RIL实例创建、 phoneproxy实例创建。 |
MTKPhoneFactory |
MTK对PhoneFactory的封装,当前看不到代码 |
PhoneProxy |
类,继承了handler,实现了phone接口,使用phone实例,完成和ril交互的接口。 |
Phone描述了对电话的所有操作接口。PhoneBase直接从Phone 派生而来, GSMPhone又从PhoneBase派生而来,代表GSM手机的通信功能。PhoneProxy也从Phone直接派生而来,完成和ril交互的接口,手机的Phone实例就是一个PhoneProxy实例。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。