Android Telephony
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相关推荐
- 《深入理解Android:Telephony原理剖析与最佳实践》一1.3 Android Telephony框架结构...
1.3 Android Telephony框架结构 前面对Android手机操作系统整体框架结构及每一层进行了简单的分析和说明,相信大家对Android智能手机操作系统有了一些基本的了解和认识.结合前 ...
- android telephony phone application
android telephony overview: http://mengxx.blog.51cto.com/2502718/795968 com.android.internal.telepho ...
- Android Telephony分析(七) ---- 接口扩展(异步转同步)
本文是基于上一篇<Android Telephony分析(六) -- 接口扩展(实践篇)>来写的. 上一篇介绍的接口扩展的方法需要实现两部分代码: 1. 从APP至RIL,发送请求: ...
- Android Telephony分析(六) ---- 接口扩展(实践篇)
本文将结合前面五篇文章所讲解的知识,综合起来,实现一个接口扩展的功能. 如果还没有阅读过前面五篇文章的内容,请先阅读: <Android Telephony分析(一) - Phone详解 & ...
- Android Telephony分析(五) ---- TelephonyRegistry详解
本文紧接着上一篇文章<Android Telephony分析(四) -- TelephonyManager详解 >的1.4小节. 从TelephonyRegistry的大部分方法中: ...
- Android Telephony分析(四) ---- TelephonyManager详解
前言 TelephonyManager主要提供Telephony相关信息的查询/修改功能,以及Phone状态监听功能,封装的方法主要是提供给APP上层使用. TelephonyManager.jav ...
- Android Telephony分析(三) ---- RILJ详解
前言 本文主要讲解RILJ工作原理,以便更好地分析代码,分析业务的流程. 这里说的RILJ指的是RIL.java (frameworks\opt\telephony\src\java\com\And ...
- Android Telephony分析(二) ---- RegistrantList详解
前言 本文主要讲解RegistrantList的原理,以及如何快速分析RegistrantList相关的代码流程. 在Telephony模块中,在RIL.Tracker(ServiceStateTr ...
- Android Telephony通话状态更新消息上报流程
Telephony通话消息上报流程 通话相关代码名称统一约定以及运行进程: 通话相关代码名称统一约定及运行进程汇总 路径 统称 进程 packages/app/Dialer Dialer com.an ...
最新文章
- 【组队学习】【30期】7. CV中的Transformer
- [SQL Server优化]善用系统监视器,确定系统瓶颈
- html5自适应团购,基于HTML5的O2O团购平台的设计与实现
- 平衡二叉树(AVL)实现(3)-删除
- leetcode704二分法:(左闭右闭+左闭右开)
- 3 vue 线条箭头_线条眉要如何处理才能更自然?
- 性能之巅:Linux网络性能分析工具
- java 参数 python_java可变参数
- Google X 新项目,用计算机视觉养鱼?
- 如何使用cmd进入打印机选项_用命令添加打印机
- java中数组操作常见的三个错误
- 软考——软件工程——结构化分析与设计方法
- python打印图像所有的像素值
- 2020年全球及中国电源管理芯片(PMIC)行业发展现状及市场竞争格局分析,全球市场集中,德州仪器市占第一「图」
- 文字怎么转化计算机代码,如何把文字转换成代码
- 0 、 '0' 、 0 、 ’\0’ 区别
- 超级鸡马虚拟服务器,超级鸡马按键操作图文教程_超级鸡马怎么玩_牛游戏网
- gartner 曲线解读
- 用 Python 编程,假设一年期定期利率为 3.25%,计算一下需要过多少年,一万元的一年定期存款连本带息能翻番?
- 《实践论》笔记及当下反思(一)