第1篇 基础知识篇 2
第1章 Android应用开发基础 2
1.1 移动智能设备系统发展现状 2
1.1.1 智能手机和移动智能设备 2
1.1.2 主流系统的发展现状 3
1.2 Android系统的诞生和发展现状 5
1.2.1 Android系统的发展历程 6
1.2.2 Android系统的发展现状 7
1.2.3 常见的Android设备 7
1.2.4 Android系统的巨大优势 9
1.3 搭建Android应用开发环境 10
1.3.1 安装Android SDK的系统要求 11
1.3.2 安装JDK 11
1.3.3 获取并安装Eclipse和Android SDK 14
1.3.4 安装ADT 17
1.3.5 设定Android SDK Home 19
1.3.6 验证开发环境 20
1.3.7 创建Android虚拟设备(AVD) 21
1.3.8 启动AVD模拟器 23
1.4 第一个Android应用程序 24
1.4.1 使用Eclipse新建Android工程 24
1.4.2 编写代码和代码分析 25
1.4.3 调试程序 26
1.4.4 运行项目 27
1.4.5 导入一个既有项目 28
第2章 Android应用开发技术必备 30
2.1 Android系统架构 30
2.1.1 最底层的操作系统层(OS)——C/C++实现 30
2.1.2 Android的硬件抽象层——C/C++实现 31
2.1.3 各种库(Libraries)和Android运行环境(RunTime)——中间层 32
2.1.4 应用程序(Application)——Java实现 32
2.1.5 应用程序框架(Application Framework) 33
2.2 Android应用程序文件组成 33
2.2.1 src目录 33
2.2.2 设置文件AndroidManfest.xml 34
2.2.3 gen目录中的R.java和BuildConfig.java 35
2.2.4 res目录 36
2.2.5 assets目录 37
2.3 Android的5大组件 37
2.3.1 Activity组件——表现屏幕界面 37
2.3.2 Intent组件——实现界面切换 37
2.3.3 Service组件——后台服务 38
2.3.4 Broadcast/Receiver组件——实现广播机制 38
2.3.5 Content Provider组件——实现数据存储 39
2.4 Android应用程序的生命周期 39
2.4.1 什么是进程 39
2.4.2 什么是线程 40
2.4.3 Android应用程序的生命周期 40
2.5 Android和Linux的关系 42
2.5.1 Android继承于Linux 42
2.5.2 Android和Linux内核的区别 42
第2篇 核心技术篇 46
第3章 UI界面布局 46
3.1 View视图组件 46
3.1.1 View的常用属性和方法 46
3.1.2 Viewgroup容器 47
3.1.3 ViewManager类 47
3.2 Android UI布局的方式 48
3.2.1 使用XML布局 48
3.2.2 在Java代码中控制布局 48
3.3 Android布局管理器详解 50
3.3.1 Android布局管理器概述 50
3.3.2 线性布局LinearLayout 52
3.3.3 相对布局RelativeLayout 53
3.3.4 帧布局FrameLayout 55
3.3.5 表格布局TableLayout 55
3.3.6 绝对布局AbsoluteLayout 56
3.3.7 网格布局GridLayout 57
3.3.8 实战演练——演示各种基本布局控件的用法 58
第4章 核心组件介绍 66
4.1 Widget组件 66
4.1.1 创建一个Widget组件 66
4.1.2 使用按钮Button 68
4.1.3 使用文本框TextView 69
4.1.4 使用编辑框EditText 76
4.1.5 使用多项选择控件CheckBox 77
4.1.6 使用单项选择控件RadioGroup 79
4.1.7 使用下拉列表控件Spinner 80
4.1.8 使用自动完成文本控件AutoCompleteTextView 83
4.1.9 使用日期选择器控件DatePicker 85
4.1.10 使用时间选择器控件TimePicker 86
4.1.11 联合应用DatePicker和TimePicker 87
4.1.12 使用滚动视图控件ScrollView 91
4.1.13 使用进度条控件ProgressBar 91
4.1.14 使用拖动条控件SeekBar 93
4.1.15 使用评分组件RatingBar 94
4.1.16 使用图片视图控件ImageView 95
4.1.17 使用切换图片控件ImageSwitcher和Gallery 96
4.1.18 使用网格视图控件GridView 98
4.1.19 使用标签控件Tab 100
4.2 使用MENU友好界面 102
4.2.1 MENU基础 102
4.2.2 实战演练——使用MENU控件 102
4.3 使用列表控件ListView 105
4.3.1 通过ArrayAdapter接收一个数组或通过List作为参数来构建 105
4.3.2 实战演练——使用SimpleAdapter实现ListView列表功能 105
4.4 使用对话框控件 108
4.4.1 对话框基础 108
4.4.2 实战演练——在屏幕中使用对话框显示问候语 109
4.5 使用Toast和Notification提醒控件 114
4.5.1 Toast和Notification基础 115
4.5.2 练习Toast和Notification 116
4.6 自定义控件 123
第5章 Android事件处理 129
5.1 基于监听的事件处理 129
5.1.1 监听处理模型中的3种对象 129
5.1.2 Android系统中的监听事件 132
5.1.3 实现事件监听器的方法 132
5.2 基于回调的事件处理 140
5.2.1 Android事件侦听器的回调方法 140
5.2.2 基于回调的事件传播 142
5.2.3 重写onTouchEvent方法响应触摸屏事件 145
5.3 响应的系统设置的事件 146
5.3.1 Configuration类详解 147
5.3.2 重写onConfigurationChanged响应系统设置更改 149
5.4 Handler消息传递机制 152
第6章 Activity界面表现详解 157
6.1 Activity基础 157
6.1.1 Activity的状态及状态间的转换 157
6.1.2 Activity栈 158
6.1.3 Activity的生命周期 159
6.2 操作Activity 163
6.2.1 使用LauncherActivity类 163
6.2.2 使用ExpandableListActivity类 165
6.2.3 使用PreferenceActivity和PreferenceFragment 167
6.2.4 配置Activity 171
6.2.5 启动、关闭Activity 172
6.2.6 Activity数据交换 176
6.2.7 启动其他Activity 181
6.3 Activity的加载模式 186
6.3.1 standard加载模式 187
6.3.2 singleTop加载模式 188
6.3.3 singleTask加载模式 188
6.3.4 singleInstance加载模式 188
6.4 使用Fragment 190
6.4.1 Fragment基础 190
6.4.2 创建Fragment 194
第7章 Intent和IntentFilter详解 201
7.1 Intent和IntentFilter基础 201
7.1.1 Intent启动不同组件的方法 201
7.1.2 Intent的构成 202
7.1.3 Intent的基本用法 202
7.2 显式Intent和隐式Intent 205
7.2.1 显式Intent(Explicit Intent)的基本用法 206
7.2.2 隐式Intent(Implicit Intent) 209
7.3 IntentFilter详解 210
7.3.1 IntentFilter基础 210
7.3.2 IntentFilter响应隐式Intent 211
7.3.3 Android解析IntentFilter 213
7.4 Intent的属性 213
7.4.1 Component属性 213
7.4.2 Action属性 216
7.4.3 Category属性 219
7.4.4 Data属性和Type属性 222
7.4.5 Extra属性 225
7.4.6 Flag属性 225
7.5 Intent和Activity 226
7.5.1 显式启动新的Activity 226
7.5.2 隐式Intent和运行时绑定 226
7.5.3 Activity的返回值 227
7.5.4 Android本地动作 229
7.6 使用Intent广播一个事件 229
7.6.1 广播事件 230
7.6.2 BroadcastReceiver监听广播 230
7.6.3 Android本地广播 231
7.7 拨打电话 232
7.8 发送短信 234
第8章 Service和BroadcastReceiver 237
8.1 Service详解 237
8.1.1 Service基础 237
8.1.2 Service的生命周期 237
8.1.3 Service的策略 239
8.1.4 创建Service 240
8.1.5 使用Service 243
8.1.6 与远程Service通信 244
8.1.7 Service的访问权限 245
8.1.8 简单使用Service实例 245
8.1.9 提高Service优先级 250
8.1.10 Service综合实例 250
8.2 AIDL Service服务 253
8.2.1 AIDL基础 253
8.2.2 将接口暴露给客户端 256
8.2.3 客户端访问AIDL Service 258
8.3 BroadcastReceiver详解 261
8.3.1 BroadcastReceiver基础 261
8.3.2 Receiver的生命周期 262
8.3.3 基本操作 262
8.4 短信处理和电话处理 266
8.4.1 SmsManager类介绍 266
8.4.2 TelephonyManager类介绍 268
8.4.3 实战演练——监听短信是否发送成功 271
第9章 应用资源管理机制详解 275
9.1 Android的资源类型 275
9.2 如何使用资源 276
9.2.1 在Java代码中使用资源清单项 276
9.2.2 在Java代码中访问实际资源 277
9.2.3 在XML代码中使用资源 277
9.3 \res\values目录 278
9.3.1 定义颜色值 278
9.3.2 字符串资源 278
9.3.3 颜色资源文件 279
9.3.4 尺寸资源文件 279
9.3.5 数组资源 280
9.3.6 使用字符串、颜色和尺寸资源 280
9.3.7 使用数组资源 284
9.4 Drawable(图片)资源 287
9.4.1 使用StateListDrawable资源 287
9.4.2 使用LayerDrawable资源 288
9.4.3 使用ShapeDrawable资源 289
9.4.4 使用ClipDrawable资源 290
9.4.5 使用AnimationDrawable资源 290
9.5 使用属性动画(Property Animation)资源 291
9.6 使用原始的XML资源 292
9.7 样式资源和主题资源 295
9.7.1 使用样式资源 295
9.7.2 使用主题资源文件 297
9.8 使用属性资源 298
9.9 使用声音资源 301
9.1 使用布局资源和菜单资源 303
9.11 国际化 304
第10章 数据存储 307
10.1 5种存储方式 307
10.2 SharedPreferences存储 307
10.2.1 SharedPreferences简介 308
10.2.2 使用SharedPreferences存储数据 308
10.3 文件存储 310
10.4 最常用的SQLite 313
10.4.1 SQLite基础 313
10.4.2 SQLite数据类型 314
10.4.3 SQLiteDatabase介绍 315
10.4.4 SQLiteOpenHelper介绍 319
10.4.5 实战演练——使用SQLite操作数据 319
10.5 ContentProvider存储 325
10.5.1 ContentProvider介绍 325
10.5.2 使用ContentProvider 326
10.6 网络存储 328
第3篇 多媒体应用篇 332
第11章 二维图像处理 332
11.1 SurfaceFlinger渲染管理器 332
11.1.1 SurfaceFlinger基础 332
11.1.2 Surface和Canvas 334
11.2 Skia渲染引擎详解 335
11.2.1 Skia基础 335
11.2.2 Android中的Skia 335
11.2.3 使用Skia绘图 336
11.2.4 Skia的其他功能 337
11.3 Android绘图基础 338
11.3.1 使用Canvas画布 339
11.3.2 使用Paint类 341
11.3.3 位图操作类Bitmap 344
11.4 使用其他的绘图类 349
11.4.1 使用设置文本颜色类Color 349
11.4.2 使用矩形类Rect和RectF 351
11.4.3 非矢量图形拉伸类NinePatch 355
11.4.4 使用变换处理类Matrix 355
11.4.5 使用BitmapFactory类 359
11.4.6 使用Region类 361
11.4.7 使用Typeface类 363
第12章 二维动画应用 364
12.1 使用Drawable实现动画效果 364
12.1.1 Drawable基础 364
12.1.2 使用Drawable实现动画效果 365
12.2 Tween Animation动画详解 366
12.2.1 Tween动画基础 366
12.2.2 Tween动画类详解 370
12.2.3 Tween应用实战 373
12.3 实现Frame Animation动画效果 375
12.3.1 Frame动画基础 376
12.3.2 使用Frame动画 376
12.4 Property Animation动画 378
12.4.1 Property Animation(属性)动画基础 378
12.4.2 使用Property Animation 380
12.5 实现动画效果的其他方法 384
12.5.1 播放GIF动画 384
12.5.2 实现EditText动画特效 386
第13章 开发音频应用程序 388
13.1 音频应用接口类介绍 388
13.2 AudioManager类 389
13.2.1 AudioManager基础 389
13.2.2 AudioManager基本应用——设置短信提示铃声 391
13.3 录音处理 395
13.3.1 使用MediaRecorder接口录制音频 395
13.3.2 使用AudioRecorder接口录制音频 397
13.4 播放音频 399
13.4.1 使用AudioTrack播放音频 399
13.4.2 使用MediaPlayer播放音频 400
13.4.3 使用SoundPool播放音频 402
13.4.4 使用Ringtone播放铃声 402
13.4.5 使用JetPlayer播放音频 403
13.4.6 使用AudioEffect处理音效 404
13.5 语音识别技术 406
13.5.1 Text-To-Speech技术 406
13.5.2 谷歌的Voice Recognition技术 410
13.6 实现振动功能 412
13.7 设置闹钟 413
13.7.1 AlarmManager基础 413
13.7.2 开发一个闹钟程序 414
第14章 开发视频应用程序 420
14.1 使用MediaPlayer播放视频 420
14.2 使用VideoView播放视频 427
14.2.1 VideoView基础 428
14.2.2 使用VideoView播放手机中的影片 429
14.3 使用Camera拍照 432
14.3.1 Camera基础 432
14.3.2 使用Camera预览并拍照 434
14.3.3 使用Camera API方式拍照 440
第15章 OpenGL ES 3.1 三维处理 443
15.1 OpenGL ES基础 443
15.1.1 OpenGL ES 3.1 介绍 443
15.1.2 Android全面支持OpenGL ES 3.1 444
15.2 OpenGL ES的基本应用 444
15.2.1 使用点线法绘制三角形 444
15.2.2 使用索引法绘制三角形 449
15.3 实现投影效果 454
15.3.1 正交投影 454
15.3.2 透视投影 455
15.3.3 正交投影和透视投影的区别 455
15.4 实现光照效果 455
15.4.1 光源的类型 455
15.4.2 光源的颜色 456
15.5 实现纹理映射 457
15.5.1 纹理贴图和纹理拉伸 457
15.5.2 Texture Filter纹理过滤 458
15.6 绘制一个圆柱体 459
15.7 实现坐标变换 467
15.7.1 坐标变换基础 467
15.7.2 实现缩放变换 468
15.7.3 实现平移变换 468
15.8 使用Alpha混合技术 468
15.9 实现摄像机和雾特效功能 470
15.9.1 摄像机基础 470
15.9.2 雾特效基础 470
第4篇 网络应用篇 474
第16章 HTTP数据通信 474
16.1 HTTP基础 474
16.1.1 HTTP概述 474
16.1.2 HTTP协议的功能 475
16.1.3 Android中的HTTP 475
16.1.4 使用Apache接口 476
16.1.5 实战演练——在手机屏幕中传递HTTP参数 476
16.2 URL和URLConnection 480
16.2.1 URL类详解 481
16.2.2 实战演练——从网络中下载图片作为屏幕背景 482
16.3 HTTPURLConnection详解 486
16.3.1 HttpURLConnection的主要用法 486
16.3.2 实战演练——在Android手机屏幕中显示网络中的图片 488
第17章 处理XML数据 491
17.1 XML技术基础 491
17.1.1 XML的概述 491
17.1.2 XML的语法 492
17.1.3 获取XML文档 492
17.2 使用SAX解析XML数据 494
17.2.1 SAX的原理 494
17.2.2 基于对象和基于事件的接口 495
17.2.3 常用的接口和类 496
17.2.4 实战演练——在Android系统中使用SAX解析XML数据 499
17.3 使用DOM解析XML 501
17.3.1 DOM概述 501
17.3.2 DOM的结构 502
17.3.3 实战演练——在Android系统中使用DOM解析XML数据 504
17.4 PULL解析技术 506
17.4.1 PULL解析原理 506
17.4.2 实战演练——在Android系统中使用PULL解析XML数据 506
第18章 下载、上传数据 510
18.1 下载网络中的图片数据 510
18.2 下载网络中的JSON数据 511
18.2.1 JSON基础 511
18.2.2 实战演练——远程下载服务器中的JSON数据 512
18.3 实战演练——下载并播放网络中的MP3 517
18.4 使用GET方式上传数据 524
18.5 使用POST方式上传数据 528
第19章 使用Socket实现数据通信 533
19.1 Socket编程初步 533
19.1.1 TCP/IP协议基础 533
19.1.2 UDP协议 534
19.1.3 基于Socket的Java网络编程 534
19.2 TCP编程详解 535
19.2.1 使用ServletSocket 536
19.2.2 使用Socket 536
19.2.3 TCP中的多线程 537
19.2.4 实现非阻塞Socket通信 537
19.3 UDP编程 539
19.3.1 使用DatagramSocket 539
19.3.2 使用MulticastSocket 540
19.4 在Android中使用Socket实现数据传输 541
第20章 使用WebKit浏览网页数据 545
20.1 WebKit源码分析 545
20.1.1 Java层框架 545
20.1.2 C/C++层框架 550
20.2 分析WebKit的操作过程 552
20.2.1 WebKit初始化 552
20.2.2 载入数据 554
20.2.3 刷新绘制 554
20.3 WebView详解 555
20.3.1 WebView介绍 555
20.3.2 实战演练——在手机屏幕中浏览网页 556
20.3.3 实战演练——加载一个指定的HTML程序 558
20.3.4 实战演练——使用WebView加载JavaScript程序 560
第21章 GPS地图定位 564
21.1 位置服务 564
21.1.1 类location详解 564
21.1.2 实战演练——在Android设备中实现GPS定位 565
21.2 随时更新位置信息 567
21.2.1 库Maps中的类 567
21.2.2 使用LocationManager监听位置 567
21.2.3 实战演练——监听当前设备的坐标和海拔 568
21.3 在Android设备中使用地图 576
21.3.1 添加Google Map密钥 576
21.3.2 使用Map API密钥 578
21.3.3 实战演练——在Android设备中使用谷歌地图实现定位 580
21.4 接近警报 585
21.4.1 类Geocoder基础 585
21.4.2 Geocoder的公共构造器和公共方法 587
第5篇 知识进阶篇 590
第22章 Android传感器应用开发详解 590
22.1 Android传感器系统概述 590
22.2 Android传感器应用开发基础 590
22.2.1 查看包含的传感器 591
22.2.2 模拟器测试工具——SensorSimulator 592
22.2.3 实战演练——检测当前设备支持的传感器 595
22.3 使用光线传感器 596
22.3.1 光线传感器介绍 597
22.3.2 使用光线传感器的方法 598
22.4 使用磁场传感器 598
22.4.1 什么是磁场传感器 599
22.4.2 Android系统中的磁场传感器 599
22.5 使用加速度传感器 599
22.5.1 加速度传感器的分类 600
22.5.2 Android系统中的加速度传感器 600
22.6 使用方向传感器 601
22.6.1 方向传感器基础 601
22.6.2 Android中的方向传感器 602
22.7 使用陀螺仪传感器 603
22.7.1 陀螺仪传感器基础 603
22.7.2 Android中的陀螺仪传感器 604
22.8 使用旋转向量传感器 605
22.9 使用距离传感器详解 606
22.9.1 距离传感器介绍 606
22.9.2 Android系统中的距离传感器 606
22.10 使用气压传感器 608
22.10.1 气压传感器基础 608
22.10.2 气压传感器在智能手机中的应用 609
22.11 温度传感器详解 609
22.11.1 温度传感器介绍 609
22.11.2 Android系统中的温度传感器 610
22.12 使用湿度传感器 612
第23章 近距离通信应用详解 614
23.1 近距离无线通信技术概览 614
23.1.1 ZigBee——低功耗、自组网 614
23.1.2 WiFi——大带宽支持家庭互联 614
23.1.3 蓝牙——4.0进入低功耗时代 615
23.1.4 NFC——必将逐渐远离历史舞台 615
23.2 低功耗蓝牙基础 616
23.2.1 低功耗蓝牙的架构 616
23.2.2 低功耗蓝牙分类 617
23.2.3 可穿戴设备的兴起 617
23.3 和蓝牙相关的类 618
23.3.1 BluetoothSocket类 618
23.3.2 BluetoothServerSocket类 620
23.3.3 BluetoothAdapter类 620
23.3.4 BluetoothClass.Service类 626
23.3.5 BluetoothClass.Device类 627
23.4 使用近场通信技术 627
23.4.1 NFC技术的特点 627
23.4.2 NFC的工作模式 628
23.4.3 NFC和蓝牙的对比 628
23.4.4 Android系统中的NFC 629
23.4.5 实战演练——使用NFC发送消息 630
第24章 手势识别实战 635
24.1 手势识别技术介绍 635
24.1.1 手势识别类GestureDetector 635
24.1.2 手势检测器类GestureDetector 636
24.1.3 手势识别处理事件和方法 638
24.2 实战演练——通过点击的方式移动图片 639
24.3 实战演练——实现各种手势识别 642
24.3.1 布局文件main.xml 642
24.3.2 隐藏屏幕项部的电池等图标和标题内容 643
24.3.3 监听触摸屏幕中的各种常用手势 643
24.3.4 根据监听到的用户手势创建视图 645
24.4 实战演练——实现手势翻页效果 646
24.4.1 布局文件main.xml 646
24.4.2 监听手势 647
第25章 Google Now和Android Wear详解 652
25.1 Google Now介绍 652
25.1.1 搜索引擎的升级——Google Now 652
25.1.2 Google Now的用法 653
25.2 Android Wear详解 654
25.2.1 什么是Android Wear 654
25.2.2 搭建Android Wear开发环境 655
25.3 开发Android Wear程序 659
25.3.1 创建通知 659
25.3.2 创建声音 661
25.3.3 给通知添加页面 664
25.3.4 通知堆 664
25.3.5 通知语法介绍 665
25.4 实战演练——开发一个Android Wear程序 666
第26章 Android应用优化详解 674
26.1 用户体验是产品成功的关键 674
26.1.1 什么是用户体验 674
26.1.2 影响用户体验的因素 675
26.1.3 用户体验设计目标 675
26.2 Android优化概述 676
26.3 UI布局优化 676
26.3.1 〈merge/〉标签在UI界面中的优化作用 677
26.3.2 遵循Android Layout优化的两段通用代码 679
26.3.3 优化Bitmap图片 680
26.3.4 FrameLayout布局优化 682
26.3.5 使用Android提供的优化工具 687
26.4 优化Android代码 696
26.4.1 优化Java代码 697
26.4.2 编写更高效的Android代码 703
第27章 为Android开发网页 717
27.1 准备工作 717
27.1.1 搭建开发环境 717
27.1.2 实战演练——编写一个适用于Android系统的网页 719
27.1.3 控制页面的缩放 723
27.2 添加Android的CSS 723
27.2.1 编写基本的样式 723
27.2.2 添加视觉效果 725
27.3 添加JavaScript 726
27.3.1 jQuery框架介绍 726
27.3.2 具体实践 727
27.4 使用AJAX 729
27.4.1 AJAX介绍 729
27.4.2 实战演练——在Android系统中开发一个AJAX网页 729
27.5 让网页动起来 735
27.5.1 一个开源框架——JQTouch 735
27.5.2 实战演练——在Android系统中使用JQTouch框架开发网页 735
27.6 使用PhoneGap 742
27.6.1 PhoneGap介绍 742
27.6.2 搭建PhoneGap开发环境 743
27.6.3 创建基于PhoneGap的HelloWorld程序 744
第28章 编写安全的应用程序 751
28.1 Android安全机制概述 751
28.1.1 Android的安全机制模型 752
28.1.2 Android具有的权限 752
28.1.3 Android的组件模型(Component Model) 753
28.1.4 Android安全访问设置 753
28.2 声明不同的权限 754
28.2.1 AndroidManifest.xml文件基础 754
28.2.2 声明获取不同的权限 755
28.2.3 自定义一个权限 759
28.3 发布Android程序生成APK 759
28.3.1 什么是APK文件 759
28.3.2 申请会员 760
28.3.3 生成签名文件 763
28.3.4 使用签名文件 768
28.3.5 发布到市场 770