6572_Telephony

6572_Telephony

 

1 术语和前言: 4

2 TelePhony: 4

2.1 Telephony框架 4

2.2 Phone介绍 6

2.3 Message 9

2.4 Call 9

2.5 Network States 9

2.6 Data Connection 10

2.7 Simcard 12

2.8 PhoneNotifier 12

2.9 TelephonyManager 13

2.10 ITelephonyRegistry 15

3 TelePhony启动代码分析: 16

3.1 Telephony关键类初始化 16

3.1.1 Phone进程启动 16

3.1.2 PhoneGlobals创建 18

3.1.3 PhoneFactory创建 20

3.1.4 Phone创建 21

3.1.5 SIMRecords初始化 21

3.1.6 PhoneNotifier初始化 22

3.1.7 ITelephonyRegistry 23

3.1.8 TelephonyRegistryServiceManager注册 23

3.1.9 TelephonyManager 25

3.1.10 Service 25

3.1.11 Message加载 26

3.1.12 Isms 26

3.1.13 Contact加载 28

3.1.14 PhoneSubInfo 28

3.2 Telephony启动流程图 28

 

1 术语和前言:

(本文在文字描述和图片引用方面,使用了其他同学的部分内容,在此感谢!本人着重于架构和功能的逻辑组织和源码分析过程。)

2 TelePhony:

2.1 Telephony框架

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应用,包括了PhoneMMSSTK等应用程序

Ø  Telephony框架,提供TelephonyManager,包含数据连接、通话、信息和SIM相关的API

Ø  无线通信接口层(RIL),主要位于User Libraries层中的HAL层,提供APApplication 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方式调用这个进程的服务。

1.1 Phone介绍

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实例。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值