推薦序
前言
第一部分 基礎篇
第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
· · · · · · (
收起)