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 ...
随机推荐
- ZOJ 3795 Grouping (强连通缩点+DP最长路)
<题目链接> 题目大意: n个人,m条关系,每条关系a >= b,说明a,b之间是可比较的,如果还有b >= c,则说明b,c之间,a,c之间都是可以比较的.问至少需要多少个集 ...
- 牛客练习赛A 【BFS】
<题目链接> 题目大意: 给出一张图,问你其中 ' # ' 加上那些不能够到达边界的 ' . ' 的点的个数,' # ' 会起阻挡作用. 解题分析: 本题很好做,无非就是将所有能够由边界上 ...
- HDU 1710 (二叉树的前序和中序,求后序)
题目链接 题目大意: 输入二叉树的前序.中序遍历,请输出它的后序遍历 #include <stdio.h> #include <string.h> ; // 长度为n s1 前 ...
- Elasticsearch 基于 URL 的搜索请求
背景 Elasticsearch 不像关系型数据库,没有简易的 SQL 用来查询数据,只能通过调用 RESTful API 实现查询.大体上查询分为两种,基于 URL 的和基于请求主体的.基于 URL ...
- mybatis之级联关系(一对一、一对多)
0. 表结构 1. 准备工作 1.1 配置文件等信息,请参考 myBatis之入门示例 1.2 entity 1.2.1 TPersonInfo.java package com.blueStarW ...
- SpringMVC(二五) JSTL View
项目中使用JSTL,SpringMVC会把视图由InternalView转换为JstlView. 若使用Jstl的fmt标签,需要在SpringMVC的配置文件中配置国际化资源文件. 实现过程: 1. ...
- Java 作业 二
编写一个Java应用程序,统计数组{1,3,4,7,2,1,1,5,2,5,7,2,1,1,3},统计显示每种数字其出现的次数以及出现最多和最少次数的数字. package hi; public cl ...
- 如何避免Android程序的ANR?
In Android, the system guards against applications that are insufficiently responsive for a period o ...
- 工程管理之makefile与自动创建makefile文件过程
(风雪之隅 http://www.laruence.com/2009/11/18/1154.html) Linux Makefile自动编译和链接使用的环境 想知道到Linux Makefile系统的 ...
- [Vijos1763]Wormhole (贪心/模拟?)
已经是NOIP考前的最后一天了 现在在杭州的宾馆里 因为自己没带电脑 因此用ADMAN的电脑 题目描述 一维的世界就是一个数轴.这个世界的狭小我们几乎无法想象. 在这个数轴上,有N个点.从左到右依次标 ...