android TeleComm Telephony Dialer之间的说明

安卓在5.0之后在TeleService和IncallUI之间多加了一层TeleComm,个人感觉是不想让IncallUI和Phone进程联系过于紧密,也便于其他通话方式的添加(不仅仅局限于通过电信运营商拨打传统电话),

拨号成功后,对方接听了此路通话,那么通话界面将更新当前通话中的通话状态,并开始通话计时,可以理解为:Modem——>RIL——>TeleService——>Telecom——>Dialer,一层一层上报通话状态为,“通话中....”,的消息处理和发送过程.

系统的分层 

       Dialer,Telecom和TeleService三大应用可以理解为:Dialer应用是普通的Android  App应用,其运行进程的用户信息和进程信息,也能说明此问题;Telecom应用运行在system_service进程上,其进程用户名为system系统用户,说明他在运行在Android Framework框架层;TeleService应用运行的进程名是com.android.phone,用户名是radio,承载着Telephony Call协议栈,同样可以认为他运行在Android Framewrok框架层;最后RIL他运行在HAL(硬件抽象层)。
————————————————
版权声明:本文为CSDN博主「达帮主」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35427437/article/details/102963199

上文出自:https://blog.csdn.net/qq_35427437/article/details/102963199


学习android的通讯模块Telephony,那么先看下其框架结构:

应用层:包含android的应用程序
应用框架层:也就是常说的framework,包含常用的API框架
系统运行层:包含c/c++核心库和HAL层等
核心层:包含TCP/UDP/IP,camera drivers等

Android Telephony业务跨越AP,BP,AP和BP之间的相互通讯。

Android系统运行于AP之上,Telephony运行在Linux Kernel之上的User Space空间。

BP software运行于BP,主要负责无线通信处理。

上文出自:https://blog.csdn.net/tingsky9985/article/details/79896296?spm=1001.2014.3001.5501


概述

VoiceCall就是我们通常所说的打电话是基于系统中Telephony框架的具体应用情景,Telephony中涉及的其他通讯功能有ServiceState(服务状态)、DataConnection(数据链接)、SMS(短信),这篇文章重点讲解Call(通话)

1.MO(Mobile Origination Call)主叫,操作流程:拨号,启动UI界面,更新通话状态;

2.MT(Mobile Termination Call)被叫,操作流程:响铃,启动UI界面,更新通话状态。

VoiceCall框架

VoiceCall是一个可以通话的手机功能,Android系统中的VoiceCall的组成结构主要由下面几部分构成

1.Dialer(IncallUI) 为用户交互操作提供UI界面

2.Telephony Service 封装了控制,查询Telephony等功能

3.Telephony Framework 提供通话各种功能调用和状态查询,负责上层和Modem的通信

4.RIL 负责拨号,Sip,package收发等基本操作

voice_call_action

具体个模块详细信息请查看下表:

模块名称模块路径模块功能
Dialpadpackages/apps/Dialer/拨号盘
CallLogpackages/apps/Dialer/通话记录。其中显示的信息是从数据库中读出来的。在通话结束时,会将Call的信息存储到CallLog数据库中。
InCallUIpackages/apps/Dialer/通话中的画面显示,在Android原生设计中,该模块只处理界面相关的内容。
TeleServicepackages/services/TelephonyTeleService Framework 和 TeleCom Framework沟通的介质。
CallSettingspackages/services/Telephony里面多数是增值服务(SS)的设置,设置的过程中,会向MODEM侧发请求。比如:呼叫转移(CF)。
TeleCompackages/services/TelecommApp侧维护Call,call的相关处理都在TeleCom中进行。
TeleService FWframeworks/opt/telephony和RIL通信,完成Call的基本通话功能以及其他相关业务。
Telecom FWframeworks/base/telecom确保TeleCom的独立性,减少TeleCom和其他模块的直接交互。

VoiceCall流程

主要代码介绍

在学习VoiceCall的流程之前,先总结一下通话流程中的主要代码分布和作用

路径主要代码文件代码功能介绍
packages/apps/DialerDialpadFragment.java拨号盘界面
packages/apps/DialerInCallScreen.java通话界面(通话信息、状态显示,通话控制按钮)
packages/services/TelecommNewOutgoingCallIntentBroadcaster.java接收CALL、CALL_PRIVILEGED、CALL_EMERGENCY类型的ACTION,发送ACTION_NEW_OUTGOING_CALL广播
packages/services/TelephonyPhoneApp.java创建Phone对象,控制耳机、蓝牙、感应器、背景灯和Call状态等
packages/services/TelephonyPhoneUtils.java通话控制辅助类
packages/services/TelephonyCallNotifier.java电话应用程序模块,用于侦听电话状态更改以及来自电话层的各种其他事件,并触发任何生成的UI行为(例如启动Incoming Call UI,播放通话音,更新通知,编写通话记录条目等)
frameworks/opt/telephonyPhone.javaPhone对象的抽象接口
frameworks/opt/telephonyCallManager.java为PhoneApp提供了一个访问和控制调用的抽象层,负责Framework和APP层的交互 1.呼叫控制和操作,例如dial()和hangup()2.通道功能,例如CanConference()3.注册通知
frameworks/opt/telephonyCallTracker.java和RIL.java交互,发起Call相关请求、跟踪Call状态
frameworks/opt/telephonyServiceStateTracker.java和RIL.java交互,跟踪服务状态变化,并发起相关消息通知,SIM卡注册服务,SIM卡状态,手机信号等功能
frameworks/opt/telephonyDcTracker.java和RIL.java交互,跟踪数据链接相关状态
frameworks/opt/telephonyRIL.java和RIL(native)交互,完成AT命令执行,Call状态更新
frameworks/base/telephonyTelephonyManager.java提供对设备上telephony services信息的访问
hardware/rilril.cppnative层的RIL环境
hardware/rilrild.cRILD守护进程

上文出自:http://blog.hsujee.com/2018/08/08/Android/Tele/2018-08-08-Telephony%E8%A7%A3%E6%9E%90%E4%B9%8BVoiceCall/


在我的概念里,Telephony 是从 GsmcdmaPhone 这一对象开始往下算起,才算是 Telephony 层。实际上 Telephony 的概念,它还包括这三个部分,一直以为是 Call App 的模块:

/packages/services/Telephony ==> TeleService.apk
/packages/services/Telecomm ==> Telecomm.apk
/frameworks/base/telecomm ==> Telecomm FW
上面这三个部分,都算是 Telephony;在这个概念里, Call App UI 才算是上层 app 模块。

/packages/apps/Dialer/java/com/android/incallui ==> InCallUI
这篇文章,从框架上讲解一下这三个模块的关系,并整理一下来电的流程,熟悉他们的调用关系。
只谈框架流程,不聊具体细节。

架构
先上一张图,从大体上看他们的调用关系。

Telephony

如上图所示,

TeleService <==> Telephony Framework PhoneBase;TeleService 和 framework 进行交互;
TelecommService/Telecomm FW <==> TeleService , TeleService 和 InCallUI 交互要经过 Telecomm 层;
InCallUI <==> TelecommService/Telecomm FW 交互;
这就是基本的架构,要清楚知道交互消息是如何传输的, 看起来是 Telecomm 起着中间桥梁的作用。

Telephony 主要的类

Telephony Class

TeleService 中的 TelephonyConnection 监听来自 PhoneBase 的 call 状态变化,并通过 connectionService 相关的类(ConnectionServiceWrapper) 向 Telecomm 传递状态信息;
Telecomm 到 InCallUI 的过程,则是由 CallsManager 向 InCallController 传递,最后通过 InCallServiceImpl 向 InCallUI 传递。
中间各层 call 的转化,需要经过 Telecom FW.

Telephony 中主要的 Service


开机加载 TelecommServiceImpl(TelecommManager), 创建 CallsManager 和 InCallController;同时创建 PhoneAccount,监听来电信息;
来电,创建 TelephonyConnectionService, 创建 TelephonyConnection 监听 Call 状态变化;
CallsManager 回调 InCallController, 告知 InCallService, 最终更新到 InCallUI.
上文出自:https://blog.csdn.net/amd123456789/article/details/95720378

 

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《深入理解Android:Telephony原理剖析与最佳实践》为经典畅销书“深入理解Android”系列新作,从源码角度深入解析Telephony的架构设计与实现原理,深刻揭示Android系统的通信机制! 本书是“深入理解Android”系列的第3本,前两本书的内容和质量在Android开发者社群内得到了高度认可,已经树立起该系列图书的品牌。在写作思路和方式上,本书与前两本书一脉相承,对它们的优点进行了继承和发扬;在内容上,本书从从源代码角度深入解析了Android Telephony的架构设计与实现原理,深刻揭示了Android系统的通信机制。对于Android应用开发工程师和系统工程师而言,本书都是难得的研究和学习资料。 全书共13章,分为五部分:第一部分(1~3章),首先介绍了智能手机的系统结构、Android系统的架构、Telephony框架的结构,然后详细介绍了Android源代码编译环境和阅读环境的搭建方法,以及阅读本书要做的技术准备;第二部分(4~6章),对Android的通话功能进行了深入的分析,包括对通话流程的分析、对主动拨号和来电流程的分析、对通话应用机制的分析,以及对手机通信功能在框架层和应用层中的实现机制的分析;第三部分(7~9章),对Android的通信功能进行了深入的分析,包括对网络服务状态的运行机制的分析、对Android手机上网的实现机制的分析,以及对短息发送和接收流程的分析;第四部分(10~12章),对Android RIL的工作机制进行了深入的分析,包括对框架层中的RILJ运行机制的分析、对RILC系统结构及LibRIL运行机制的分析,以及对Reference-RIL框架的原理的分析;第五部分(13章),分析了Tele

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值