第1 章 Android计算平台简介 1
1.1 面向新PC 的全新平台 1
1.2 Android 的历史 3
1.3 Dalvik VM 剖析 4
1.4 理解Android 软件栈 5
1.5 使用Android SDK 开发最终用户应用程序 6
1.5.1 Android 模拟器 6
1.5.2 Android UI 7
1.5.3 Android 基础组件 7
1.5.4 高级UI 概念 8
1.5.5 Android Service 组件 10
1.5.6 Android 媒体和电话组件 10
1.5.7 Android Java 包 11
1.6 利用Android 源代码 13
1.7 本书的示例项目 14
1.8 小结 15
第2 章 设置开发环境 16
2.1 设置环境 16
2.1.1 下载JDK 6 16
2.1.2 下载Eclipse 3.6 17
2.1.3 下载Android SDK 18
2.1.4 命令行窗口 19
2.1.5 安装ADT 19
2.2 了解基本组件 21
2.2.1 View 21
2.2.2 Activity 21
2.2.3 Intent 22
2.2.4 ContentProvider 22
2.2.5 Service 22
2.2.6 AndroidManifest.xml 22
2.2.7 AVD 22
2.3 Hello World! 23
2.4 AVD 27
2.5 剖析Android 应用程序的结构 28
2.6 分析Notepad 应用程序 30
2.6.1 加载和运行Notepad 应用程序 30
2.6.2 分解应用程序 31
2.7 了解应用程序生命周期 37
2.8 调试应用程序 40
2.8.1 启动模拟器 41
2.8.2 StrictMode 42
2.8.3 参考资料 46
2.9 小结 46
第3 章 使用Android 资源 47
3.1 资源 47
3.1.1 字符串资源 47
3.1.2 布局资源 49
3.1.3 资源引用语法 51
3.1.4 定义资源ID 供以后使用 52
3.1.5 已编译和未编译的Android资源 52
3.2 Android 关键资源 53
3.3 使用任意XML 资源文件 61
3.4 使用原始资源 62
3.5 使用资产 63
3.6 了解资源目录结构 63
3.7 资源和配置更改 64
3.8 参考资料URL 67
3.9 小结 67
第4 章 ContentProvider 68
4.1 探索Android 内置的ContentProvider 69
4.2 ContentProvider 的架构 73
4.3 实现ContentProvider 84
4.4 练习图书提供程序 94
4.4.1 添加图书 94
4.4.2 删除图书 94
4.4.3 获取图书数量 95
4.4.4 显示图书列表 95
4.5 资源 96
4.6 小结 96
第5 章 Intent 97
5.1 Android Intent 基础知识 97
5.2 Android 中可用的Intent 98
5.3 Intent 的组成 100
5.3.1 Intent 和数据URI 100
5.3.2 一般操作 101
5.3.3 使用extra 信息 102
5.3.4 使用组件直接调用活动 103
5.3.5 Intent 类别 104
5.3.6 将Intent 解析为组件的规则 106
5.4 练习使用ACTION_PICK 108
5.5 练习使用GET_CONTENT 操作 110
5.6 挂起的Intent 111
5.7 资源 112
5.8 小结 113
第6 章 构建用户界面和使用控件 114
6.1 Android 中的UI 开发 114
6.1.1 完全利用代码来构建UI 115
6.1.2 完全使用XML 构建UI 117
6.1.3 使用XML 结合代码构建UI 118
6.2 Android 中的常见控件 120
6.2.1 文本控件 120
6.2.2 按钮控件 123
6.2.3 ImageView 控件 131
6.2.4 日期和时间控件 132
6.2.5 MapView 控件 134
6.3 适配器 134
6.3.1 SimpleCursorAdapter 135
6.3.2 了解ArrayAdapter 136
6.4 结合使用适配器和AdapterView 138
6.4.1 基本的列表控件:ListView 138
6.4.2 GridView 控件 145
6.4.3 Spinner 控件 146
6.4.4 Gallery 控件 148
6.4.5 创建自定义适配器 148
6.4.6 Android 中的其他控件 153
6.5 样式和主题 154
6.5.1 使用样式 154
6.5.2 使用主题 156
6.6 布局管理器 157
6.6.1 LinearLayout 布局管理器 157
6.6.2 TableLayout 布局管理器 160
6.6.3 RelativeLayout 布局管理器 163
6.6.4 FrameLayout 布局管理器 165
6.6.5 为各种设备配置自定义布局 167
6.7 使用Hierarchy Viewer 调试和优化布局 168
6.8 参考资料 171
6.9 小结 171
第7 章 使用菜单 172
7.1 Android 菜单 172
7.1.1 创建菜单 173
7.1.2 使用菜单组 174
7.2 响应菜单项 175
7.3 创建测试工具来测试菜单 176
7.4 使用其他菜单类型 182
7.4.1 展开的菜单 182
7.4.2 使用图标菜单 182
7.4.3 使用子菜单 183
7.4.4 配置系统菜单 183
7.4.5 使用上下文菜单 184
7.4.6 使用交替菜单 186
7.4.7 使用菜单响应数据变化 189
7.5 通过XML 文件加载菜单 189
7.5.1 XML 菜单资源文件的结构 189
7.5.2 填充XML 菜单资源文件 190
7.5.3 响应基于XML 的菜单项 190
7.5.4 其他XML 菜单标记简介 191
7.6 资源 192
7.7 小结 192
第8 章 使用对话框 193
8.1 使用Android 中的对话框 193
8.1.1 设计提醒对话框 193
8.1.2 设计提示对话框 195
8.1.3 Android 对话框的特性 199
8.1.4 重新设计提示对话框 200
8.2 使用托管对话框 200
8.2.1 理解托管对话框协议 201
8.2.2 将非托管对话框重新转换为托管对话框 201
8.2.3 简化托管对话框协议 202
8.3 使用Toast 209
8.4 资源 210
8.5 小结 210
第9 章 管理和组织首选项 211
9.1 探索首选项框架 211
9.1.1 ListPreference 211
9.1.2 CheckBoxPreference 219
9.1.3 EditTextPreference 220
9.1.4 RingtonePreference 222
9.2 组织首选项 223
9.3 以编程方式操作首选项 226
9.4 使用首选项保存状态 226
9.5 参考资料 227
9.6 小结 228
第10 章 探索安全性和权限 229
10.1 理解Android 安全性模型 229
10.1.1 安全性概念概述 229
10.1.2 为部署签名应用程序 230
10.2 执行运行时安全性检查 234
10.2.1 进程边界上的安全性 235
10.2.2 声明和使用权限 235
10.2.3 理解和使用自定义权限 237
10.2.4 理解和使用URI 权限 241
10.3 参考资料 243
10.4 小结 243
第11 章 构建和使用服务 244
11.1 使用HTTP 服务 244
11.1.1 将HttpClient 用于HTTPGET 请求 244
11.1.2 将HttpClient 用于HTTPPOST 请求(多部分POST
请求示例) 246
11.1.3 SOAP、JSON 和XML分析程序 248
11.1.4 处理异常 249
11.1.5 解决多线程问题 251
11.1.6 有趣的超时 253
11.1.7 使用HttpURLConnection 254
11.1.8 使用AndroidHttpClient 254
11.1.9 使用后台线程(AsyncTask) 255
11.1.10 使用AsyncTask 处理配置更改 260
11.1.11 使用DownloadManager获取文件 265
11.2 使用Android 服务 270
11.2.1 Android 中的服务 270
11.2.2 本地服务 271
11.2.3 AIDL 服务 277
11.2.4 在AIDL 中定义服务接口 278
11.2.5 实现AIDL 接口 280
11.2.6 从客户端应用程序调用服务 282
11.2.7 向服务传递复杂的类型 285
11.3 使用服务的真实示例 294
11.3.1 Google 翻译API 294
11.3.2 使用Google 翻译API 295
11.4 参考资料 303
11.5 小结 303
第12 章 包 304
12.1 包和进程 304
12.1.1 包规范的细节 304
12.1.2 将包名称转换为进程名称 304
12.1.3 列出安装的包 305
12.1.4 通过包浏览器删除包 305
12.2 包签名过程回顾 306
12.2.1 理解数字签名:场景1 306
12.2.2 理解数字签名:场景2 306
12.2.3 一种理解数字签名的模式 307
12.2.4 数字签名执行方式 307
12.2.5 签名过程的影响 307
12.3 在包之间共享数据 308
12.3.1 共享用户ID 的性质 308
12.3.2 共享数据的代码模式 309
12.4 库项目 309
12.4.1 库项目的概念 310
12.4.2 库项目的性质 310
12.4.3 创建库项目 312
12.4.4 创建使用库的Android项目 314
12.5 参考资料 320
12.6 小结 320
第13 章 处理程序 321
13.1 Android 组件和线程 321
13.1.1 活动在主线程上运行 322
13.1.2 广播接收程序在主线程上运行 322
13.1.3 服务在主线程上运行 322
13.1.4 ContentProvider 在主线程上运行 322
13.1.5 单一主线程的影响 323
13.1.6 线程池、ContentProvider、外部服务组件 323
13.1.7 线程实用程序:发现线程 323
13.2 处理程序 324
13.2.1 持有主线程的影响 325
13.2.2 使用处理程序延迟主线程上的工作 325
13.2.3 延迟工作的处理程序源代码示例 327
13.2.4 构造合适的Message 对象 327
13.2.5 将Message 对象发送给队列 328
13.2.6 响应handleMessage 回调 328
13.3 使用工作线程 328
13.3.1 从菜单调用工作线程 329
13.3.2 在工作线程与主线程之间通信 330
13.3.3 线程行为概述 332
13.4 处理程序示例驱动程序类 332
13.4.1 驱动程序活动文件 333
13.4.2 布局文件 336
13.4.3 菜单文件 336
13.4.4 描述文件 336
13.5 组件和进程寿命 337
13.5.1 活动生命周期 337
13.5.2 服务生命周期 338
13.5.3 接收程序生命周期 338
13.5.4 提供程序生命周期 339
13.6 代码编译说明 339
13.6.1 从ZIP 文件创建项目 339
13.6.2 从代码清单创建项目 340
13.7 参考资料 340
13.8 小结 341
第14 章 广播接收程序和长期运行的服务 342
14.1 广播接收程序 342
14.1.1 发送广播 342
14.1.2 编写简单的接收程序:示例代码 343
14.1.3 在描述文件中注册接收程序 344
14.1.4 发送测试广播 344
14.1.5 容纳多个接收程序 348
14.1.6 进程外接收程序项目 349
14.2 从接收程序使用通知 350
14.2.1 通过通知管理器监控通知 350
14.2.2 发送通知 352
14.3 长期运行的接收程序和服务 354
14.3.1 长期运行的广播接收程序协议 355
14.3.2 IntentService 356
14.3.3 IntentService 源代码 356
14.4 为广播接收程序扩展IntentService 358
14.4.1 长期运行的广播服务抽象 358
14.4.2 长期运行的接收程序 360
14.4.3 使用LightedGreenRoom抽象唤醒锁 362
14.5 长期运行的服务的实现 367
14.5.1 非粘滞性服务的细节 368
14.5.2 粘滞性服务的细节 368
14.5.3 非粘滞性的变体:重传送(redeliver)Intent
368
14.5.4 在onStartCommand 中指定服务标志 369
14.5.5 挑选合适的粘滞性 369
14.5.6 从两个位置控制唤醒锁 369
14.5.7 长期运行的服务的实现 369
14.5.8 测试长期运行的服务 371
14.6 代码编译说明 372
14.6.1 从ZIP 文件创建项目 372
14.6.2 通过代码清单创建项目 372
14.7 参考资料 374
14.8 小结 374
第15 章 闹钟管理器 375
15.1 闹钟管理器基本知识:设置一个简单的闹钟 375
15.1.1 获取闹钟管理器 375
15.1.2 设置闹钟时间 375
15.1.3 设置闹钟接收程序 376
15.1.4 创建适合闹钟的PendingIntent 377
15.1.5 设置闹钟 377
15.1.6 测试项目 378
15.2 探索其他闹钟管理器场景 384
15.2.1 设置重复闹钟 384
15.2.2 取消闹钟 386
15.2.3 使用多个闹钟 388
15.2.4 Intent 在设置闹钟时的首要职责 391
15.2.5 闹钟的持久化 394
15.3 闹钟管理器事实 394
15.4 参考资料 394
15.5 小结 395
第16 章 2D 动画揭秘 396
16.1 逐帧动画 396
16.1.1 计划逐帧动画 396
16.1.2 创建活动 398
16.1.3 将动画添加到活动 399
16.2 布局动画 401
16.2.1 基本的补间动画类型 402
16.2.2 计划布局动画测试工具 402
16.2.3 创建活动和ListView 403
16.2.4 将ListView 制作成动画 405
16.2.5 使用插值器 408
16.3 视图动画 409
16.3.1 理解视图动画 409
16.3.2 添加动画 412
16.3.3 使用Camera 实现2D 图像的深度效果 415
16.3.4 探索AnimationListener类 416
16.3.5 关于变换矩阵的一些说明 416
16.4 资源 417
16.5 小结 418
第17 章 地图和基于位置的服务 419
17.1 地图包 419
17.1.1 从Google 获取map-api密钥 419
17.1.2 MapView 和MapActivity 421
17.1.3 使用覆盖图添加标记 426
17.2 位置包 431
17.2.1 使用Android 进行地理编码 431
17.2.2 使用后台线程进行地理编码 434
17.2.3 LocationManager 服务 437
17.2.4 使用MyLocationOverlay显示位置 443
17.2.5 使用接近提醒 447
17.3 参考资料 451
17.4 小结 451
第18 章 电话API 452
18.1 使用SMS 452
18.1.1 发送SMS 消息 452
18.1.2 监视传入的SMS 消息 455
18.1.3 使用SMS 文件夹 457
18.1.4 发送电子邮件 459
18.2 使用电话管理器 459
18.3 SIP 462
18.4 参考资料 464
18.5 小结 464
第19 章 媒体框架 465
19.1 使用媒体API 465
19.2 播放媒体 468
19.2.1 播放音频内容 469
19.2.2 播放视频内容 478
19.3 录制媒体 481
19.3.1 使用MediaRecorder 录制音频 481
19.3.2 使用AudioRecord 录制音频 485
19.3.3 视频录制 489
19.3.4 MediaStore 类 497
19.3.5 使用Intnet 录制音频 498
19.3.6 将媒体内容添加到媒体存储 501
19.3.7 为整个SD 卡触发MediaScanner 503
19.3.8 参考资料 503
19.4 小结 503
第20 章 使用OpenGL 进行3D 图形编程 504
20.1 了解OpenGL 的历史和背景 505
20.1.1 OpenGL ES 505
20.1.2 OpenGL ES 与Java ME 506
20.1.3 M3G:另一种Java ME 3D图形标准 506
20.2 OpenGL 的基本原理 507
20.2.1 使用OpenGL ES 进行基本绘制 507
20.2.2 OpenGL 照相机和坐标 512
20.3 在Android 中使用OpenGL ES 515
20.3.1 使用GLSurfaceView 和相关类 515
20.3.2 实现Renderer 515
20.3.3 通过Activity 使用GLSurfaceView 518
20.3.4 更改照相机设置 523
20.3.5 使用索引添加另一个三角形 524
20.3.6 为简单的OpenGL 三角形制作动画 526
20.4 OpenGL 的运用:形状和纹理 528
20.4.1 绘制矩形 528
20.4.2 使用形状 530
20.4.3 使用纹理 541
20.4.4 绘制多个图形 546
20.5 OpenGL ES 2.0 548
20.5.1 针对OpenGL ES 2.0 的Java 绑定 549
20.5.2 呈现步骤 552
20.5.3 着色器 552
20.5.4 将着色器编译到程序中 553
20.5.5 访问着色器程序变量 555
20.5.6 简单的ES 2.0 三角形 555
20.5.7 关于OpenGL ES 2.0 的更多阅读材料 558
20.6 代码编译说明 559
20.7 小结 560
第21 章 活动文件夹 561
21.1 探索活动文件夹 561
21.1.1 用户如何使用活动文件夹 562
21.1.2 构建活动文件夹 565
21.2 代码编译说明 573
21.3 参考资料 573
21.4 小结 573
第22 章 主屏幕部件 575
22.1 主屏幕部件的架构 575
22.1.1 什么是主屏幕部件 575
22.1.2 主屏幕部件的用户体验 576
22.1.3 部件的生命周期 578
22.2 示例部件应用程序 582
22.2.1 定义部件提供程序 583
22.2.2 定义部件尺寸 584
22.2.3 与部件布局相关的文件 586
22.2.4 实现部件提供程序 586
22.2.5 实现部件模型 589
22.2.6 实现部件配置活动 595
22.3 部件局限性和扩展 598
22.4 资源 599
22.5 小结 599
第23 章 Android 搜索 600
23.1 Android 搜索体验 600
23.1.1 探索Android 全局搜索 601
23.1.2 为全局搜索启用建议提供程序 606
23.2 活动与搜索键交互 608
23.2.1 常规活动上的搜索键行为 609
23.2.2 禁用了搜索的活动的行为 615
23.2.3 通过菜单显式调用搜索 617
23.2.4 本地搜索和相关活动 620
23.2.5 启用键入搜索 625
23.3 实现简单建议提供程序 626
23.3.1 计划简单建议提供程序 626
23.3.2 简单建议提供程序实现文件 626
23.3.3 实现SimpleSuggestion-Provider 类 627
23.3.4 简单建议提供程序搜索活动 630
23.3.5 搜索调用方活动 634
23.3.6 简单建议提供程序用户体验 636
23.4 实现自定义建议提供程序 638
23.4.1 计划自定义建议提供程序 638
23.4.2 SuggestURLProvider 项目实现文件 639
23.4.3 实现SuggestUrlProvider类 639
23.4.4 实现自定义建议提供程序的搜索活动 647
23.4.5 自定义建议提供程序描述文件 652
23.4.6 自定义建议用户体验 653
23.5 使用操作键和应用程序特有的搜索数据 655
23.5.1 在Android 搜索中使用操作键 655
23.5.2 使用应用程序特定的搜索上下文 658
23.6 资源 659
23.7 对平板电脑的意义 659
23.8 小结 660
第24 章 文本到语音转换 661
24.1 Android 中的文本到语音转换 661
24.2 使用语段跟踪语音 665
24.3 使用音频文件代替话音 666
24.4 TTS 引擎的高级功能 672
24.4.1 设置音频流 673
24.4.2 使用耳标 673
24.4.3 播放静音 674
24.4.4 选择不同的文本到语音转换引擎 674
24.4.5 使用语言方法 674
24.5 参考资料 675
24.6 小结 676
第25 章 触摸屏 677
25.1 MotionEvent 677
25.1.1 MotionEvent 对象 677
25.1.2 回收MotionEvent 687
25.1.3 使用VelocityTracker 687
25.1.4 探索拖放操作 689
25.2 多点触摸 692
25.2.1 Android2.2 之前的多点触摸 692
25.2.2 自Android 2.2 开始的多点触摸 699
25.3 触摸地图 699
25.4 手势 702
25.4.1 捏合手势 702
25.4.2 GestureDetector 和OnGestureListener 705
25.4.3 自定义手势 707
25.4.4 Gestures Builder 应用程序 708
25.5 参考资料 713
25.6 小结 714
第26 章 传感器 715
26.1 什么是传感器 715
26.1.1 检测传感器 716
26.1.2 可以了解的传感器信息 716
26.2 获取传感器事件 718
26.3 解释传感器数据 727
26.3.1 光线传感器 727
26.3.2 接近传感器 727
26.3.3 温度传感器 727
26.3.4 压力传感器 728
26.3.5 陀螺仪传感器 728
26.3.6 加速度计 728
26.3.7 磁场传感器 733
26.3.8 结合使用加速度计和磁场传感器 734
26.3.9 方向传感器 734
26.3.10 磁偏角和GeomagneticField 740
26.3.11 重力传感器 740
26.3.12 直线加速度传感器 740
26.3.13 旋转矢量传感器 740
26.3.14 近场通信传感器 741
26.4 参考资料 749
26.5 小结 749
第27 章 联系人API 750
27.1 账户 750
27.1.1 账户屏幕概览 750
27.1.2 账户与联系人的相关性 754
27.1.3 枚举账户 754
27.2 联系人应用程序 754
27.2.1 显示联系人 755
27.2.2 显示联系人详细信息 755
27.2.3 编辑联系人详细信息 756
27.2.4 设置联系人的照片 758
27.2.5 导出联系人 758
27.2.6 各种联系人数据类型 759
27.3 联系人 760
27.3.1 内容SQLite 数据库 760
27.3.2 原始联系人 761
27.3.3 数据表 762
27.3.4 聚合联系人 763
27.3.5 view_contacts 765
27.3.6 contact_entities_view 765
27.4 联系人API 766
27.4.1 浏览账户 766
27.4.2 浏览聚合联系人 773
27.4.3 浏览原始联系人 781
27.4.4 浏览原始联系人数据 785
27.4.5 添加联系人和它的详细信息 788
27.5 控制聚合 790
27.6 同步的影响 791
27.7 参考资料 792
27.8 小结 792
第28 章 使用Android Market 793
28.1 成为发布者 793
28.1.1 遵守规则 794
28.1.2 开发人员控制台 795
28.2 准备销售应用程序 798
28.2.1 针对不同设备进行测试 798
28.2.2 支持不同的屏幕尺寸 798
28.2.3 准备上传AndroidManifest.xml 799
28.2.4 本地化应用程序 800
28.2.5 准备应用程序图标 800
28.2.6 付费应用程序考虑因素 801
28.2.7 将用户引导至Market 801
28.2.8 Android 授权服务 802
28.2.9 准备上传.apk 文件 802
28.3 上传应用程序 803
28.4 Android Market 上的用户体验 805
28.5 更多发布途径 806
28.6 参考资料 807
28.7 小结 807
第29 章 多用途的碎片 808
29.1 什么是碎片 808
29.1.1 何时使用碎片 809
29.1.2 碎片的结构 809
29.1.3 碎片的生命周期 810
29.1.4 展示生命周期的示例碎片应用程序 814
29.2 FragmentTransactions 和碎片后退栈 821
29.3 FragmentManager 823
29.3.1 引用碎片时的注意事项 824
29.3.2 ListFragments 和<fragment> 824
29.3.3 在需要时调用独立的活动 828
29.3.4 碎片的持久化 830
29.4 对话框碎片 831
29.4.1 DialogFragment 基础知识 831
29.4.2 DialogFragments 示例应用程序 835
29.5 碎片之间的更多通信方式 846
29.6 使用ObjectAnimator 自定义动画 847
29.7 参考资料 849
29.8 小结 850
第30 章 ActionBar 851
30.1 ActionBar 剖析 851
30.2 选项卡导航操作栏活动 852
30.2.1 实现基础活动类 853
30.2.2 为ActionBar 分配统一的行为 855
30.2.3 实现选项卡监听器 857
30.2.4 实现选项卡操作栏活动 858
30.2.5 可滚动的调试文本视图布局 860
30.2.6 操作栏和菜单交互 861
30.2.7 Android 描述文件 863
30.2.8 测试选项卡操作栏活动 863
30.3 列表导航操作栏活动 864
30.3.1 创建SpinnerAdapter 864
30.3.2 创建列表监听器 865
30.3.3 设置列表操作栏 865
30.3.4 更改BaseActionBar-Activity 866
30.3.5 更改AndroidManifest.xml 866
30.3.6 测试列表操作栏活动 867
30.4 标准导航操作栏活动 868
30.4.1 标准导航操作栏活动 868
30.4.2 更改BaseActionBar-Activity 869
30.4.3 更改AndroidManifest.xml 870
30.4.4 测试标准操作栏活动 870
30.5 参考资料 871
30.6 小结 872
第31 章 3.0 版中的更多主题 873
31.1 基于列表的主屏幕部件 873
31.1.1 3.0 版中新的远程视图 873
31.1.2 在远程视图中使用列表 875
31.1.3 应用示例:测试主屏幕列表部件 885
31.1.4 对测试列表部件进行测试 893
31.2 拖放 894
31.2.1 3.0 版中拖放的基础知识 894
31.2.2 拖放示例应用程序 895
31.2.3 测试示例拖放应用程序 905
31.3 参考资料 906
31.4 小结 907
· · · · · · (
收起)