推荐序
前言
第一部分 基础篇
第1章 初识Android / 2
1.1 智能手机的系统结构 / 2
1.2 Android系统架构 / 3
1.2.1 应用层 / 3
1.2.2 应用框架层 / 4
1.2.3 系统运行库层 / 5
1.2.4 核心层 / 6
1.3 Android Telephony框架结构 / 6
1.3.1 系统运行库层的HAL层 / 7
1.3.2 简析HAL结构 / 8
1.3.3 Android为什么引入HAL / 9
1.3.4 Android中HAL的运行结构 / 9
1.4 本章小结 / 10
第2章 搭建Android源代码编译环境 / 11
2.1 Ubuntu Linux操作系统及工具安装 / 11
2.1.1 PC配置建议 / 12
2.1.2 Ubuntu安装光盘的制作 / 12
2.1.3 Ubuntu安装过程 / 12
2.1.4 Ubuntu系统工具包更新升级 / 14
2.1.5 Java运行环境JDK安装及配置 / 15
2.1.6 Android SDK的下载和配置 / 16
2.1.7 使用Android SDK启动虚拟设备 / 17
2.2 Android源代码下载及编译过程 / 19
2.2.1 工作目录设置 / 19
2.2.2 源代码下载 / 19
2.2.3 整体编译Android 源代码 / 19
2.2.4 单个模块按需编译 / 20
2.2.5 编译生成本地Android SDK / 21
2.3 Android常用工具使用及相关技巧说明 / 21
2.3.1 使用本地编译成功的镜像文件启动Android模拟器 / 22
2.3.2 Android调试工具adb的使用方法 / 23
2.3.3 进入Android虚拟设备控制台模拟短信、来电等功能 / 23
2.4 Eclipse配置及使用 / 24
2.4.1 Android开发套件ADT下载及配置 / 24
2.4.2 建立Android源代码Java工程 / 25
2.4.3 格式化Android Java源代码 / 26
2.5 使用Source Insight方便阅读C/C++代码 / 26
2.5.1 安装Wine / 26
2.5.2 安装Source Insight / 26
2.5.3 配置Source Insight C/C++工程 / 27
2.6 本章小结 / 27
第3章 主要技术准备 / 29
3.1 何为同步和异步 / 29
3.2 Handler消息处理机制 / 30
3.2.1 Handler概念分析 / 30
3.2.2 Handler特性 / 30
3.2.3 常用Handler消息处理机制讲解 / 31
3.2.4 Handler的作用 / 34
3.3 AIDL跨应用服务 / 35
3.3.1 AIDL概念分析 / 35
3.3.2 AIDL服务提供方 / 36
3.3.3 AIDL服务调用方 / 37
3.4 广播 / 38
3.4.1 Android 系统中的广播 / 38
3.4.2 Broadcast接收 / 38
3.4.3 Broadcast发送 / 39
3.5 本章小结 / 39
第二部分 Telephony通话功能
第4章 深入解析通话流程 / 42
4.1 通话相关主要源代码汇总及简要说明 / 42
4.2 电话主动呼叫流程分析 / 44
4.2.1 运行Android虚拟设备 / 44
4.2.2 拨号界面DialtactsActivity的onCreate方法 / 45
4.2.3 DialpadFragment拨号盘Tab表单 / 45
4.2.4 寻找拨号统一入口OutgoingCallBroadcaster / 47
4.2.5 CallController拨号placeCall方法 / 47
4.2.6 Phone帮助类PhoneUtils静态placeCall方法 / 48
4.2.7 通话大管家CallManager / 50
4.2.8 Phone对象的dial拨号方法 / 50
4.2.9 Call状态跟踪者GsmCallTracker / 51
4.2.10 RIL消息的出入口RIL.java / 52
4.2.11 启动通话主界面InCallScreen / 53
4.2.12 拨号流程总结 / 53
4.3 电话被动接收来电流程分析 / 55
4.3.1 Android虚拟设备模拟接收来电 / 56
4.3.2 RegistrantList消息处理机制 / 57
4.3.3 GsmCallTracker响应RIL的Call状态变化通知 / 60
4.3.4 RIL.java的getCurrentCalls方法 / 60
4.3.5 GsmCallTracker响应消息通知 / 61
4.3.6 handlePollCalls发出来电通知 / 61
4.3.7 GSMPhone的通知方法notifyNewRingingConnection / 62
4.3.8 CallManager响应来电消息通知 / 62
4.3.9 CallNotifier响应来电通知 / 63
4.3.10 InCallScreen展现来电界面 / 64
4.3.11 来电流程总结 / 65
4.4 通话关键流程 / 66
4.4.1 建立Android通话模型 / 67
4.4.2 AT命令发送流程 / 68
4.4.3 通话状态变化流程 / 69
4.4.4 本地主动挂断通话流程 / 70
4.4.5 远端断开通话连接流程 / 72
4.5 本章小结 / 73
第5章 深入解析Telephony通话应用机制 / 74
5.1 Phone应用的关键代码解析 / 74
5.2 认识通话主界面InCallScreen / 75
5.2.1 InCallScreen中的主要方法 / 76
5.2.2 单例模式的Activity通话界面 / 76
5.2.3 Layout布局说明 / 77
5.3 通话主界面InCallScreen / 78
5.3.1 onCreate—运行Activity / 78
5.3.2 onNewIntent—单例InCallScreen加载入口 / 80
5.3.3 internalResolveIntent—进入InCallScreen处理Intent的唯一方法 / 81
5.3.4 onResume—显示InCallScreen通话界面 / 82
5.3.5 handleMessage—Handler消息响应方法 / 84
5.3.6 onSuppServiceFailed—显示通话服务失败提示信息 / 85
5.3.7 updateScreen—更新通话界面 / 86
5.3.8 onDisconnect—断开通话连接 / 88
5.3.9 handleOnscreenButtonClick—响应通话控制按钮点击事件 / 90
5.3.10 InCallScreen通话界面运行机制总结 / 91
5.4 通话信息展示CallCard / 92
5.4.1 两路通话布局View控件 / 92
5.4.2 updateState—更新CallCard / 93
5.4.3 displayMainCallStatus—显示/更新第一路通话信息 / 95
5.4.4 displayOnHoldCallStatus—显示/更新第二路通话信息 / 97
5.4.5 修改通话信息展示的思路及原则 / 98
5.5 通话控制InCallTouchUi / 99
5.5.1 View布局控件 / 99
5.5.2 updateState—更新InCallTouchUi / 101
5.5.3 MultiWaveView—来电控制接听、拒接界面 / 102
5.5.4 HeadSet—响应免提事件 / 103
5.5.5 修改来电界面的思路及原则 / 104
5.6 通话功能中必不可少的DTMF / 105
5.6.1 什么是DTMF / 105
5.6.2 DTMFTwelveKeyDialer的布局 / 105
5.6.3 如何显示DTMF界面 / 106
5.6.4 Tone音发送流程 / 106
5.7 Phone应用的加载入口PhoneApp类 / 108
5.7.1 PhoneApp类属性及方法 / 108
5.7.2 onCreate—PhoneApp应用加载入口 / 109
5.7.3 PowerManager—PhoneApp电源管理 / 110
5.7.4 Sensor—PhoneApp感应器的应用 / 112
5.7.5 MediaButtonBroadcastReceiver—接收耳机HOOK键广播事件 / 115
5.7.6 PhoneAppBroadcastReceiver—接收Phone应用杂项广播事件 / 116
5.8 Handler消息处理的幕后工作者CallNotifier / 118
5.8.1 CallNotifier的本质 / 118
5.8.2 Handler消息注册和响应机制 / 119
5.8.3 onNewRingingConnection—接收到新来电的幕后处理 / 119
5.8.4 onPhoneStateChanged—通话状态变化的幕后处理 / 121
5.8.5 onDisconnect—通话连接断开的幕后处理 / 122
5.9 本章小结 / 124
第6章 手机通话功能框架层实现机制 / 125
6.1 Telephony Frameworks层解析 / 125
6.1.1 通话功能相关代码文件 / 125
6.1.2 通话功能关键类 / 126
6.1.3 Telephony通信能力模型 / 127
6.2 GSMPhone对象详解 / 128
6.2.1 GSMPhone类层次继承关系 / 128
6.2.2 GSMPhone类代码结构解析 / 129
6.2.3 PhoneFactory工厂方法实现类 / 130
6.2.4 PhoneProxy代理模式实现类 / 131
6.2.5 GSMPhone类的组合逻辑关系 / 132
6.2.6 GSMPhone类的Handler消息处理机制 / 133
6.2.7 GSMPhone类通话管理实现机制 / 136
6.3 CallTracker运行机制 / 137
6.3.1 GsmCallTracker类代码结构解析 / 137
6.3.2 GsmCallTracker的Handler消息处理机制 / 139
6.3.3 GsmCallTracker与RIL对象的交互机制 / 142
6.4 以GsmCall为核心的通话管理模型 / 145
6.4.1 GsmCall类代码结构解析 / 146
6.4.2 GsmConnection类代码结构解析 / 147
6.4.3 DriverCall与GsmCall、GsmConnection的关系 / 149
6.5 GsmCallTracker类的 handlePollCalls方法处理逻辑 / 153
6.5.1 初始化操作 / 153
6.5.2 更新通话相关信息 / 154
6.5.3 根据最新的通话状态发出通知 / 158
6.5.4 更新手机状态 / 158
6.6 GsmCallTracker通话连接断开的处理机制 / 160
6.6.1 本地主动挂断通话的处理机制 / 160
6.6.2 远端断开通话连接的处理机制 / 162
6.7 Android虚拟设备上验证GSM制式手机的通话模型 / 164
6.7.1 增加日志输出 / 164
6.7.2 运行Android虚拟设备并分析日志 / 166
6.8 通话大管家CallManager / 168
6.8.1 CallManager的本质 / 168
6.8.2 Handler消息注册及运行机制 / 169
6.8.3 如何获取通话基本信息 / 170
6.9 通话计时实例分析 / 171
6.9.1 记录通话的开始时间 / 171
6.9.2 记录通话的结束时间 / 171
6.9.3 Phone应用计算通话时长 / 171
6.10 Handler消息处理机制 / 173
6.10.1 Handler消息的注册过程 / 173
6.10.2 Handler消息的接收和响应过程 / 174
6.11 实战—来电防火墙 / 175
6.11.1 应用原理分析 / 175
6.11.2 在onNewRingingConnection方法加入拦截请求 / 176
6.12 本章小结 / 176
第三部分 Telephony通信功能
第7章 网络服务状态运行机制 / 180
7.1 什么是ServiceState / 180
7.2 初识ServiceState实体类 / 180
7.2.1 ServiceState类的实质 / 181
7.2.2 ServiceState类关键常量及属性 / 181
7.2.3 ServiceState类关键方法 / 182
7.3 ServiceStateTracker运行机制详解 / 183
7.3.1 ServiceStateTracker抽象类为核心的类图 / 184
7.3.2 ServiceStateTracker代码结构 / 184
7.3.3 ServiceStateTracker的Handler消息处理机制 / 186
7.3.4 ServiceStateTracker与RIL对象的交互机制 / 189
7.4 handlePollStateResult方法处理逻辑 / 192
7.4.1 RIL返回查询结果的异常判断和处理 / 192
7.4.2 处理4个不同网络服务查询返回的结果 / 192
7.4.3 用pollStateDone方法完成收尾工作 / 195
7.5 ServiceState最佳实践 / 197
7.5.1 获取运营商信息 / 197
7.5.2 通知栏手机信号实时变化 / 198
7.6 实战—飞行模式的实现 / 200
7.6.1 飞行模式的设置入口 / 200
7.6.2 Radio无线通信模块的开启或关闭 / 202
7.7 本章小结 / 203
第8章 Android手机上网实现机制 / 204
8.1 Android网络整体结构 / 204
8.2 什么是DataConnection / 205
8.2.1 DataConnection类定义及子类 / 205
8.2.2 DataConnection类关键属性 / 206
8.2.3 DataConnection类的方法 / 207
8.2.4 5个数据连接对象的状态转换 / 207
8.3 StateMachine状态机 / 208
8.3.1 State设计模式 / 209
8.3.2 StateMachine核心类 / 209
8.3.3 StateMachine运行机制 / 210
8.3.4 DataConnection使用State模式的运行机制 / 211
8.4 什么是APN / 212
8.4.1 APN配置关键字段 / 212
8.4.2 Android支持的APN类型 / 213
8.4.3 如何在Android中新增APN配置 / 213
8.5 开机自动建立default默认数据连接 / 215
8.5.1 如何查看手机上网的基本参数配置 / 215
8.5.2 初始化ApnContext / 216
8.5.3 创建DataConnection数据连接 / 219
8.5.4 激活DataConnection数据连接 / 222
8.6 DataConnectionTracker运行机制 / 226
8.6.1 初始化ApnContext操作 / 227
8.6.2 开机建立default默认的数据连接 / 228
8.6.3 关闭数据连接 / 229
8.6.4 循环更新网络连接状态信息 / 230
8.6.5 APN数据库配置信息变化的观察者 / 231
8.7 获取Android手机上网数据包 / 232
8.7.1 使用tcpdump工具抓取TCP/IP数据包 / 232
8.7.2 使用Wireshark软件分析TCP/IP数据包 / 232
8.8 MMS彩信数据连接的实现 / 233
8.8.1 建立和关闭彩信数据连接 / 233
8.8.2 如何支持多种类型网络连接 / 234
8.9 实战—手机上网数据总开关的实现 / 235
8.10 本章小结 / 235
第9章 深入解析短信发送和接收流程 / 237
9.1 MMS应用主要源代码汇总及简要说明 / 237
9.2 主动发送短信流程分析 / 238
9.2.1 进入短信会话列表界面 / 238
9.2.2 短信编辑界面 / 239
9.2.3 SmsMessageSender短信发送处理逻辑 / 241
9.2.4 Telephony Frameworks层中的SmsManager类 / 243
9.2.5 IccSmsInterfaceManager服务发送短信 / 244
9.2.6 SMSDispatcher短信分发器 / 245
9.2.7 主动发送短信流程总结 / 246
9.3 短信发送状态相关处理机制 / 248
9.3.1 如何判断短信是否成功发送到短信中心 / 248
9.3.2 如何判断短信接收方已经成功收取短信 / 250
9.4 短信接收流程分析 / 252
9.4.1 短信接收的开始 / 252
9.4.2 进入短信分发器SMSDispatcher / 253
9.4.3 接收并处理新短信Broadcast广播 / 254
9.4.4 短信接收流程总结 / 254
9.5 彩信发送和接收关键流程 / 255
9.5.1 彩信传输过程中的关键类 / 255
9.5.2 TransactionService为核心的彩信传输机制 / 257
9.5.3 Transaction对象执行彩信传输 / 259
9.5.4 基于WAP PUSH的彩信接收与下载 / 260
9.6 本章小结 / 261
第四部分 深入解析Android RIL
第10章 Android RIL框架结构及RILJ运行机制 / 264
10.1 Android RIL关键处理流程 / 264
10.1.1 Android RIL框架结构 / 264
10.1.2 Android RIL的数据交互 / 265
10.2 认识RILJ / 265
10.2.1 RILJ核心类图 / 265
10.2.2 RILJ关键属性 / 266
10.2.3 RILJ关键方法 / 267
10.2.4 RILJ运行机制 / 268
10.3 认识RILRequest类 / 269
10.3.1 RILRequest类的关键属性 / 269
10.3.2 RILRequest类的方法 / 269
10.4 解析RILJ发出RIL请求流程 / 271
10.4.1 send方法发送Handler消息 / 271
10.4.2 RILSender接收和处理Handler消息 / 272
10.5 解析RILJ接收Response消息处理流程 / 273
10.5.1 RILReceiver内部类运行机制 / 273
10.5.2 Solicited Response消息处理方法processSolicited / 276
10.5.3 UnSolicited Response消息处理方法processUnsolicited / 279
10.6 本章小结 / 280
第11章 RILC系统结构及LibRIL运行机制 / 281
11.1 RILC主要代码目录结构 / 281
11.2 解析RILC运行机制 / 282
11.2.1 RILC启动过程 / 283
11.2.2 RILC运行过程 / 285
11.3 初识RILC中的运行环境LibRIL / 285
11.3.1 LibRIL主要文件及作用 / 285
11.3.2 重点结构体说明 / 286
11.4 LibRIL运行环境加载过程 / 288
11.4.1 开启ril_event事件监听入口RIL_startEventLoop / 288
11.4.2 RIL_register函数引入三方RIL_RadioFunctions / 290
11.5 运行状态中ril_event事件处理机制 / 291
11.5.1 认识ril_event结构体 / 291
11.5.2 RIL事件生命周期控制的处理函数 / 292
11.5.3 ril_event_loop处理机制 / 294
11.6 详解LibRIL运行机制 / 296
11.6.1 RILJ与LibRIL建立Socket连接过程 / 296
11.6.2 Solicited消息的交互流程和处理机制 / 297
11.7 本章小结 / 302
第12章 Reference-RIL运行框架 / 303
12.1 Reference-RIL运行机制 / 303
12.1.1 RIL_Init函数初始化Reference-RIL / 303
12.1.2 onRequest接收LibRIL的请求调用 / 304
12.1.3 UnSolicited消息处理逻辑 / 306
12.2 AT命令 / 310
12.2.1 如何新增AT命令 / 310
12.2.2 Android Telephony常用AT命令 / 310
12.3 Android RIL层运行框架和机制总结 / 311
12.3.1 总结Solicited消息处理流程 / 312
12.3.2 总结UnSolicited消息处理流程 / 313
12.4 本章小结 / 314
第五部分 系统服务
第13章 Telephony提供的系统服务 / 316
13.1 System Service系统服务类图 / 316
13.2 详解PhoneInterfaceManager实现机制 / 317
13.2.1 ITelephony.aidl接口定义 / 318
13.2.2 PhoneInterfaceManager服务创建过程 / 318
13.2.3 PhoneInterfaceManager服务使用实例分析 / 318
13.3 详解TelephonyRegistry实现机制 / 319
13.3.1 系统服务的创建入口 / 320
13.3.2 TelephonyRegistry关键方法 / 320
13.3.3 listen方法处理逻辑 / 320
13.3.4 notifyCallState方法发出通话状态变化通知 / 321
13.3.5 触发TelephonyRegistry发出通知机制 / 322
13.3.6 TelephonyRegistry系统服务使用实例分析 / 323
13.4 简述TelephonyManager实现机制 / 324
13.5 本章小结 / 326
· · · · · · (
收起)