1.1智能手机的概念 1
第1章 智能手机与SymbianOS 1
1.2智能手机的特点 2
1.2.1智能手机的通信方式 2
1.2.2移动通信的发展 2
1.2.3 GSM 3
1.2.4 CDMA 3
1.2.5 CSD 4
1.2.6 GPRS 4
1.2.7 HSCSD 4
1.3.1 SMS 5
1.3.2 MMS 5
1.2.8 EDGE 5
1.3智能手机消息传送 5
1.2.9 UMTS 5
1.3.3电子邮件 6
1.3.4传真 6
1.4 Web浏览 6
1.4.1 WAP 6
1.4.2 HTML 6
1.6移动操作系统 7
1.5.3蓝牙 7
1.5.1 USB/串行电缆连接 7
1.5本地设备通信功能 7
1.5.2红外线(IR) 7
1.7 Symbian简史 8
1.7.1 SymbianOS概述 9
1.7.2一种操作系统满足多种需求 9
1.7.3应用程序 10
1.8 SymbianOS智能手机 10
1.8.1 SonyEricssonP900 10
1.8.2 Nokia6600 11
1.9 其他智能手机操作系统 12
1.8.3 Nokia9500Communicator 12
1.9.1 PalmOS 13
1.9.2 MicrosoftSmartphoneOS 13
1.9.3 Linux 14
第2章 Symbian0S快速入门 15
2.1开始学习前需具备的条件 15
2.1.1构建工具综述 15
2.1.2什么是SymbianOS模拟器 16
2.1.3获取SymbianOSSDK 16
2.1.4获取Windows开发包 17
2.1.5 SDK实例 18
2.1.6 Windows是惟一支持开发系统的操作系统吗 19
2.2启动开发工具 19
2.2.1模拟器快速测试 19
2.2.2 Windows开发包的快速测试 20
2.2.3实例构建 20
2.2.4解决问题 23
2.3简单示例程序 24
2.3.1应用程序组件 25
2.3.2 SimpleEx综述 25
2.3.3头文件 26
2.3.4资源文件 31
2.3.5源文件 36
2.3.6项目构建文件 39
2.4模拟器上的程序构建和执行 41
2.5智能手机程序的构建 42
第3章 SymbianOS体系结构 45
3.1 SymbianOS的组件 45
3.2 SymbianOS的多任务处理 46
3.2.1线程 46
3.2.2进程 46
3.3.2 DLL中的静态数据 47
3.3.1 DLL类型 47
3.3动态链接库 47
3.4客户/服务器模型 48
3.5 SymbianOS中的存储器 49
3.5.1内存如何寻址 50
3.5.2 SymbianOS的内存块 51
3.5.3内存中的进程 51
3.5.4 SymbianOS的虚拟内存映射 51
3.5.5进程切换——详细例子 52
3.5.6进程相互间的保护 53
3.5.7进程切换中的性能 53
3.6内核 54
3.5.8固定进程 54
3.6.1硬件抽象 55
3.6.2用户库 55
3.6.3内核可执行程序和服务器 55
3.7活动对象和异步函数 56
3.8什么是多态DLL 57
3.9 GUI体系结构 59
3.9.1定制UI 59
3.9.2 GUI框架简介 59
3.11通信体系结构 61
3.10高性能图形 61
3.12应用程序引擎、服务和协议 64
第4章 SymbianOS编程基础 66
4.1在 SymbianOS中使用C++ 66
4.2非标准C++特征 66
4.3基本数据类型 67
4.4 SymbianOS类 68
4.4.1数据类型类 68
4.4.2堆类 68
4.4.3资源类 69
4.4.4接口类 70
4.5异常错误处理和清理 71
4.5.1通过返回码进行错误处理 72
4.5.2异常退出/捕获机制 72
4.5.3陷阱和TRAPD宏 74
4.5.4异常退出函数 75
4.5.5后缀“L”的意义 75
4.5.6清理栈 76
4.5.7对象类型和清理栈 77
4.5.8更复杂的清理 78
4.5.9其他清理函数 79
4.5.1 0LC函数 80
4.5.11创建对象时的异常退出 81
4.5.12构造函数中的异常退出 82
4.5.13双阶段构造函数 82
4.5.14严重错误 83
4.5.15断言宏 84
4.6库 84
4.6.1创建静态库 85
4.6.2创建DLL 85
4.6.5多态DLL 87
4.6.4 RLibraryAPI 87
4.6.3导入库 87
4.6.6 DLL中的静态数据 88
4.7可执行文件 88
4.8命名约定 90
4.9小结 91
第5章 SymbianOS构建环境 93
5.1 SDK目录结构 93
5.1.1 epoc32目录 93
5.1.2示例目录 94
5.2构建系统概述 95
5.3构建目标 95
5.1.3文档目录 95
5.4基本构建流程 96
5.4.1进一步了解abld.bat 98
5.4.2 MMP文件 98
5.5什么是UID 100
5.6模拟器 101
5.6.1运行模拟器 101
5.6.2模拟器配置 101
5.6.3模拟器与设备的功能比较 103
5.7.1用于DLL的mmp文件 104
5.7构建DLL 104
5.7.2通过序号引用函数 105
5.7.3 RLibraryAPI类 106
5.8 DLL接口冻结 106
5.9在智能手机中安装应用程序 110
5.9.1文件存放的位置 111
5.9.2 PKG文件的格式 112
5.9.3高级PKG文件选项 115
5.9.4语言支持 117
5.10在SDK间切换 119
5.10.2 devices命令如何工作 120
5.10.1 SDK版本早于SymbianOSv7.0的情况 120
5.10.3所有SDK均为SymbianOSv7.0之前版本的情况 121
第6章 字符串、缓冲和数据集合 122
6.1文本控制台简介 122
6.2字符串和二进制数据的描述符 125
6.2.1字符串与二进制数据的比较 125
6.2.2防止内存溢出 125
6.2.3简单的描述符示例 126
6.3描述符类 127
6.3.1描述符基类 129
6.3.2字符串文字 130
6.3.3缓冲描述符 131
6.3.4指针描述符 134
6.3.5堆描述符 136
6.4描述符方法 139
6.4.1不可修改的方法 139
6.4.2写入描述符数据的方法 143
6.4.3将描述符作为数组使用 150
6.5在8位和16位描述符之间转换 151
6.6动态缓冲 152
6.6.1何时使用动态缓冲 152
6.6.2平面缓冲和分段缓冲 152
6.6.3动态缓冲方法 153
6.7数组 155
6.7.1定长数组 156
6.7.2描述符数组 156
6.7.3动态数组 158
6.8其他数据集合类 162
6.8.1链表 163
6.8.2循环缓冲 163
7.1进程 164
7.1.1进程示例 164
第7章 进程、线程及同步 164
7.1.2启动进程 165
7.1.3设置并获取进程参数 166
7.1.4与其他进程通信 167
7.1.5进程名称 167
7.1.6查询手机的运行进程 168
7.1.7进程优先级 170
7.1.8终止进程 170
7.1.9检查进程状态 171
7.1.10在进程结束时发送信号 171
7.1.12其他进程知识 172
7.2使用线程 172
7.1.11保护进程 172
7.2.1创建线程 173
7.2.2打开一个现存线程 174
7.2.3线程优先级 175
7.2.4终止线程 177
7.2.5等待线程结束 177
7.3进程间共享内存 177
7.3.1 ReadL()和WriteL() 178
7.3.2线程间内存访问——后台信息 179
7.4内存块 180
7.4.2内存块——后台信息 182
7.4.1本地内存块 182
7.4.3代码块 184
7.5线程同步 184
7.5.1使用信号量 184
7.5.2创建和打开信号量 186
7.5.3信号量在SymbianOS中的使用 187
7.5.4互斥量 187
7.5.5临界区 187
第8章 异步函数和活动对象 189
8.1异步函数 189
8.2活动对象简介 190
8.2.1非抢占式多任务处理模型 191
8.2.2创建活动对象类 192
8.3活动调度器 194
8.3.1安装并启用活动调度器 194
8.3.2后台信息 195
8.3.3 CActiveScheduler方法 196
8.3.4定制活动调度器 197
8.4活动调度器的错误处理 197
8.5活动对象优先级 198
8.6取消未完成的请求 199
8.8活动对象示例 200
8.7移除活动对象 200
8.8.1 CCoutdown活动对象 201
8.8.2 SimpleEx程序的修改 203
8.9活动对象问题 207
8.9.1在活动对象中不要阻塞 207
8.9.2避免游离信号异常 207
8.9.3每次只有一个未完成事件 208
8.10像使用线程一样使用活动对象 208
8.10.1 CTimer 209
8.10.2 RFileLogger 213
第9章 客户/服务器框架 215
9.2探讨客户/服务器类 216
9.1客户端/服务器综述 216
9.3客户/服务器示例 217
9.3.1客户端类 218
9.3.2服务器的实现 222
9.3.3 TextBuffSrv的应用示例 228
9.3.4关闭服务器 229
9.3.5在模拟器中运行服务器 230
9.4服务器的子会话 232
9.4.1基于子会话的API示例 232
9.4.2子会话如何工作 233
9.4.3创建子会话 234
9.4.4用CObject作为子会话的基类 235
第10章 SymbianOS中的TCP/IP网络编程 236
10.1 TCP/IP简介 236
10.1.1 IP地址和端口 238
10.1.2客户/服务器网络模型 238
10.1.3已知的服务器端端口地址 238
10.1.4客户端端口地址 239
10.2使用套接字的网络编程 239
10.2.1客户/服务器套接字流 240
10.2.3 BSDCAPI套接字客户示例 241
10.2.2 BSDC套接字API 241
10.3.1套接字API类 245
10.3.2利用SymbianOS套接字API的HTTP示例 245
10.3 SymbianOS套接字API 245
10.3.3利用活动对象的网络编程 251
10.4示例:获取天气信息 254
10.4.1 wunderground.com 254
10.4.2向SimpleEx添加代码 260
10.5.1网络接入点 261
10.5.2为程序建立连接 261
10.5建立网络连接 261
10.5.3自动连接选择 262
第11章 GUI应用程序设计 263
11.1 SymbianOS用户界面 263
11.1.1 UIQ手机 263
11.1.2 Series60手机 265
11.1.3 Series80手机 266
11.2剖析GUI应用程序 267
11.3应用程序类 269
11.3.1 E32Dll()和NewApplication() 269
11.3.2介绍GUI应用程序类 269
11.4资源文件 274
11.4.1资源文件格式 275
11.4.2 SimpleEx的资源文件 277
11.4.3本地化资源文件 279
11.4.4从代码中读取资源字符串 280
11.5对话框 281
11.5.1创建基本对话框 281
11.5.2多页对话框 290
11.5.3 Series60规范 291
11.5.4附加对话框函数 295
11.5.5要覆盖的附加方法CEikDialog 296
11.5.6使用常用对话框 297
11.6 SymbianOS的控件 301
11.6.1控件类型 301
11.6.2什么是控件 303
11.6.3控件剖析 304
11.6.4自主窗口控件与寄宿控件 304
11.6.5复合控件与简单控件 305
11.6.6绘制控件 306
11.6.7使用图形上下文绘制 308
11.6.8怎样处理用户输入 310
11.7视图体系结构 311
11.7.1如何创建视图 312
11.7.2 Series60视图 314
11.8程序的图标和标题 315
11.8.1创建图标位图 315
11.8.2创建AIF资源文件 316
11.8.3构建AIF文件 316
附录A SymbianOS手机规范 317
A.1 ArimaU300 317
A.2 BenQP30 318
A.3 MotorolaA920/A925 319
A.4 MotorolaA1000 320
A.5 Nokia3230 321
A.6 Nokia3600/3650 321
A.7 Nokia3620/3660 322
A.8 Nokia6260 323
A.9 Nokia6600 324
A.10 Nokia6620 324
A.11 Nokia6630 325
A.12 Nokia6670 326
A.13 Nokia6680/6681/6682 326
A.14 Nokia7610 327
A.16 Nokia9300 328
A.15 Nokia7710 328
A.17 Nokia9500 329
A.18 NokiaN-Gage 330
A.19 NokiaN-GageQD 331
A.20 NokiaN70 332
A.21 NokiaN90 333
A.22 NokiaN91 334
A.23 PanasonicX700 335
A.24 PanasonicX800 336
A.25 SendoX 337
A.26 SiemensSX1 338
A.27 SonyEricssonP800 339
A.28 SonyEricssonP900 340
A.29 SonyEricssonP910 341
附录B SymbianOSv9的安全性 342
B.1平台安全性概念 342
B.1.1能力(capability) 342
B.1.2权限(permission) 342
B.1.3授权(authorization) 343
B.1.4安全标识符 344
B.1.5数据Caging 344
B.2使用能力 344