第1章 Android应用程序基础 2
1.1 四大组件 2
1.1.1 Activity 2
1.1.2 Service 4
1.1.3 Broadcast receiver 4
1.1.4 Content providers 5
1.2 Intent与IntentFilter 13
1.2.1 Intent 13
1.2.2 Intent解析 16
1.2.3 Note Pad例子 20
1.3 Manifest文件 24
1.4 Activity与任务 26
1.4.1 关系(affinity)和新任务 27
1.4.2 启动模式 28
1.4.3 栈的清除 29
1.4.4 任务的启动 29
1.5 进程与线程 30
1.5.1 进程 30
1.5.2 线程 32
1.5.3 远程调用 33
1.6 组件生命周期 36
1.6.1 活动(Activity)生命周期 36
1.6.2 服务生命周期 40
1.6.3 广播接收者的生命周期 41
第2章 Android之HelloWorld 42
2.1 安装Android SDK与ADT插件 42
2.2 建立第一个Android项目 44
2.2.1 在Eclipse中新建工程 44
2.2.2 为应用添砖加瓦 46
2.2.3 使用模拟器 48
2.2.4 使用真机进行开发 52
2.3 开发Android程序常用的调试手段 52
2.4 使用测试用例 57
2.4.1 测试API简介 58
2.4.2 Activity测试 62
2.4.3 ContentProvider测试 65
2.4.4 Service测试 66
2.5 测试HelloWorld工程 67
2.5.1 创建测试工程 67
2.5.2 创建测试用例类 69
2.5.3 运行测试用例并查看结果 71
2.6 Android SDK提供的一些工具 72
2.7 精彩案例:应用更新模块 73
第3章 认识可爱的UI 80
3.1 UI概览 80
3.2 丰富的布局 83
3.2.1 FrameLayout 83
3.2.2 LinearLayout 84
3.2.3 AbsoluteLayout 86
3.2.4 RelativeLayout 86
3.2.5 TableLayout 87
3.3 创建菜单 88
3.3.1 通过xml文件声明菜单项 89
3.3.2 为Menu填充资源 89
3.3.3 增加item选择事件监听 90
3.3.4 为菜单增加Checkbox(复选框)和radio(单选框) 90
3.3.5 为Menu增加快捷键 91
3.4 处理UI事件 91
3.4.1 事件监听器 91
3.4.2 事件处理器 93
3.5 Dialog介绍 93
3.5.1 AlertDialog 93
3.5.2 ProgressDialog 98
3.5.3 DatePickerDialog 100
3.5.4 TimePickerDialog 101
3.5.5 自定义Dialog 101
3.6 提醒用户 103
3.6.1 Toast提醒 103
3.6.2 状态栏提醒 105
3.7 主题与样式 110
3.8 自定义组件 112
3.8.1 完全自定义组件 113
3.8.2 复合控件 117
3.8.3 修改已存在的View类型 118
3.9 AdapterView与数据绑定 119
3.9.1 为AdapterView填充数据 119
3.9.2 处理用户选择事件 120
3.10 精彩案例:SurfaceView的使用 120
第4章 应用资源 126
4.1 应用资源类型 126
4.1.1 动画资源 126
4.1.2 颜色状态列表 132
4.1.3 Drawable资源 134
4.1.4 布局资源 151
4.1.5 菜单资源 153
4.1.6 字符串资源 156
4.1.7 style资源 159
4.2 为应用提供资源 160
4.2.1 组织资源类型 160
4.2.2 提供可替换的资源 162
4.2.3 最佳兼容性 165
4.2.4 Android如何找到最匹配的资源 166
4.3 访问应用资源 167
4.3.1 在代码中访问资源 168
4.3.2 在XML文件中访问资源 169
4.3.3 访问平台资源 170
4.4 处理运行时配置改变 170
4.4.1 在配置改变期间维护一个对象 170
4.4.2 自行处理配置的改变 171
4.5 精彩案例:本地化 172
第5章 数据存储 175
5.1 使用Shared Preferences 175
5.2 内部存储器 177
5.3 外部存储器 181
5.4 使用数据库 183
5.4.1 创建数据库 183
5.4.2 对数据库进行操作 184
5.4.3 SQLite事务操作 187
5.4.4 数据库在NotePad例子中的应用 188
5.5 网络存储 192
5.6 精彩案例:文件浏览器 197
第6章 蓝牙 205
6.1 基础API 205
6.2 设置蓝牙 206
6.3 寻找设备 208
6.4 建立连接 210
6.5 管理连接 215
6.6 精彩案例:BluetoothChat讲解 216
第7章 Android与Internet 229
7.1 以GET方式发送HTTP请求 229
7.2 以Post方式发送HTTP请求 233
7.3 WebView 237
7.4 把网络图片设置为桌面壁纸 242
7.5 小巧练歌器 246
7.5.1 MediaPlayer 246
7.5.2 范例原理 249
7.6 精彩案例:网络apk安装器 257
第8章 Android搜索框架 267
8.1 使用搜索框 267
8.1.1 基本知识 268
8.1.2 创建搜索配置 268
8.1.3 创建搜索Activity 269
8.1.4 使用搜索框 271
8.1.5 增加语音搜索 273
8.2 增加最近搜索建议 274
8.2.1 基础知识 274
8.2.2 创建提供搜索建议的内容提供者 275
8.2.3 修改搜索配置 276
8.2.4 保存查询文本 276
8.2.5 实例 277
8.3 增加自定义的搜索建议 282
8.3.1 基础知识 282
8.3.2 创建内容提供者 283
8.3.3 为建议声明Intent 285
8.4 搜索配置 287
8.5 精彩案例:词典应用 290
第9章 安全和权限 299
9.1 应用程序签名 299
9.2 用户ID和文件访问 303
9.3 使用权限 304
9.4 声明和实施权限 304
9.4.1 在清单文件里声明权限 304
9.4.2 在清单文件里实施权限 306
9.5 URI权限 309
9.6 精彩案例:使用URI权限 309
第10章 应用小部件 316
10.1 基础知识 316
10.1.1 增加AppWidgetProviderInfo元数据 317
10.1.2 创建应用小部件布局 318
10.1.3 使用AppWidgetProvider类 320
10.1.4 创建应用小部件配置Activity 322
10.2 精彩案例:我的应用小部件 323
10.2.1 AppWidgetProvider子类 324
10.2.2 广播接收者MyBroadcastReceiver 327
10.2.3 笑话内容显示Activity 328
10.2.4 AppWidgetProviderInfo配置文件 328
第11章 Android常用程序开发11.1 应用开场动画 330
11.2 制作自己的开机程序 333
11.3 自制拨号器 336
11.4 短信的发送与接收 342
11.5 查看自己的SIM卡属于哪个运营商 348
11.6 神奇的传感器 351
11.7 制作九宫图 354
11.8 动态更改屏幕朝向 356
11.9 铃声音量调节器 358
11.10 PreferenceActivity的使用 362
11.11 JNI编程 365
第12章 Google位置服务 373
12.1 获取用户位置 373
12.1.1 确定用户位置面临的挑战 373
12.1.2 请求位置更新 374
12.1.3 定义一个最佳性能模式 375
12.1.4 常见的应用案例 378
12.1.5 提供模拟位置数据 379
12.2 谷歌地图(Google Maps)外部库 381
12.2.1 获得Maps API Key 382
12.2.2 创建Google Map工程 384
12.2.3 显示地图 385
12.2.4 显示缩放视图 387
12.2.5 改变地图视图 388
12.2.6 显示一个特定位置 388
12.2.7 增加标记 390
12.2.8 获取触摸位置 392
12.2.9 地理编码与反向地理编码 394
12.3 精彩案例:超市促销 395
第13章 最佳实践 409
13.1 避免内存泄露 409
13.2 屏幕朝向改变提速 411
13.3 布局技巧之一——创建高效的布局 413
13.4 布局技巧之二——使用ViewStubs 417
13.5 布局技巧之三——合并布局 419
13.6 Android多任务 424
13.7 轻松使用线程 426
13.8 跟踪内存的分配 428
第14章 共享APK 432
14.1 应用程序原理 432
14.2 为应用增加广告 441
第15章 拷贝和粘贴Copy and Paste15.1 剪切板框架概述 443
15.1.1 剪切板类 444
15.1.2 强制转换剪切板中的数据为文本 445
15.1.3 复制数据到剪贴板 446
15.1.4 粘贴来自剪切板的数据 447
15.2 使用内容提供者拷贝复杂类型数据 450
15.2.1 在URI上编码标识符 450
15.2.2 拷贝数据结构 451
15.2.3 拷贝数据流 453
15.2.4 设计有效的复制粘贴功能 454
附录A Android中解析XML 455
A.1 准备工作 455
A.2 SAX解析 456
A.3 DOM解析 460
A.4 Pull解析 461
附录B 组件 467
B.1 文本框TextView介绍与应用 467
B.2 编辑框EditView介绍与应用 469
B.3 按钮Button介绍与应用 470
B.4 图片视图ImageView介绍与应用 471
B.5 图片按钮ImageButton介绍与应用 472
B.6 网格视图GridView的介绍与应用 474
B.7 循环图片集Gallary介绍与应用 477
B.8 选项卡TabWidget介绍与应用 479
B.9 自动完成文本框AutoCompleteTextView介绍与应用 483
B.10 拖动条SeekBar介绍与应用 484
B.11 图片切换ImageSwitcher介绍与应用 486
B.12 小结 487
附录C 开发调试 488
C.1 DDMS介绍 488
C.1.1 Logcat介绍 488
C.1.2 Devices介绍 489
C.1.3 Emulator Control介绍 490
C.1.4 File Explorer介绍 491
C.1.5 Allocation Track介绍 491
C.2 Android JUnit单元测试 491
C.3 如何调试项目 493
C.4 小结 494