今天看了看framework里面的telephony相关的代码。。。做个小笔记吧.

路径位于

frameworks/base/telephony/

首先是Ril相关的。上层的所有对电话的操作和状态 获取等都是通过Ril来实现的,Ril通过发送命令与底层rild进行交互。

CommandsInterface是一个接口,他 定义了操作相关的命令、方法和监听等。。。

BaseCommands则直接继承了CommandsInterface接口。。

Ril继承自BaseCommands,并且负责通过socket与rild通信。。。它将对电话的操作(如:hangupConnection())转换成为了对应的

RIL_REQUEST_XXX发送到rild

RILReceiver则实现了Runnable接口。即启动一个循环一直监听socket,看底层是否发送相关的信息。收到respone进行相关处理后执行processResponse()方法

该方法内通过判断type分别执行processUnsolicited (p)和processSolicited (p)方法,这也就能获取电话状态等消息。

这里将会根据不同的response而通知相应的已经注册了监听的对象(通过RegistrantList的notifyRegistrants通知,之前已经通过phonebase的RegisterFor***changed方法注册).

注册的时候将会把Handle和Messae.what等注册进一个RegistrantList实例(加入一个arrayList),Ril收到response之后也是通过RegistrantList来将相应的信息返回给已经注册

的实例对象。

CallTracker就注册了相应的监听。所以当有对应的Response的时候,就会返回给CallTracker,然后CallTracker进行相应的处理,比如updatePhoneStae等。。。

在updatePhoneStae方法里又会调用对应的phone.notifyPhoneStateChanged(根据电话类型分为GSMPhone和CDMAPhone).在此方法内Phone对象又会调用PhoneNotifier.notifyPhoneState

方法。

PhoneNotifier是一个接口定义了电话状态改变,信号改变的通知等方法。具体的实现是在DefaultPhoneNotifier里面.这里就会将具体的电话事件转换为函数调用,通知TelephonyRegistry

TelephonyRegistry就会将电话事件给通知出去,这里分两种类型通知。1是通过广播发送,2是通过之前注册的Listener回调回去。

至此,电话事件就对第三方应用可见了。第三方应用就可以通过接受广播或者TelephonyManager.listen()方法监听到电话时间而进行相应的处理。

转载于:https://www.cnblogs.com/chenxian/archive/2011/03/03/1970063.html

Telephony理解相关推荐

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

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

  2. 【深入理解 android telephony 系列第一集 初识telephony】

    深入理解 android telephony 深入理解 android telephony 系列第一集 初识telephony 1. 概述 2. Android Telephony 框架 3. And ...

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

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

  4. [深入理解Android卷一全文-第九章]深入理解Vold和Rild

    为什么80%的码农都做不了架构师?>>>    由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的 ...

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

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

  6. 网络工程师英语系列2(CISCO IP Telephony)

    CISCO IP Telephony The H.263 codec is more demanding of PC system resources, but it requires less ba ...

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

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

  8. Telephony之TelephonyRegistry(原)

    一.TelephonyRegistry概述 TelephonyRegistry的作用是检测当前Radio的状态,包括通话.短信.数据连接等状态,当这些状态发生改变时,通知所有向他注册过的客户端.也就是 ...

  9. Android Telephony框架结构简析

    Android Telephony涉及的框架结构如图1所示. 图1  Android Telephony框架结构 通过图1可以发现Android Telephony框架结构的一些规律,具体如下. An ...

最新文章

  1. ubuntu16.04版本 the system is running in low-graphics mode
  2. shell常见的文件属性检查
  3. 二开微信表情包小程序去授权版+网站后端
  4. ib课程计算机科学教材,热门课程:IB计算机科学的评估方式
  5. 今天来谈一谈环境对我们的习惯有什么影响
  6. Nginx双机热备实现方案(双主热备模式)
  7. ELK+filebeat+redis 日志分析平台
  8. Teleport Ultra网站静态资源下载工具
  9. 基于UDP广播的局域网匿名聊天APP
  10. linux共用home分区,安装UOS和Deepin双系统并且共用/home分区的测试报告
  11. 获取支付宝小程序链接
  12. 一种插槽式的组件化框架中间件——SCC
  13. js中对象属性、面向对象、面向过程、类、继承、以及原型原型链
  14. arduino传感器大全
  15. 【CSGO】Akuma正式解散 !各奔东西 被NAVI撞碎了?
  16. 数字用计算机写大写,微信小程序学习用:大写计算器;数字转换为大写
  17. 【企业数字化转型】数字化转型的本质(学习笔记)
  18. 80老翁谈人生(151):老翁老眼昏花,读错了一个数量级
  19. Aurora8B10B IP使用 -04- IP例程应用实例
  20. SQL生僻字模糊查询

热门文章

  1. [案例6-5]模拟百度翻译
  2. release 与您的 deploy integrations 或 source map uploads 同步
  3. 笔记:C51单片机——音乐播放,模拟钢琴键。
  4. 一文读懂Cookie、Session、Token和JWT(建议收藏)
  5. 数据分析,一个班级的平均成绩
  6. python三维图俯视图,python opencv 前视图转化为鸟瞰图
  7. 工程师职称的专业分类
  8. Tkinter键盘敲击监听小工具
  9. 教你快速推广微信公总号
  10. 微信amr格式语音转MP3