第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.25高级诀窍 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