第一部分 高级Android应用程序设计原则 2
第1章 线程及异步操作 2
1.1 异步处理的重要性 2
1.2 使用AsyncTask类 3
1.3 使用Thread类 5
1.4 使用Loaders 6
1.5 理解限制模式(StrictMode) 6
小结 7
参考资料和更多信息 7
第2章 使用服务 8
2.1 何时使用服务 8
2.2 理解服务的生命周期 8
2.3 创建服务 9
2.4 控制服务 13
2.5 实现远程接口 14
2.6 实现可包装(Parcelable)类 16
2.7 使用IntentService类 18
小结 21
参考资料和更多信息 21
第3章 使用SQLite应用程序数据库 22
3.1 创建SQLite数据库 23
3.2 创建、修改和删除数据库记录 24
3.3 使用事务(Transaction) 26
3.4 在SQLite数据库中执行查询 27
3.5 关闭和删除SQLite数据库 31
3.6 设计持久数据库 32
3.7 向应用程序界面绑定数据 34
小结 38
参考资料和更多信息 38
第4章 构建Android内容提供器 39
4.1 实现内容提供器 39
4.1.1 实现内容提供器接口 39
4.1.2 定义数据URI 40
4.1.3 定义数据列 40
4.1.4 实现重要的内容提供器方法 41
4.1.5 更新Manifest文件 45
4.2 使用内容提供器增强你的应用程序 46
小结 50
参考资料和更多信息 50
第5章 广播和Intent接收 51
5.1 发送广播 51
5.1.1 发送普通广播 51
5.1.2 发送有序广播 52
5.2 接收广播 52
5.2.1 注册广播接收 53
5.2.2 处理系统产生的广播 54
5.3 应用程序广播的安全性 56
小结 57
参考资料和更多信息 57
第6章 使用通知 58
6.1 向用户发出通知 58
6.2 关于兼容性 59
6.3 使用状态栏发布通知 59
6.3.1 使用NotificationManager服务 59
6.3.2 创建一个带有图标的简单文本通知 60
6.3.3 使用通知队列 60
6.3.4 更新通知 61
6.3.5 清除通知 62
6.4 让手机震动 63
6.5 灯光闪烁 63
6.6 发出声响 65
6.7 自定义通知 65
6.8 设计有用的通知 67
小结 67
参考资料和更多信息 67
第二部分 高级Android用户界面设计原则 70
第7章 设计强大的用户界面 70
7.1 遵循Android用户界面设计指南 70
7.2 使用菜单 71
7.2.1 使用选项菜单 71
7.2.2 使用内容菜单 73
7.2.3 使用弹出菜单 74
7.3 启用动作栏(Action Bar) 74
7.3.1 构建基本的动作栏 75
7.3.2 自定义动作栏 77
7.3.3 处理动作栏上应用程序图标点击 78
7.3.4 使用无需动作栏的页面 79
7.3.5 上下文动作模式简介 79
7.3.6 使用高级动作栏特性 79
7.4 使用样式 80
7.4.1 构建简单样式 80
7.4.2 使用样式继承 82
7.5 使用主题 83
小结 85
参考资料和更多信息 85
第8章 处理高级用户输入 86
8.1 使用文本输入法 86
8.1.1 使用软键盘 86
8.1.2 使用文本预测和用户词典 88
8.1.3 使用剪贴板框架 88
8.2 处理用户事件 89
8.2.1 监听触摸模式状态改变 89
8.2.2 监听全屏幕上的事件 90
8.2.3 监听长时单击 91
8.2.4 监听焦点改变 91
8.3 使用手势 92
8.3.1 在视图内检测用户动作 92
8.3.2 处理普通单点触控手势 93
8.3.3 处理普通多点触控手势 97
8.3.4 让手势更自然 100
8.3.5 使用拖曳(drag and drop)框架 100
8.4 使用轨迹球 100
8.5 处理屏幕方向改变 101
小结 102
参考资料和更多信息 103
第9章 设计应用程序辅助功能 104
9.1 探索辅助特性(Accessibility)框架 104
9.2 使用语音识别服务 105
9.3 使用语音合成(TTS)服务 108
小结 109
参考资料和更多信息 110
第10章 平板电脑和Google TV开发最佳实践 111
10.1 理解设备多样化 111
10.1.1 不要对设备属性做出假设 111
10.1.2 设计灵活的用户界面 111
10.1.3 吸引新的用户群 112
10.1.4 使用可选资源 112
10.1.5 在大屏幕上高效地利用屏幕空间 113
10.2 开发平板电脑应用程序 113
10.3 开发Google TV应用程序 114
10.3.1 为Google TV优化Web应用程序 115
10.3.2 为Google TV开发原生Android应用程序 116
10.4 开发亚马逊Kindle Fire应用程序 116
小结 117
参考资料和更多信息 117
第三部分 使用常用Android API 120
第11章 使用Android网络API 120
11.1 移动网络基础 120
11.2 理解带有网络的限制模式 120
11.3 访问因特网(HTTP) 121
11.3.1 从Web读取数据 121
11.3.2 使用HttpURLConnection 122
11.3.3 解析从网络获取的XML 122
11.3.4 处理网络中的异步操作 124
11.3.5 获取Android网络状态 128
小结 129
参考资料和更多信息 129
第12章 使用Android Web API 130
12.1 使用WebView浏览Web 130
12.1.1 设计带有WebView控件的布局 131
12.1.2 向WebView控件载入内容 131
12.1.3 为WebView控件添加功能 132
12.1.4 管理WebView状态 134
12.2 使用WebKit延伸Web应用 134
12.2.1 浏览WebKitAPI 135
12.2.2 扩展Android Web应用程序的功能 135
12.3 使用Flash 138
12.3.1 使用Flash应用程序 139
12.3.2 构建AIR应用程序 139
小结 139
参考资料和更多信息 139
第13章 使用位置服务API 140
13.1 使用全球定位服务(GPS) 140
13.1.1 在你的应用程序中使用GPS功能 140
13.1.2 确定设备的位置 141
13.1.3 定位你的模拟器 142
13.2 位置地理编码 143
13.3 在地图上标注位置 145
13.3.1 地图标注内容 145
13.3.2 地图标注视图 146
13.3.3 获得调试API Key 147
13.3.4 拖曳地图视图 149
13.3.5 缩放地图视图 149
13.3.6 标记点 150
13.4 位置服务扩展应用 154
小结 155
参考资料和更多信息 155
第14章 使用Android多媒体API 156
14.1 使用多媒体 156
14.2 使用摄像头 157
14.2.1 使用摄像头捕捉静态图像 157
14.2.2 使用视频 164
14.2.3 使用面部识别 166
14.3 使用音频 167
14.3.1 录制音频 167
14.3.2 播放音频 168
14.3.3 共享音频 169
14.3.4 搜索多媒体 169
14.3.5 使用铃音 170
小结 171
参考资料和更多信息 171
第15章 使用Android电话API 172
15.1 使用电话功能 172
15.1.1 为获取手机状态信息取得许可权限 172
15.1.2 获取通话状态 173
15.1.3 请求获取服务信息 174
15.1.4 监控信号强度和数据连接速度 175
15.1.5 使用电话号码 175
15.2 使用短消息 176
15.2.1 获得发送和接收短消息的许可权限 176
15.2.2 发送短消息 176
15.2.3 接收短消息 178
15.3 拨打和接听电话 180
15.3.1 拨打电话 180
15.3.2 接听电话 181
15.4 使用SIP 181
小结 182
参考资料和更多信息 182
第16章 使用Android硬件传感器 183
16.1 设备硬件进行交互 183
16.2 使用设备传感器 184
16.2.1 使用不同的传感器 184
16.2.2 为传感器配置Android Manifest文件 184
16.2.3 获取对传感器的访问 185
16.2.4 读取传感器数据 185
16.2.5 校正传感器 186
16.2.6 确定设备的方向 187
16.2.7 指北 187
16.3 监视电池 187
小结 189
参考资料和更多信息 189
第17章 使用Android可选硬件API 190
17.1 使用蓝牙 190
17.1.1 检查可用的蓝牙硬件 190
17.1.2 开启蓝牙 191
17.1.3 查询配对设备 191
17.1.4 搜索设备 191
17.1.5 建立设备间连接 192
17.2 使用USB 193
17.2.1 使用USB配件 193
17.2.2 充当USB Host 194
17.3 使用Android Beam 194
17.3.1 开启Android Beam数据发送 194
17.3.2 获取Android Beam消息 195
17.3.3 为Android Beam配置Manifest文件 197
17.4 使用Wi-Fi 197
17.4.1 Wi-Fi直连简介 197
17.4.2 监控Wi-Fi状态 198
小结 200
参考资料和更多信息 200
第四部分 Android中的绘画、动画与图形编程 202
第18章 开发Android 2D图形应用程序 202
18.1 屏幕绘图 202
18.2 使用文字 205
18.2.1 使用默认字体 205
18.2.2 使用自定义字体 207
18.2.3 测量文字所需的屏幕尺寸 207
18.3 使用位图 207
18.3.1 在画布上绘制位图 207
18.3.2 缩放位图 208
18.3.3 使用Matrix变换位图 208
18.4 使用图形 209
18.4.1 用XML资源定义图形 209
18.4.2 使用程序定义图形 210
18.4.3 绘制各种图形 210
18.5 使用硬件加速功能 215
18.5.1 控制硬件加速 215
18.5.2 调校硬件加速 215
小结 216
参考资料和更多信息 216
第19章 使用动画 217
19.1 探索Android的动画能力 217
19.1.1 使用逐帧动画 217
19.1.2 使用补间动画 219
19.1.3 使用属性动画 223
19.2 使用不同的插补器(Interpolator) 227
小结 227
参考资料和更多信息 227
第20章 开发Android 3D图形应用程序 228
20.1 使用OpenGL ES 228
20.1.1 在Android中使用OpenGL ES 228
20.1.2 保证设备兼容性 229
20.2 在Android SDK中使用OpenGL ES API 229
20.3 手工处理OpenGL ES任务 230
20.3.1 创建SurfaceView 230
20.3.2 启动OpenGL ES线程 232
20.3.3 初始化EGL 233
20.3.4 初始化GL 234
20.3.5 屏幕绘制 235
20.4 绘制3D物体 236
20.4.1 绘制顶点(Vertices) 236
20.4.2 为顶点着色 237
20.4.3 绘制更多复杂物体 237
20.4.4 照亮你的场景 238
20.4.5 为对象赋予材质 240
20.5 与Android视图和事件进行交互 241
20.5.1 允许OpenGL线程向应用程序线程发送信息 241
20.5.2 允许应用程序线程向OpenGL线程发送信息 242
20.6 清理OpenGL ES 244
20.7 使用GLSurfaceView(Easy OpenGL ES) 244
20.8 使用OpenGL ES 2.0 247
20.8.1 为OpenGL ES 2.0配置应用程序 247
20.8.2 获取OpenGL ES 2.0平面 247
20.9 使用RenderSeript 250
20.9.1 定义RenderScript功能 251
20.9.2 渲染到自定义View控件 254
小结 256
参考资料和更多信息 256
第21章 使用Android NDK 257
21.1 决定何时使用Android NDK 257
21.2 安装Android NDK 258
21.3 探索Android NDK 258
21.4 创建自己的NDK工程 259
21.4.1 使用Java调用原生代码 259
21.4.2 处理参数和返回值 260
21.4.3 在原生代码中使用异常 261
21.4.4 使用原生Activity 262
21.5 提升图形处理性能 263
21.6 与RenderScript的比较 263
小结 264
参考资料和更多信息 264
第五部分 充分利用Android的特性 266
第22章 扩展Android应用程序 266
22.1 增强你的应用程序 266
22.2 使用应用程序小插件 267
22.2.1 创建应用程序小插件 267
22.2.2 安装应用程序小插件 273
22.2.3 成为小插件Host 273
22.3 使用动态壁纸(Live Wallpaper) 273
22.4 创建动态壁纸 274
22.4.1 创建动态壁纸服务 274
22.4.2 创建动态壁纸配置 276
22.4.3 为动态壁纸配置Android Manifest文件 276
22.4.4 安装动态壁纸 277
22.5 成为内容类型处理器(Content Type Handler) 277
22.6 确定Intent动作和MIME类型 278
22.6.1 实现Activity处理Intent 279
22.6.2 注册Intent过滤器 279
小结 280
参考资料和更多信息 280
第23章 使用应用程序搜索 281
23.1 在应用程序内启用搜索 281
23.2 启用全局搜索 289
小结 290
参考资料和更多信息 290
第24章 使用云消息框架 291
24.1 C2DM概览 291
24.1.1 理解C2DM消息流 291
24.1.2 理解C2DM服务的限制 292
24.1.3 注册C2DM 292
24.1.4 在应用程序中集成C2DM 293
24.1.5 探索C2DM示例应用程序 294
24.2 C2DM的替代技术 294
小结 294
参考资料和更多信息 294
第25章 用户账户管理与数据同步 295
25.1 使用账户管理器管理账户 295
25.2 使用备份服务 296
25.2.1 选择远程备份服务 297
25.2.2 实现备份代理(Agent) 297
25.2.3 备份和恢复应用程序数据 300
小结 301
参考资料和更多信息 302
第六部分 应用程序发布与分发的进阶话题 304
第26章 面向不同设备配置和语言 304
26.1 应用程序国际化 304
26.1.1 使用替代资源实现国际化 304
26.1.2 在程序中实现本地化支持 307
26.2 发布供国外用户使用的应用程序 308
小结 308
参考资料和更多信息 309
第27章 Android第三方应用内支付API 310
27.1 什么是应用内支付? 310
27.2 使用应用内付费 311
27.3 使用Android Market应用内支付API 311
27.4 使用亚马逊Appstore应用内支付API 312
27.5 使用PayPal支付API 312
27.6 使用其他支付API 313
参考资料和更多信息 313
第28章 通过Google Analytics实现应用程序统计 314
28.1 创建Google账号 314
28.2 向Eclipse项目添加库 315
28.3 从应用程序收集数据 316
28.4 记录不同的事件 317
28.5 使用Google Analytics仪表盘 317
28.6 收集电子商务信息 319
28.6.1 在应用程序中记录电子商务事件 319
28.6.2 查看电子商务报告 320
28.7 跟踪广告和Market Referral(市场推荐) 320
28.8 收集统计数据 320
28.9 保护用户的隐私 321
小结 321
参考资料和更多信息 322
第29章 应用程序版权保护 323
29.1 应用程序都很脆弱 323
29.2 使用安全的编码实践 323
29.3 使用ProGuard进行扰码 324
29.3.1 为Android应用程序配置ProGuard 324
29.3.2 处理扰码产生的错误 325
29.4 使用授权验证库(License Verification Library) 326
29.5 其他反盗版建议 326
小结 327
参考资料和更多信息 327
第七部分 附录 330
附录A Android调试桥快速入门 330
A.1 列表显示连接的设备和模拟器 330
A.2 针对特定设备使用ADB命令 330
A.3 启动和停止ADB服务进程 331
A.3.1 停止ADB服务进程 331
A.3.2 启动和检测ADB服务进程 331
A.4 列出ADB命令 331
A.5 发布Shell命令 331
A.5.1 发布单条Shell命令 332
A.5.2 使用Shell会话 332
A.5.3 使用Shell启动和终止模拟器 332
A.6 拷贝文件 333
A.6.1 向设备或模拟器发送文件 333
A.6.2 从设备提取文件 333
A.7 安装和卸载Android应用程序 333
A.7.1 安装应用程序 333
A.7.2 重装应用程序 334
A.7.3 卸载应用程序 334
A.8 使用LogCat记录日志 334
A.8.1 显示所有的日志信息 334
A.8.2 在日志数据中包含日期和时间信息 334
A.8.3 过滤日志信息 335
A.8.4 清除日志 336
A.8.5 将日志输出重定向至一个文件 336
A.8.6 访问次级日志 336
A.9 控制备份服务 336
A.9.1 强制备份操作 337
A.9.2 强制恢复操作 337
A.9.3 将存档数据清空 337
A.10 生成Bug报告 338
A.11 使用Shell查看SQLite数据库 338
A.12 在ADB Shell中进行应用程序压力测试 338
A.12.1 让Monkey掌管你的应用程序 338
A.12.2 听听Monkey怎么说 338
A.12.3 指导Monkey的行为 339
A.12.4 训练你的Monkey重复它的技巧 340
A.12.5 别让Monkey逃出你的手掌 340
A.12.6 深入学习Monkey 340
A.13 通过Shell安装和使用自定义二进制文件 340
附录B SQLite快速入门 342
B.1 探索SQLite的常见任务 342
B.2 使用sqlite3命令行接口 342
B.2.1 运行ADB Shell 343
B.2.2 连接数据库 343
B.2.3 探索你的数据库 343
B.2.4 导入和导出数据库 344
B.2.5 在命令行中执行SQL命令 346
B.2.6 使用其他的sqlite3命令 346
B.2.7 认识SQLite的局限 346
B.3 通过实例学习:学生成绩数据库 347
B.3.1 设计学生成绩数据库的模式 347
B.3.2 结合AUTOINCREMENT创建简单表 348
B.3.3 向表中插入数据 348
B.3.4 使用SELECT查询表数据 348
B.3.5 创建具有外键和复合主键的表 349
B.3.6 修改和更新表数据 350
B.3.7 使用JOIN进行多表查询 350
B.3.8 使用计算列 351
B.3.9 对计算列使用子查询 352
B.3.10 删除表 352