第1章 智能手机与Symbian OS 1
1.1 智能手机的概念 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.2.8 EDGE 5
1.2.9 UMTS 5
1.3 智能手机消息传送 5
1.3.1 SMS 5
1.3.2 MMS 5
1.3.3 电子邮件 6
1.3.4 传真 6
1.4 Web浏览 6
1.4.1 WAP 6
1.4.2 HTML 6
1.5 本地设备通信功能 7
1.5.1 USB/串行电缆连接 7
1.5.2 红外线(IR) 7
1.5.3 蓝牙 7
1.6 移动操作系统 7
1.7 Symbian简史 8
1.7.1 Symbian OS概述 9
1.7.2 一种操作系统满足多种需求 9
1.7.3 应用程序 10
1.8 Symbian OS智能手机 10
1.8.1 Sony Ericsson P900 10
1.8.2 Nokia 6600 11
1.8.3 Nokia 9500 Communicator 12
1.9 其他智能手机操作系统 12
1.9.1 Palm OS 13
1.9.2 Microsoft Smartphone OS 13
1.9.3 Linux 14
第2章 Symbian OS快速入门 15
2.1 开始学习前需具备的条件 15
2.1.1 构建工具综述 15
2.1.2 什么是Symbian OS模拟器 16
2.1.3 获取Symbian OS SDK 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章 Symbian OS体系结构 45
3.1 Symbian OS的组件 45
3.2 Symbian OS的多任务处理 46
3.2.1 线程 46
3.2.2 进程 46
3.3 动态链接库 47
3.3.1 DLL类型 47
3.3.2 DLL中的静态数据 47
3.4 客户/服务器模型 48
3.5 Symbian OS中的存储器 49
3.5.1 内存如何寻址 50
3.5.2 Symbian OS的内存块 51
3.5.3 内存中的进程 51
3.5.4 Symbian OS的虚拟内存映射 51
3.5.5 进程切换—详细例子 52
3.5.6 进程相互间的保护 53
3.5.7 进程切换中的性能 53
3.5.8 固定进程 54
3.6 内核 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.10 高性能图形 61
3.11 通信体系结构 61
3.12 应用程序引擎、服务和协议 64
第4章 Symbian OS编程基础 66
4.1 在Symbian OS中使用C++ 66
4.2 非标准C++特征 66
4.3 基本数据类型 67
4.4 Symbian OS类 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.10 LC函数 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.3 导入库 87
4.6.4 RLibrary API 87
4.6.5 多态DLL 87
4.6.6 DLL中的静态数据 88
4.7 可执行文件 88
4.8 命名约定 90
4.9 小结 91
第5章 Symbian OS构建环境 93
5.1 SDK目录结构 93
5.1.1 epoc32目录 93
5.1.2 示例目录 94
5.1.3 文档目录 95
5.2 构建系统概述 95
5.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 构建DLL 104
5.7.1 用于DLL的mmp文件 104
5.7.2 通过序号引用函数 105
5.7.3 RLibrary API类 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.1 SDK版本早于Symbian OS v7.0的情况 120
5.10.2 devices命令如何工作 120
5.10.3 所有SDK均为Symbian OS v7.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章 进程、线程及同步 164
7.1 进程 164
7.1.1 进程示例 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.11 保护进程 172
7.1.12 其他进程知识 172
7.2 使用线程 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.1 本地内存块 182
7.4.2 内存块—后台信息 182
7.4.3 代码块 184
7.5 线程同步 184
7.5.1 使用信号量 184
7.5.2 创建和打开信号量 186
7.5.3 信号量在Symbian OS中的使用 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.7 移除活动对象 200
8.8 活动对象示例 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.1 客户端/服务器综述 216
9.2 探讨客户/服务器类 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章 Symbian OS中的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.2 BSD C套接字API 241
10.2.3 BSD C API套接字客户示例 241
10.3 Symbian OS套接字API 245
10.3.1 套接字API类 245
10.3.2 利用Symbian OS套接字API的HTTP示例 245
10.3.3 利用活动对象的网络编程 251
10.4 示例:获取天气信息 254
10.4.1 wunderground.com 254
10.4.2 向SimpleEx添加代码 260
10.5 建立网络连接 261
10.5.1 网络接入点 261
10.5.2 为程序建立连接 261
10.5.3 自动连接选择 262
第11章 GUI应用程序设计 263
11.1 Symbian OS用户界面 263
11.1.1 UIQ手机 263
11.1.2 Series 60手机 265
11.1.3 Series 80手机 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 Series 60规范 291
11.5.4 附加对话框函数 295
11.5.5 要覆盖的附加方法CEikDialog 296
11.5.6 使用常用对话框 297
11.6 Symbian OS的控件 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 Series 60视图 314
11.8 程序的图标和标题 315
11.8.1 创建图标位图 315
11.8.2 创建AIF资源文件 316
11.8.3 构建AIF文件 316
附录A Symbian OS手机规范 317
A.1 Arima U300 317
A.2 BenQ P30 318
A.3 Motorola A920/A925 319
A.4 Motorola A1000 320
A.5 Nokia 3230 321
A.6 Nokia 3600/3650 321
A.7 Nokia 3620/3660 322
A.8 Nokia 6260 323
A.9 Nokia 6600 324
A.10 Nokia 6620 324
A.11 Nokia 6630 325
A.12 Nokia 6670 326
A.13 Nokia 6680/6681/6682 326
A.14 Nokia 7610 327
A.15 Nokia 7710 328
A.16 Nokia 9300 328
A.17 Nokia 9500 329
A.18 Nokia N-Gage 330
A.19 Nokia N-Gage QD 331
A.20 Nokia N70 332
A.21 Nokia N90 333
A.22 Nokia N91 334
A.23 Panasonic X700 335
A.24 Panasonic X800 336
A.25 Sendo X 337
A.26 Siemens SX1 338
A.27 Sony Ericsson P800 339
A.28 Sony Ericsson P900 340
A.29 Sony Ericsson P910 341
附录B Symbian OS v9的安全性 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
展开