InCallScreen.java

复制通话界面的显示和提供人机交互的接口。进入该界面第一个调用ONCreate。否则进入OnNewIntent,该配置文件是incall_screen.xml,当中incallPanel为通话联系人的信息和状态显示,配置文件为call_card.xml,包括两路通话的view定义;InCallTouchUi显示通过管理的控制UI。相应配置文件为incall_touch_ui.xml;

mhandle的handleMessage方法接收到framework的CallManager发出的不同Phone状态的变化。更新UI。消息类型例如以下:

SUPP_SERVICE_FAILED:弹出mSuppServiceFailureDialog

PHONE_STATE_CHANGED:调用requestUpdateScreen方法请求更新通话界面,发送
REQUEST_UPDATE_SCREEN消息

REQUEST_UPDATE_SCREEN:内部调用UpdateScreen

PHONE_DISCONNECT:通话连接失败时调用。在delayedCleanupAfterDisconnect中退出通话界面

handleOnscreenButtonClick响应通话控制的点击button,涉及通话能力控制的相关处理逻辑

PhoneUtils类中的静态方法。如接听电话、挂断电话、恢复、保持通话等通话控制的操作。

联系人信息:CallCard

通话联系人信息的显示和更新实在InCallScreen的updateScreen中完毕的,调用Callcard的updateState方法,displayMaincallStatus显示更新第一路通话的信息。displayOnHoldCallStatus显示hold通话保持的第二路通话信息。通过PhoneUtils.getCallerInfo获取CallerInfo对象。保存了通话联系人的基本信息。

IncallTouchUI 通话控制:

incomingCallWidget:接通/挂断/短信回复时须要使用;

manageConferenceButton:多方通话的界面跳转控制button,仅仅有在多方通话时才显示。

dialpadButton:也就是显示或隐藏拨号盘(DTMF);

audioButton:开启/关闭扬声器;

muteButton:开启/关闭麦克风静音。开启之后对方无法听到你的声音。

holdButton:开启/关闭呼叫保持。

addButton:添加多路通话。也就是在通话的过程中能够暂停当前通话,拨打还有一路通话并接通;

通话控制相关的控件在IncallTouchUI 的updateState中更新,实现OnTriggerListener接口,该接口为锁屏控制的接口,这里4.2做了个改动。在OnTrigger函数中。区分向上、向左和向右三个方向直接定义0,1,2,而不使用SlidingTab的类。在InCallScreen的OnResume和OnPause中注冊ACTION_HEADSET_PLUG接收耳机免提事件的广播,发送EVENT_HEADSET_PLUG_STATE_CHANGED消息,调用showAudioModePopup显示出菜单,进入InCallTouchUI的onMenuItemClick切换音频输出的策略。

DTMFTwelveKeyDialer

布局文件为dtmf_twelve_key_dialer_view.xml,由输入框dtmfDialerField和12按键dialpad.xml组成。

PhoneGlobals:

4.2中将4.0中的PhoneApp中的内容移到了PhoneGlobals中。

OnCreate中创建mWakeLock和mPartialWakeLock进行Phone应用的电源管理。

获取了mWakeLock后。设置中的休眠时间不起作用,屏幕一直高亮,直到锁释放或者手动按power键。获取了mPartialWakeLock后,此时能够关闭屏幕和键盘灯。但不是立马关闭。直到设置的休眠时间到了。关屏。

Sensor感应器获取手机当前的方位,推断手机是否靠近脸部。

mProximityWakeLock电源唤醒锁,获取之后,关闭屏幕。

MediaButtonBoardcastReceive接收耳机HOOK的广播事件。调用PhoneUtils的
handleHeadsetHook响应耳机的HOOK事件。

PhoneAppBoardcastReceive处理Phone应用中杂项的广播事件,像飞行模式、数
据连接、SIM卡状态等变化。

CallNotify:

onNewRingingConnect接收到来电后的处理,调用startIncommingCallQuery查询
联系人信息。通过PhoneUtils的startGetCallerInfo获取GSMConnection的
userData查询 到CallerInfo中。
onPhoneStatechanged通话状态变化的处理。

onDisconnect通话连接断开的处理。连接断开有三种类型callLogType:
INCOMMING_TYPE(来电)
OUTGOING_TYPE(呼叫)
MISSED_TYPE(未接来电)

android4.2 telephone应用层分析的更多相关文章

  1. android4.3 Bluetooth(le)分析之startLeScan分析

    BluetoothAdapter.java中有low enery(le)的一些方法,android提供了这些方法,但源码中并未找到这些方法的调用之处.本文档主要分析这类方法的执行流程,来了解下le到底 ...

  2. Linux I2C驱动分析(三)----i2c_dev驱动和应用层分析 【转】

    本文转载自:http://blog.chinaunix.net/uid-21558711-id-3959287.html 分类: LINUX 原文地址:Linux I2C驱动分析(三)----i2c_ ...

  3. Android4.4 Telephony流程分析——彩信(MMS)发送过程

    本文代码以MTK平台Android 4.4为分析对象,与Google原生AOSP有些许差异,请读者知悉. 彩信收发依靠WAP网络,在Android4.4中的实现基于Http协议的应用.下图为几个彩信传 ...

  4. Android4.0 Surface机制分析

    1. java层面的Surface     对于Surface我们的认识主要是android的类Surface, android的文档描述Surface是"Handle onto a raw ...

  5. Android4.4 GPS框架分析【转】

    本文转载自:http://blog.csdn.net/junzhang1122/article/details/46674569 GPS HAL层代码在目录trunk/Android/hardware ...

  6. Android4.4 耳机检测分析

    在ALSA架构中,ASOC是由3个部分组成:Platform.CODEC & Machine.而耳机检测一般是在Machine driver里实现,当然也可以在CODEC driver里实现. ...

  7. Android4.42-Settings源代码分析之蓝牙模块Bluetooth(上)

    继上一篇Android系统源代码剖析(一)---Settings 接着来介绍一下设置中某个模块的源代码.本文依然是基于Android4.42源代码进行分析,分析一下蓝牙模块的实现.建议大致看一下关于S ...

  8. Android Debuggerd 简要介绍和源码分析(转载)

    转载: http://dylangao.com/2014/05/16/android-debuggerd-%E7%AE%80%E8%A6%81%E4%BB%8B%E7%BB%8D%E5%92%8C%E ...

  9. DPI深度包检测

    最近在读网络协议方面的论文,接触到DPI技术.博主是个小白,这里写些查到的笔记. 原文出处因为比较多,杂乱.百度文库和许多地方都有,就不贴链接了. 1. DPI 全称为"Deep Packe ...

随机推荐

  1. HDU 3966 Aragorn's Story(模板题)【树链剖分】+【线段树】

    <题目链接> 题目大意: 给定一颗带点权的树,进行两种操作,一是给定树上一段路径,对其上每个点的点权增加或者减少一个数,二是对某个编号点的点权进行查询. 解题分析: 树链剖分的模板题,还不 ...

  2. Django分页(二)

    Django分页(二) 要求 .设定每页显示数据条数 # # .用户输入页码(第一页.第二页...) # # .设定显示多少页号 # # .获取当前数据总条数 # # .根据设定显示多少页号和数据总条 ...

  3. [译]the cost of javascript in 2018(1)

    前言 为了构建交互性网站,我们需要发送js给我们的用户,但很多情况下,我们使用了太多js. 在移动端,经常看到只加载了个点击链接或者滚动不了的情况. 实话说,js仍然是移动端最昂贵的资源,因为其在很大 ...

  4. 持续集成时 travis 和 codecov 等 yaml 文件的配置

    最近在项目中在配置CodeCov 以及Travis 和 AppVeyor做持续集成时,遇到了一些问题,也解决了一些问题.顺便拿来分享一下. 首先时Travis,这个主要是来跑基于 Linux 环境下的 ...

  5. Kosaraju与Tarjan(图的强连通分量)

    Kosaraju 这个算法是用来求解图的强连通分量的,这个是图论的一些知识,前段时间没有学,这几天在补坑... 强连通分量: 有向图中,尽可能多的若干顶点组成的子图中,这些顶点都是相互可到达的,则这些 ...

  6. python实现链表(一)

    单链表结构简单,组成为节点 节点实现方法我们采用类进行封装 def __init__(self,item): self.item=item self.next=None 在这里我们实现对链表的操作时可 ...

  7. 牛客练习赛37-筱玛的字符串-DP递推

    筱玛的字符串 思路 :dp [ i ] [ j ] [ 3 ] 分别代表到第 i 位时 左括号比右括号多 j ,后面有三个状态 分别表示当前位置 S3的字符 是正在反转的,还是 反转完成的,还是没有反 ...

  8. XamarinSQLite教程在Xamarin.iOS项目中定位数据库文件

    XamarinSQLite教程在Xamarin.iOS项目中定位数据库文件 开发者可以在指定的路径中找到复制的数据库文件,具体的操作步骤如下: (1)单击Mac电脑中Finder菜单中的“前往”|“前 ...

  9. Linux服务部署--Java(二)

    八.Maven安装配置 1. 下载 wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3. ...

  10. MVC微型框架---------学习

    1.单一入口机制 是指在web程序中 所有的请求都指向一个脚本文件 2.工厂模式的概念精髓:工厂类就是对类的封装,类是对方法的封装,方法是对实现过程的封装调用当前类的静态方法,规范的写法是使用 sel ...