android4.2 telephone应用层分析
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应用层分析的更多相关文章
- android4.3 Bluetooth(le)分析之startLeScan分析
BluetoothAdapter.java中有low enery(le)的一些方法,android提供了这些方法,但源码中并未找到这些方法的调用之处.本文档主要分析这类方法的执行流程,来了解下le到底 ...
- Linux I2C驱动分析(三)----i2c_dev驱动和应用层分析 【转】
本文转载自:http://blog.chinaunix.net/uid-21558711-id-3959287.html 分类: LINUX 原文地址:Linux I2C驱动分析(三)----i2c_ ...
- Android4.4 Telephony流程分析——彩信(MMS)发送过程
本文代码以MTK平台Android 4.4为分析对象,与Google原生AOSP有些许差异,请读者知悉. 彩信收发依靠WAP网络,在Android4.4中的实现基于Http协议的应用.下图为几个彩信传 ...
- Android4.0 Surface机制分析
1. java层面的Surface 对于Surface我们的认识主要是android的类Surface, android的文档描述Surface是"Handle onto a raw ...
- Android4.4 GPS框架分析【转】
本文转载自:http://blog.csdn.net/junzhang1122/article/details/46674569 GPS HAL层代码在目录trunk/Android/hardware ...
- Android4.4 耳机检测分析
在ALSA架构中,ASOC是由3个部分组成:Platform.CODEC & Machine.而耳机检测一般是在Machine driver里实现,当然也可以在CODEC driver里实现. ...
- Android4.42-Settings源代码分析之蓝牙模块Bluetooth(上)
继上一篇Android系统源代码剖析(一)---Settings 接着来介绍一下设置中某个模块的源代码.本文依然是基于Android4.42源代码进行分析,分析一下蓝牙模块的实现.建议大致看一下关于S ...
- 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 ...
- DPI深度包检测
最近在读网络协议方面的论文,接触到DPI技术.博主是个小白,这里写些查到的笔记. 原文出处因为比较多,杂乱.百度文库和许多地方都有,就不贴链接了. 1. DPI 全称为"Deep Packe ...
随机推荐
- web服务-1、http协议的三次握手四次挥手
知识点:http协议:它是基于tcp协议的,浏览器访问服务器,服务器把资源回给浏览器,这个过程都是遵循http协议的,否则无法完成,http早些年是1.0版本,现在基本上都是1.1版本了,俩个版本的区 ...
- 数据库相关--mysql8.0设置root登录密码
系统:win7 64位 MySQL 8.0 .11 1.启动服务: $ net start mysql 进入MySQL(mysql -hlocalhost -uroot): 2.选择mysql ...
- 持续集成时 travis 和 codecov 等 yaml 文件的配置
最近在项目中在配置CodeCov 以及Travis 和 AppVeyor做持续集成时,遇到了一些问题,也解决了一些问题.顺便拿来分享一下. 首先时Travis,这个主要是来跑基于 Linux 环境下的 ...
- jmeter使用Beanshell预处理器从指定列表中获取随机值
变量mynation从列表{"china", "US", "UK"}中随机取值 String[] nation = new String[] ...
- [C程序设计基础]快速排序
//从大到小排序 ///三个参数 a要排序的 数组, l扫左边的 r扫右边 void quickSort(int a[],int l, int r){ /// 左边要小于 右边才有意义 if (l & ...
- Django——ModuleNotFoundError: No module named 'asgiref.sync'
Django+channels运行时报错 Unhandled exception in thread started by <function check_errors.<locals&g ...
- c++检查内存泄漏
使用_CrtDumpMemoryLeaks()函数检查内存泄漏 #include <cstdio> #include <cstdlib> #include <crtdbg ...
- 网络测试工具 - QCheck
本片博客内容借鉴51CTO中joyssue博主文章. 网络性能不仅与交换和路由设备的性能相关,而且与线路质量也有很大关系.使用Qcheck可以测试网络性能.这是NetIQ公司开发的一款免费网络测试软件 ...
- LINUX文件及目录管理命令基础
Linux命令行组成结构 Linux命令结构 在Linux中一切皆文件,一切皆命令! 命令提示符: [root@tt ~]# [xiaohui@tt ~]$ Linux命令行常用快捷键 ctrl + ...
- BZOJ2689 : 堡垒
问题等价于每个三角形里至少选择两个点. 考虑拓扑,每次取出度数为$2$的点$x$,代表一个只与最多一个三角形相邻的三角形$(x,y,z)$. 如果$x$已选,那么$(x,y)$以及$(x,z)$都已经 ...