- 浏览: 33480 次
- 性别:
- 来自: 北京
最新评论
原文地址:http://blog.csdn.net/maxleng/article/details/5593780
Android电话系统之GSMCallTracker
通话连接管理
GSMCallTracker在本质上是一个Handler。
GSMCallTracker是Android的通话管理层。GSMCallTracker建立了ConnectionList来管理现行的通话连接,并向上层提供电话调用接口。
在 GSMCallTracker中维护着通话列表:connections。顺序记录了正连接上的通话,这些通话包 括:ACTIVE,DIALING,ALERTING,HOLDING,INCOMING,WAITING等状态的连接。GSMCallTracker将 这些连接分为了三类别进行管理:
RingingCall: INCOMING ,WAITING
ForegourndCall: ACTIVE, DIALING ,ALERTING
BackgroundCall: HOLDING
上层函数通过getRingCall(),getForegrouandCall()等来获得电话系统中特定通话连接。
为了管理电话状态,GSMCallTracker在构造时就将自己登记到了电话状态变化通知表中。RIL-Java一收到电话状态变化的通知,就会使用EVENT_CALL_STATE_CHANGE通知到GSMCallTacker
在一般的实现中,我们的通话Call Table是通过AT+CLCC查询到的,CPI可以通知到电话的改变,但是CPI在各个Modem的实现中差别比较大,所以参考设计都没有用到CPI这 样的电话连接改变通知,而是使用最为传统的CLCC查询CALL TABLE。 在GSMTracker中使用connections来管理Android电话系统中的通话连接。每次电话状态发生变化是GSMTracker就会使用CLCC查询来更新connections内容,如果内容有发生变化,则向上层发起电话状态改变的通知。
1 RIL-JAVA中发起电话连接列表操作
在RIL-JAVA中涉及到CurrentCallList查询的有以下几个操作:
(1)hangup
(2)dial
(3)acceptCall
(4)rejectCall
在GSMcallTracker在发起这些调用的时候都有一个共同的ResultMessage构造函数:obtainCompleteMessage()。obtainCompleteMessage()实际上是调用:
obtainCompleteMessage(EVENT_OPERATION_COMPLETE)
这 就意味着在这些电话操作后,GSMCallTracker会收到EVENT_OPERATION_COMPLETE消息,于是我们将目光转移到 handleMessage()@GSMCallTracker的EVENT_OPERATION_COMPLETE事件处 理:operationComplete@GSMCallTracker。
operationComplete() 操作会使用cm.getCurrentCalls(lastRelevantPoll)调用,向RILD发起 RIL_REQUEST_GET_CURRENT_CALLS调用,这个最终就是向Modem发起AT+CLCC,获取到真正的电话列表。
2 在RILD中,引起getCurrentCalls调用
(1)在RILD中,收到URC消息:
+CRING
RING
NO CARRIER
+CCWA
将会使用 RIL_onUnsolicitedResponse( RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED),主动向ril-java上报RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED消息。
(2) 在处理requestCurrentCalls时,使用CLCC查询通话连接(CALL TABLE)后,如何发现有call Table不为空则开启一个定时器,主动上报RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED消息,直到没有电话连接为止。
在 RIL-Java层收到RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED这个URC,并利用 mCallStateRegistrants.notifyRegistrants(new AsyncResult(null, null, null))来通知电话状态的变化,此时GSMTracker会接收到EVENT_CALL_STATE_CHANGE消息,并使用
pollCallsWhenSafe()-> cm.getCurrentCalls(lastRelevantPoll);
来发起查询,并更新JAVA层的电话列表。
3 handlePollCalls电话列表刷新
首先我们来看看是什么引起了handlePollCalls的调用。
上面的1,2分析了,Android电话系统中所有引起电话连接列表更新的条件及其处理。他们共同的调用了cm.getCurrentCalls(lastRelevantPoll) 来完成电话列表的获取。
lastRelevantPoll = obtainMessage(EVENT_POLL_CALLS_RESULT)
我们这里就从可以看到获取到的电话列表Result使用handlePollCalls进行了处理。 Result实际上是一个DriverCall列表,handlePollCalls的工作就是将当前电话列表与RIL-Java的电话列表对比,使用DriverCall列表更新CallTracker的电话列表connections,并向上传递电话状态改变的通知。
发表评论
-
Android核心分析(21)----Android应用框架之AndroidApplication
2012-02-13 14:34 781原文地址:http://blog.csdn ... -
Android核心分析(20)----Android应用程序框架之无边界设计意图
2012-02-13 14:31 901原文地址:http://blog.csdn ... -
Android核心分析(18)-----Android电话系统之RIL-Java
2012-02-13 14:10 1146原文地址:http://blog.csdn.net/maxle ... -
Android核心分析(17) ------电话系统之rilD
2012-02-13 14:02 684原文地址:http://blog.csdn.net/maxle ... -
Android核心分析(16)-----Android电话系统-概述篇
2012-01-31 14:39 910原文地址:http://blog.csdn.net/m ... -
Android核心分析(15)--------Android输入系统之输入路径详解
2012-01-31 14:22 840原文地址:http://blog.csdn.net/maxle ... -
Android核心分析(14)------ Android GWES之输入系统
2012-01-31 10:47 955原文地址:http://blog.csdn ... -
Android 核心分析(13) -----Android GWES之Android窗口管理
2012-01-31 10:44 823原文地址:http://blog.csdn ... -
Android 核心分析(12) -----Android GEWS窗口管理之基本架构原理
2012-01-31 10:27 1036原文地址:http://blog.csdn.net/maxle ... -
Android SurfaceFlinger中的SharedClient -- 客户端(Surface)和服务端(Layer)之间的显示缓冲区管理
2012-01-11 11:00 1356原文地址:http://blog.csdn.net/Droid ... -
Android核心分析 之十一-------Android GWES之消息系统
2012-01-10 14:09 676原文地址:http://blog.csdn.net/maxle ... -
Android核心分析 之十-------Android GWES之基本原理篇
2011-12-30 15:08 738原文地址:http://blog.csdn ... -
Android核心分析 之九-------Zygote Service
2011-12-30 15:02 760原文地址:http://blog.csdn.net/maxle ... -
Android 核心分析 之八------Android 启动过程详解
2011-12-30 14:56 638原文地址:http://blog.csdn.net/maxle ... -
Android 核心分析 之七------Service深入分析
2011-12-30 14:48 1135原文地址:http://blog.csdn.net/maxle ... -
Android 核心分析 之六 -----IPC框架分析 Binder,Service,Service manager
2011-12-30 14:41 940原文地址:http://blog.csdn.net/maxle ... -
Android 核心分析 之五 -----基本空间划分
2011-12-29 11:13 658原文地址:http://blog.csdn.net/maxle ... -
Android核心分析之四 ---手机的软件形态
2011-12-29 11:09 659原文地址:http://blog.csdn.net/maxle ... -
Android是什么 之三-------手机之硬件形态
2011-12-29 11:07 643原文地址:http://blog.csdn.net/maxle ... -
Android核心分析 之二 -------方法论探讨之概念空间篇
2011-12-29 11:03 595原文地址:http://blog.csdn.net/maxle ...
相关推荐
核心分析之十八 ----- Android 电话系统之RIL-JAVA 核心分析之十九 ----- 电话系统之GSMCall Tracker 核心分析之二十 ----- Android 应用程序框架之无边界设计意图 核心分析之二十一 ----- Android 应用框架之...
在Android电话系统中,GSMCallTracker扮演着至关重要的角色,它是电话管理层的核心组件,主要负责管理和跟踪GSM网络下的通话连接。GSMCallTracker基于Handler机制,它维护了一个名为connections的列表,用来记录和...
Android 核心分析(19)----电话系统之 GSMCallTacker.............................................84 Android 核心分析(20)----Android 应用程序框架之无边界设计意图....................... 87 Android 核心分析...
Android核心分析(18)-----Android电话系统之RIL-Java
1. 下载NDK r19c:从官方渠道获取"android-ndk-r19c-windows-x86_64.zip"压缩包,并将其解压到你选择的目录。这个文件包含了NDK的所有组件,如编译器、链接器和其他必要的工具。 2. 配置NDK路径:将NDK的安装目录...
Android核心分析(19)----电话系统之GSMCallTacker.............................................84 Android核心分析(20)----Android应用程序框架之无边界设计意图.......................87 Android核心分析(21...
Android核心分析是关于Android系统的深入研究和分析,涵盖了Android系统的架构设计、核心机制、软件和硬件形态、IPC框架、Service管理、启动过程、窗口管理、输入系统、电话系统、应用程序框架、GDI机制等方面的知识...
Android SDK (SDK Platforms)-android-19.zip 是一个包含了Android开发平台版本19的压缩包,主要用于Android开发者在构建、测试和调试针对Android 4.4 KitKat系统应用时使用。这个压缩包提供了必要的API库、工具和...
[转]Android核心分析 技术专题之十九--电话系统之GSMCallTacker
android-support-v4-v7-v13-v14-v17(官方最新完整版),官方最新版的,压缩包内包含android-support-v4、android-support-v7-appcompat,android-support-v7-cardview,android-support-v7-gridlayout,android-support-...
内容包含:android-support-v4_1.6.0_26_20120316.jar android-support-v4_1.6.0_26_20120623.jar android-support-v4_1.6.0_26_20120730.jar android-support-v4_1.6.0_26_20121109.jar android-support-v4_1.6.0_26...
[转]Android核心分析 技术专题只二十八--Android GDI之Surface&Canvas;.
根据提供的文件信息,我们可以了解到这份资料包含了两个Android系统的ISO镜像文件:“android-x86_64-7.1-r2.iso”与“android-x86_64-8.1-rc2.iso”。这两个文件均是针对x86_64架构的计算机设计的Android系统版本。...
最新android studio 2015/10/12日更新 2015/10/12 android-studio-bundle-141.2288178-windows
通过深入分析"android-sdk-sources-android-19.rar",开发者不仅可以提升自身的技术水平,还能为应用带来更好的用户体验。此外,源码学习也对Android系统定制和设备适配有着重要的指导意义。无论是初学者还是经验...
2. **Android Studio中安装插件**:启动Android Studio,转到"Preferences"(Mac系统)或"Settings"(Windows/Linux系统)。在左侧菜单中选择"Plugins",然后点击"Browse Repositories"。由于直接访问可能受限,因此...
android可用的commons-codec-1.9
Android-ffmpeg-android-java.zip,使用HTTPS://GithuB.COM/Wrngs/FFMPEG-Android编译的FFMPEG二进制的Android Java库,安卓系统是谷歌在2008年设计和制造的。操作系统主要写在爪哇,C和C 的核心组件。它是在linux内核...
标题中的"android-sdk-4.2.2 android-sdk-4.2.2-platforms"指的是Android SDK的一个特定版本,即Android 4.2.2(API级别17),该版本的SDK平台组件。这个版本是Android操作系统的 Jelly Bean 版本的一部分,发布于...
在Android开发中,`android-support-v4`和`android-support-v7`库是Google为了兼容早期版本Android系统而推出的两个重要支持库。这两个库对于开发者来说具有重要意义,因为它们允许应用在旧版本的Android设备上运行...