Telephony提供的功能: Voice, SMS, SIM, Data Connection, STK and etc

这个模块特殊的地方:

1. 在Phone应用中,注册了Service。这样Phone就必须始终运行。

将ITelephony放到Phone应用中:在Service中需要提供UI界面,比如打电话,拨号等。

2. 将与硬件相关的模块,抽离出来。一方面方便维护。另一个方面,在Java层是异步执行的,

在Native层是同步执行的。

3. 由于电话应用会退出,提供了系统服务来给应用注册回调。

代码分布:

公共接口:frameworks/base/telephony/java/android/telephony

Telephony模块对外接口: TelephonyManager, SMSManager等

内部接口:frameworks/base/telephony/java/com/android/internal/telephony

主要给Phone应用调用,功能实现模块。

RIL部分: hardware/ril

负责与Modem交互。

System Server服务: frameworks/base/services/java/com/android/server/TelephonyRegistry.java

telephony.registry: [com.android.internal.telephony.ITelephonyRegistry]

Phone应用:packages/apps/Phone/

提供打电话,拨号等功能,运行的Service有: "phone", "isms", "simphonebook", "iphonesubinfo"

phone: [com.android.internal.telephony.ITelephony]

iphonesubinfo: [com.android.internal.telephony.IPhoneSubInfo]

simphonebook: [com.android.internal.telephony.IIccPhoneBook]

isms: [com.android.internal.telephony.ISms]

运行模块:

Native Daemon:

Rild: 独立的Native进程。

下行数据:请求,

上行数据:响应,主动上报

Android Service:

TelephonyManager: Phone App中

SmsManager: Phone App中

TelephonyRegistry: System Server中

Android App: 提供界面

Linux中:

pppd:拨号程序

ppp driver:建立数据连接

通过ril.java与rild通信

1. 通过socket

2. RILSender/RILReceiver分别负责发送,各自都起一个线程。

RILSender/RILReceiver线程是在Phone应用中执行的。

3. 使用RILRequest来表示一个个请求。

请求的发送和接受是分开来的,在RIL中通过Serial来标识请求。

需要在指令执行完,处理什么事情。需要在创建请求的时候添加一个消息。

调用路径:

类TelephonyManager实现了android的电话相关操作。它主要使用两个服务来访问telephony功能:

1.ITelephony,提供给上层应用程序用户与telephony进行操作,交互的接口,在packages/apps/Phone中由PhoneInterfaceManager.java实现。

2.ItelephonyRegistry提供了一个通知机制,将底层来的上报通知给框架中需要得到通知的部分,由TelephonyRegistry.java实现

主动调用过程:(ITelephony接口)

应用进程: TelephonyManager通过Binder RPC调用

Phone进程: PhoneInterfaceManager-->(Phone)GSMPhone-->(CommandsInterface)RIL.java--> rild socket接口发送数据。

Rild进程:接受socket命令--> rild执行命令

关于电话的相关状态信息,获取通知路径如下:(ITelephonyRegister接口)

1. 在Phone进程中:

rild -(Rild Socket)->

RILReceiver--> DefaultPhoneNotifier-(Binder IPC)->

"telephony.registry" service

2. 在System Server中:

Binder Thread--> API-->Broadcast or Notify Listener

3. 在应用中,获取通知的方式:

a) 接受Broadcast通知

b) 注册Listener回调

Android Telephony相关推荐

  1. 《深入理解Android:Telephony原理剖析与最佳实践》一1.3 Android Telephony框架结构...

    1.3 Android Telephony框架结构 前面对Android手机操作系统整体框架结构及每一层进行了简单的分析和说明,相信大家对Android智能手机操作系统有了一些基本的了解和认识.结合前 ...

  2. android telephony phone application

    android telephony overview: http://mengxx.blog.51cto.com/2502718/795968 com.android.internal.telepho ...

  3. Android Telephony分析(七) ---- 接口扩展(异步转同步)

    本文是基于上一篇<Android Telephony分析(六) -- 接口扩展(实践篇)>来写的.  上一篇介绍的接口扩展的方法需要实现两部分代码:  1. 从APP至RIL,发送请求:  ...

  4. Android Telephony分析(六) ---- 接口扩展(实践篇)

    本文将结合前面五篇文章所讲解的知识,综合起来,实现一个接口扩展的功能.  如果还没有阅读过前面五篇文章的内容,请先阅读:  <Android Telephony分析(一) - Phone详解 & ...

  5. Android Telephony分析(五) ---- TelephonyRegistry详解

    本文紧接着上一篇文章<Android Telephony分析(四) -- TelephonyManager详解 >的1.4小节.  从TelephonyRegistry的大部分方法中:  ...

  6. Android Telephony分析(四) ---- TelephonyManager详解

    前言 TelephonyManager主要提供Telephony相关信息的查询/修改功能,以及Phone状态监听功能,封装的方法主要是提供给APP上层使用.  TelephonyManager.jav ...

  7. Android Telephony分析(三) ---- RILJ详解

    前言 本文主要讲解RILJ工作原理,以便更好地分析代码,分析业务的流程.  这里说的RILJ指的是RIL.java (frameworks\opt\telephony\src\java\com\And ...

  8. Android Telephony分析(二) ---- RegistrantList详解

    前言 本文主要讲解RegistrantList的原理,以及如何快速分析RegistrantList相关的代码流程.  在Telephony模块中,在RIL.Tracker(ServiceStateTr ...

  9. Android Telephony通话状态更新消息上报流程

    Telephony通话消息上报流程 通话相关代码名称统一约定以及运行进程: 通话相关代码名称统一约定及运行进程汇总 路径 统称 进程 packages/app/Dialer Dialer com.an ...

最新文章

  1. 【组队学习】【30期】7. CV中的Transformer
  2. [SQL Server优化]善用系统监视器,确定系统瓶颈
  3. html5自适应团购,基于HTML5的O2O团购平台的设计与实现
  4. 平衡二叉树(AVL)实现(3)-删除
  5. leetcode704二分法:(左闭右闭+左闭右开)
  6. 3 vue 线条箭头_线条眉要如何处理才能更自然?
  7. 性能之巅:Linux网络性能分析工具
  8. java 参数 python_java可变参数
  9. Google X 新项目,用计算机视觉养鱼?
  10. 如何使用cmd进入打印机选项_用命令添加打印机
  11. java中数组操作常见的三个错误
  12. 软考——软件工程——结构化分析与设计方法
  13. python打印图像所有的像素值
  14. 2020年全球及中国电源管理芯片(PMIC)行业发展现状及市场竞争格局分析,全球市场集中,德州仪器市占第一「图」
  15. 文字怎么转化计算机代码,如何把文字转换成代码
  16. 0 、 '0' 、 0 、 ’\0’ 区别
  17. 超级鸡马虚拟服务器,超级鸡马按键操作图文教程_超级鸡马怎么玩_牛游戏网
  18. gartner 曲线解读
  19. 用 Python 编程,假设一年期定期利率为 3.25%,计算一下需要过多少年,一万元的一年定期存款连本带息能翻番?
  20. 《实践论》笔记及当下反思(一)

热门文章

  1. osgEarth示例分析——osgearth_terrainprofile
  2. 贼好用,冰河再次升级了这款开源的精准定时任务和延时队列框架!!
  3. ubuntu禁用笔记本触摸板
  4. linux 进程间通信 数据库,什么是进程间通信
  5. 软件需求管理(二) 需求获取
  6. 嵌入式软件测试的基本方法
  7. Redis主从复制 AKF
  8. 2019计算机电源海关征税,回国华人注意!2019中国海关严打:这些东西千万别带了!...
  9. 高并发写场景:秒杀系统库存扣减
  10. Revit教程合集110部