安卓在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收发等基本操作

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

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

VoiceCall流程

主要代码介绍

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

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

上文出自: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
这篇文章,从框架上讲解一下这三个模块的关系,并整理一下来电的流程,熟悉他们的调用关系。
只谈框架流程,不聊具体细节。

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

如上图所示,

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

Telephony 主要的类

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

android TeleComm Telephony Dialer之间的说明相关推荐

  1. android fragment传递数据,Android 两个Fragment之间传递数据实例详解

    Android 两个Fragment之间如何传递数据 FragmentA启动FragmentB,做一些选择操作后,返回FragmentA,需要把FragmentB里面选择的数据传回来.有什么办法? F ...

  2. android linux网络连接,Android和Linux服务器之间的TCP连接

    我正在编写一个代码,需要每秒从Android移动设备向台式计算机(linux服务器)发送数据.由于数据经常发送,通过Http命中无法实现(因为会消耗时间),所以Tcp通信似乎是更好的选择,因为andr ...

  3. (转载) Android两个子线程之间通信

    Android两个子线程之间通信 标签: classthreadandroid子线程通信 2015-03-20 17:03 3239人阅读 评论(0) 收藏 举报  分类: 个人杂谈 版权声明:本文为 ...

  4. android 数据业务,【Android架构Telephony篇】之数据业务(一)

    Android: 4.4.4 Desktop: Ubuntu 15.04 这里只做一些准备事情. 不得不说,Android里的Telephony模块还是挺复杂的,要想搞个八九分清楚需要花点功夫.今天把 ...

  5. Android更新圆点代码,Android实现两圆点之间来回移动加载进度

    本文实例为大家分享了Android实现两圆点之间来回移动加载进度的具体代码,供大家参考,具体内容如下 一.前言 最近喜欢上自定义控件,喜欢实现一些简约有趣的控件,也好巩固下以前学得知识和不断的学习新知 ...

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

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

  7. android脚步---不同界面之间切换

    对于一个app,可能需要多个界面,使用Button或者其他控件在不同界面之间切换,那么如何做到呢 首先必须明确,一般一个activity.java文件一般只对应一个界面即一个layout.xml文件, ...

  8. Android客户端与服务器之间的通信

    本文将介绍Android客户端与服务器端的通信的简单实现方法. 要两点需要注意的地方: 1.Android 端记得在AndroidManifest.xml里记得获取一下网络权限,否则无法进行网络通信, ...

  9. 《深入理解Android:Telephony原理剖析与最佳实践》一1.1 智能手机的系统结构

    1.1 智能手机的系统结构 Android手机的基本硬件结构是符合智能手机的基本硬件结构,我们要学习Android移动开发,首先需要了解智能手机的硬件系统基本结构. 随着通信领域的快速发展,移动终端发 ...

最新文章

  1. 570D Codeforces Round #316 (Div. 2) D(dfs序,时间戳,二分
  2. html静态页面到jsp文件css错误
  3. 浅谈移动Web开发:深入概念
  4. 知识点:图说 Mysql 权限管理
  5. 华为P7电信4G版刷机包 EMUI2.3 官方B125 第3版 精简 ROOT
  6. C# EF6 更新对象
  7. C++课设——药品管理系统
  8. Java 创建一个Customer类,类中的属性有姓名、年龄、性别,然后创建两个Customer对象,把这两个对象存储在ArrayList对象中,然后再从ArrayList对象中读取出来。
  9. 国潮风格设计,具象化插画作品|打开你的头脑风暴
  10. 弘辽科技:店铺前期可以不上宝贝吗?店铺如何上宝贝?
  11. .NET平台机器学习资源汇总,有你想要的么?
  12. 英伟达发布528.02 WHQL 新驱动,支持4070 Ti
  13. 汽车网络安全风口渐起,诚迈科技与Trustonic牵手“发力”
  14. 从零开始写游戏引擎(一) - 工程创建以及目录设置还有版本控制
  15. Gunicorn 部署flask-socketio项目,项目访问慢的问题
  16. C语言结构体作为形参
  17. excel最强教科书电子版_Excel最强教科书(完全版全彩印刷)
  18. you-get下载神器的安装和使用
  19. 181216 MacOs上如何将多页PDF文件合成打印在一张PDF表单上面
  20. Metal每日分享,虚假颜色混合滤镜效果

热门文章

  1. [Inheritance]Collection with Inheritance (eden)
  2. (含代码)基于51单片机的红外遥控(独立按键)舵机开关灯控制
  3. PyGmae:有限状态机实践(十三)
  4. 计算机网络--应用层(2)P2P应用
  5. java的segment_segment 寄存器的真实结构
  6. 古风男孩美名推荐分享
  7. 【菜鸟算题】兰顿蚂蚁
  8. 四年级用计算机算出本月合计,四年级数学下册简算练习题及答案
  9. google 代码托管使用
  10. php 讯飞语音评测_科大讯飞提供语音评测能力 再一次颠覆语音市场