作者簡介
作者:(美國)奧布里(Michael Aubert) (美國)Alexey Gusev (美國)Tanzim Husain 等 譯者:杜青
奧布里,(Michael Aubert),Michael在Symbian的Java組和iAnywhere的研發組總共工作了7個年頭。期間,他對包括手機通話、簡訊息、3D圖像、網路、多媒體、PIM、密碼、系統安全及軟體部署在內的許多技術都有很深入的研究。
他擁有E.S.L.A.L軟體工程學院的理學碩士學位,並且還很有可能是唯一一個為法國讀者講解Crazy Java Team Event Server Framework的人。
Alexey Gusev,Alexey在20世紀80年代末致力於研究大型機,開始時使用Pascal和REXX語言,但很快轉為在多種平台上使用C/C++和Java語言,隨後又置身於移動技術領域。作為小組負責人在Windows Mobile組工作了近10年後,他最終決定加盟Symbian的Core Development組,先後從事於安全和USB模組。
他在莫斯科物理技術學院獲得套用數學和物理學碩士學位,是Symbian認證工程師,並且還是www.developer.com的簽約作者。
Tanzim Husain,Tanzim於2004年加入Symbian的網路技術組並工作至今,期間經歷了兩次架構改變以及三次小組重組。在加入Symbian之前,他主要工作於Windows Mobile平台,並致力於研發先進的地圖繪製和地理信息系統(GIS)。
Tanzim擁有NSU的計算機科學學士學位。工作之餘,他喜歡擺弄攝影並且樂於到城外鄉間以逃避喧囂。他還在www.tanzim.co.uk網站上維護著屬於自己的網頁和部落格,雖然更新並不頻繁。
Jenny Mulholland,Jenny於2006年畢業於劍橋大學物理系,獲得碩士學位以後,就成為Symbian的Licensee Product Development小組(該小組隸屬於Comms Porting組)的一員。她最近己成為Symbian的認證工程師。
工作之餘,如果她沒有和同事在酒館的話,必然是投入到Chandos Chamber Choir音樂會的演出中了,而且最近她還學會了吹長笛。
內容簡介
《Symbian OS C++編程訣竅》內容簡介:對於初次接觸Symbian OS的C++程式設計師來說,《Symbian OS C++編程訣竅》是必讀的。
在移動開發領域,不管您是需要移植一個桌面應用程式,快速創建一個程式原型,還是僅僅希望學習一些程式開發的知識,《Symbian OS C++編程訣竅》都將是您了解和學習Symbian OS的首選。同時,《Symbian OS C++編程訣竅》還是幫助讀者解決移動開發難題的實用手冊,尤其是第4章,以任務驅動的方式介紹了Symbian OS手機開發的難點,並列舉了作者多年積累的一些開發訣竅。每個任務都事先指明了難度等級、完成需要的時間等,之後是如何完成該任務的細節以及編程竅門。
《Symbian OS C++編程訣竅》特色:
從Symbian OS移動開發基礎知識入手,涵蓋Symbian OS所有技術:圖形和繪圖、多媒體、網路、基於位置的服務、通話、簡訊息等。
以任務驅動的方式來介紹Symbian OS開發技術,在介紹技術的同時,指出其實際套用。
作者多年開發經驗的總結,多達112個編程訣竅,將使讀者少走許多彎路。
目錄
第1章 入門和設定 1
1.1 工具:您需要什麼以及從哪裡獲得 1
1.1.1 系統需求 1
1.1.2 IDE 2
1.1.3 SDK 2
1.1.4 編譯器 2
1.2 當等待安裝時 2
1.2.1 Carbide.c++ 2
1.2.2 開發社區 3
1.2.3 移動開發的概念 3
1.2.4 ARM硬體 3
1.2.5 模擬器 4
1.3 安裝結束後 5
1.3.1 命令行工具 5
1.3.2 SDK的目錄結構 5
1.3.3 模擬器 5
第2章 快速上手 7
2.1 Hello World項目模板 7
2.2 運行Carbide.c++ IDE 7
2.3 生成Hello World項目 8
2.4 構建Hello World項目 10
2.5 在模擬器上運行Hello World程式 11
2.6 在設備上運行Hello World程式 13
2.7 修改Hello World項目 14
2.7.1 添加一個新的選單項 14
2.7.2 處理選單事件 16
2.8 Carbide.c++高級議題 18
2.8.1 修改項目檔案 18
2.8.2 導入項目檔案 20
2.8.3 改變認證/密鑰對 21
2.9 連結 23
第3章 Symbian OS開發基礎 25
3.1 Symbian OS的基本數據類型 25
3.2 Symbian OS的類習俗 26
3.2.1 T類 26
3.2.2 C類 27
3.2.3 R類 27
3.2.4 M類 27
3.2.5 靜態類 28
3.3 異常退出和異常處理 28
3.3.1 嚴重錯誤Panic和異常退出的區別 29
3.3.2 TRAP和TRAPD宏 29
3.3.3 是什麼造成了異常退出 30
3.3.4 new(ELeave) 30
3.4 清除棧 31
3.5 清除棧常見問題:更多信息 32
3.5.1 為什麼PushL()會異常退出 32
3.5.2 在使用清除棧的時候為什麼會出現嚴重錯誤 33
3.5.3 當代碼運行出TRAP以後為什麼會出現嚴重錯誤 33
3.5.4 當調用CleanupStack::Pop()時為什麼會產生嚴重錯誤 33
3.5.5 應該如何綜合使用異常退出、標準異常處理以及清除棧 34
3.6 兩階段構造 34
3.7 瘦模板 36
3.8 描述符——Symbian OS字元串 37
3.8.1 字元大小 38
3.8.2 TDesC 38
3.8.3 TDes 38
3.8.4 描述符的繼承類 38
3.8.5 指針型描述符:TPtrC和TPtr 39
3.8.6 基於棧快取的描述符TBufC和TBuf 39
3.8.7 動態描述符:HBufC和RBuf 40
3.8.8 使用RBuf 41
3.8.9 字面描述符 41
3.8.10 描述符類型:總結 42
3.8.11 使用描述符API 43
3.8.12 用作函式參數和返回值的描述符 44
3.9 Symbian OS中的數組 45
3.9.1 靜態數組 45
3.9.2 動態數組 45
3.9.3 RArray類的清除 46
3.9.4 什麼時候應該使用CArrayX數組 47
3.9.5 排序和查找 47
3.10 執行檔 48
3.11 平台安全:能力 49
3.12 平台安全:數據隔離 51
3.13 棧大小和堆大小 52
3.14 流 52
3.15 活動對象 54
3.15.1 搶占 55
3.15.2 CActive類 55
3.15.3 TRequestStatus類 57
3.15.4 活動調度器 57
3.15.5 使用活動對象時的常見問題 59
3.16 執行緒 60
3.17 時鐘和回調函式 60
3.18 小結 61
第4章 Symbian C++訣竅 63
4.1 檔案處理 64
4.1.1 初級訣竅 64
【訣竅4-1】獲取檔案伺服器會話 65
【訣竅4-2】向檔案寫二進制數據 65
【訣竅4-3】從檔案讀取二進制數據 67
【訣竅4-4】從檔案讀文本 69
4.1.2 中級訣竅 71
【訣竅4-5】獲取私有資料夾路徑 71
【訣竅4-6】從檔案流讀寫 74
【訣竅4-7】從檔案流讀寫類成員 79
4.1.3 高級訣竅 81
【訣竅4-8】從檔案存儲讀寫 81
【訣竅4-9】進程間已分享檔案 86
4.1.4 資源 88
4.2 聯繫人和日曆 89
4.2.1 在您開始使用聯繫人前 89
4.2.2 在您開始使用日曆前 90
4.2.3 初級訣竅 90
【訣竅4-10】寫聯繫人數據 90
【訣竅4-11】讀聯繫人數據 92
【訣竅4-12】增加新聯繫人 94
【訣竅4-13】刪除聯繫人 95
【訣竅4-14】修改日曆中的事件 96
【訣竅4-15】添加新的日曆事件 98
【訣竅4-16】刪除日曆事件 101
4.2.4 中級訣竅 102
【訣竅4-17】聯繫人排序 102
【訣竅4-18】使用vCard格式 103
【訣竅4-19】使用vCal格式 105
【訣竅4-20】創建重複的日曆事件 107
4.2.5 高級訣竅 109
【訣竅4-21】查找聯繫人 109
【訣竅4-22】把聯繫人移動到另一個組中 112
【訣竅4-23】探詢日曆是否為空 114
【訣竅4-24】獲取出席者名單 115
4.3 網路 117
4.3.1 上手 118
4.3.2 配置環境 119
4.3.3 HTTP 121
4.3.4 InetProtUtils 121
4.3.5 初級訣竅 122
【訣竅4-25】用TCP套接字收發數據 122
【訣竅4-26】強制連線使用某載體 124
【訣竅4-27】強制連線使用某網際網路接入供應商 125
【訣竅4-28】解析域名 127
【訣竅4-29】使用HTTP的GET請求 129
【訣竅4-30】解析URI 132
【訣竅4-31】創建URI 134
4.3.6 中級訣竅 136
【訣竅4-32】用TCP偵聽到達的連線 136
【訣竅4-33】監視連線狀態 138
【訣竅4-34】獲取激活的連線信息 140
【訣竅4-35】使用安全套接字 141
【訣竅4-36】使用HTTP的POST請求 143
【訣竅4-37】設定HTTP的高級屬性 146
【訣竅4-38】 從URI提取本地檔案名稱 147
4.3.7 高級訣竅——獲取HTTP代理信息 148
【訣竅4-39】獲取HTTP代理信息 148
4.3.8 資源 150
4.4 簡訊息 151
4.4.1 支持的載體 151
4.4.2 SendAs 151
4.4.3 服務 152
4.4.4 簡訊息存儲 152
4.4.5 寫簡訊息應用程式的小提示 153
4.4.6 關於本章的訣竅 154
4.4.7 訣竅 155
【訣竅4-40】初始化應用程式以使用簡訊息 155
【訣竅4-41】創建資料夾 157
【訣竅4-42】創建簡訊息 159
【訣竅4-43】讀取簡訊息的細節 160
【訣竅4-44】編輯簡訊息 162
【訣竅4-45】獲取並編輯簡訊息的設定 163
【訣竅4-46】拷貝簡訊息 164
【訣竅4-47】移動簡訊息 166
【訣竅4-48】傳送簡訊息 167
【訣竅4-49】刪除簡訊息 168
【訣竅4-50】處理收到的簡訊息 169
4.4.8 資源 170
4.5 圖形和繪圖 171
4.5.1 初級訣竅 172
【訣竅4-51】畫線和畫幾何形狀 172
【訣竅4-52】繪製背景色或填充幾何形狀 173
【訣竅4-53】載入並繪製MBM或MIF圖像 174
【訣竅4-54】繪製一個有透明區域的圖像 175
4.5.2 中級訣竅 176
【訣竅4-55】載入JPG或PNG圖像 176
【訣竅4-56】在螢幕上繪製文本 177
【訣竅4-57】載入字型 179
【訣竅4-58】在一個控制項中繪製另一個控制項 180
4.5.3 高級訣竅 181
【訣竅4-59】繪製超出螢幕的圖像(Off-Screen) 181
【訣竅4-60】載入GIF格式的動畫圖像 182
【訣竅4-61】以皮膚為背景繪製(僅S60支持) 185
【訣竅4-62】在Symbian OS應用程式框架之外繪圖 186
【訣竅4-63】直接往螢幕上繪圖 188
4.6 用OpenGL ES繪製3D圖形 189
4.6.1 OpenGL ES基礎 190
4.6.2 從OpenGL到OpenGL ES 191
4.6.3 初級訣竅 191
【訣竅4-64】全螢幕設定 191
【訣竅4-65】顯示3D圖形對象 194
【訣竅4-66】平移3D圖形對象 198
【訣竅4-67】翻轉3D圖形對象 199
4.6.4 中級訣竅 200
【訣竅4-68】對3D圖形對象套用紋理 200
【訣竅4-69】部分螢幕設定 201
4.6.5 高級訣竅 203
【訣竅4-70】動態動畫(Animate a Scene) 203
【訣竅4-71】適配器性能 206
4.6.6 資源 207
4.7 多媒體 208
4.7.1 初級訣竅 209
【訣竅4-72】播放音頻剪輯(Audio Clip) 209
【訣竅4-73】使用基本的音頻操作 211
【訣竅4-74】播放提示音(Audio Tone) 212
【訣竅4-75】播放MIDI檔案 213
4.7.2 中級訣竅 214
【訣竅4-76】取得默認的多媒體檔案存放路徑 214
【訣竅4-77】播放視頻剪輯 217
【訣竅4-78】音頻流 218
4.7.3 高級訣竅 220
【訣竅4-79】錄製音頻 220
【訣竅4-80】錄製通話內容 222
【訣竅4-81】顯示照相機的取景 222
【訣竅4-82】用照相機拍攝靜物 225
【訣竅4-83】錄製視頻 226
4.7.4 資源 228
4.8 通話 229
4.8.1 初級訣竅 233
【訣竅4-84】處理手機通話 233
【訣竅4-85】傳送DTMF信息(DTMF Tones)至通話線路 234
【訣竅4-86】監測通話線路狀態 234
【訣竅4-87】獲取網路信號強度 235
【訣竅4-88】獲取電池狀態 236
【訣竅4-89】獲取設備的IMEI號 236
【訣竅4-90】獲取當前網路名稱 237
【訣竅4-91】獲取當前運營商名稱 237
【訣竅4-92】獲取飛行模式狀態 238
【訣竅4-93】獲取網路註冊狀態 238
4.8.2 中級訣竅 239
【訣竅4-94】獲取來電/去電的電話號碼 239
【訣竅4-95】匹配人名和相應的電話號碼 240
【訣竅4-96】從SIM卡中獲取IMSI號 241
【訣竅4-97】獲取手機的鎖定(Phone Lock)狀態 241
4.8.3 高級訣竅 242
【訣竅4-98】獲取信元編號和網路信息 242
【訣竅4-99】獲取呼叫轉接(Call Forwarding)狀態 243
【訣竅4-100】獲取呼叫限制(Call Barring)狀態 244
4.9 互聯 244
4.9.1 初級訣竅 245
【訣竅4-101】通過紅外(IrDA)列印 245
【訣竅4-102】查找紅外設備 246
【訣竅4-103】查找藍牙設備 247
【訣竅4-104】查找為特定設備提供的藍牙服務 249
4.9.2 中級訣竅 251
【訣竅4-105】使用套接字API 251
【訣竅4-106】創建簡單的OBEX客戶端 254
【訣竅4-107】創建簡單的基於藍牙的OBEX伺服器 256
4.9.3 高級訣竅——廣播藍牙服務 257
【訣竅4-108】廣播藍牙服務 257
4.10 基於位置的服務 259
4.10.1 初級訣竅 261
【訣竅4-109】取得可用位置技術模組的列表 261
【訣竅4-110】取得當前模組的狀態信息 263
【訣竅4-111】獲取模組狀態改變的通知 264
【訣竅4-112】設定模組選擇標準 266
4.10.2 中級訣竅 267
【訣竅4-113】請求位置信息 267
【訣竅4-114】請求擴展的位置信息 273
第5章 更上一層樓 275
5.1 高級技術 275
5.1.1 發布和訂閱:系統範圍的屬性 275
5.1.2 創建一個伺服器進程:檔案共享 276
5.1.3 高級系統中所特定的用戶接口 277
5.1.4 高級簡訊息:一種新協定 278
5.2 僅適合Symbian合作夥伴 279
5.2.1 檔案伺服器外掛程式:獨立的檔案系統 279
5.2.2 高級多媒體:額外的格式流 280
5.3 高級應用程式部署 280
5.3.1 自動安裝 280
5.3.2 定製安裝 281
5.3.3 嵌入的二進制集 281
第6章 發布程式 283
6.1 在發布程式前要做什麼 283
6.1.1 對其觀察 283
6.1.2 對其測試 285
6.1.3 對其最佳化 286
6.1.4 對其保護 287
6.1.5 對其簽名 288
6.1.6 對其國際化 290
6.2 如何分發應用程式 292
6.2.1 網路運營商 292
6.2.2 獨立的軟體渠道 293
6.2.3 Content Aggregator 294
6.2.4 預安裝應用程式 294
6.2.5 開源 294
6.3 下一步怎么做 295
6.3.1 Symbian Press圖書 295
6.3.2 同Symbian合作 296
6.3.3 在Symbian生態系統範圍內的合作 297