第1章 Android开发技术基础 1
1.1 智能手机操作系统介绍 1
1.2 Android的巨大优势 2
1.2.1 系出名门 2
1.2.2 强大的开发团队 2
1.2.3 Android系统开源 2
第2章 搭建Android应用开发环境 3
2.1 安装Android SDK的系统要求 3
2.2 安装JDK 3
2.3 安装Eclipse和Android SDK 6
2.3.1 获取并安装Eclipse和 Android SDK 6
2.3.2 快速安装SDK 8
2.4 安装ADT 8
2.5 验证设置 10
2.5.1 设定Android SDK Home 10
2.5.2 验证开发环境 10
2.5.3 创建Android虚拟设备(AVD) 11
2.6 启动AVD模拟器 12
2.6.1 模拟器和真机究竟有何区别 13
2.6.2 启动AVD模拟器的基本流程 13
第3章 获取并编译源码 14
3.1 在Linux系统获取Android源码 14
3.2 在Windows 平台获取Android源码 15
3.3 分析Android源码结构 17
3.3.1 应用程序 18
3.3.2 应用程序框架 19
3.3.3 系统服务 20
3.3.4 系统程序库 22
3.3.5 系统运行库 24
3.3.6 硬件抽象层 25
3.4 编译源码 26
3.4.1 搭建编译环境 26
3.4.2 开始编译 26
3.4.3 在模拟器中运行 28
3.4.4 常见的错误分析 28
3.4.5 实践演练——演示两种编译Android程序的方法 29
3.5 编译Android Kernel 32
3.5.1 获取Goldfish内核代码 32
3.5.2 获取MSM内核代码 34
3.5.3 获取OMAP内核代码 35
3.5.4 编译Android的Linux内核 35
3.6 编译源码生成SDK 36
第4章 Android技术核心框架分析 40
4.1 分析Android的系统架构 40
4.1.1 Android体系结构介绍 40
4.1.2 Android应用工程文件组成 42
4.2 Android的五大组件 45
4.2.1 Activity界面组件 45
4.2.2 Intent切换组件 45
4.2.3 Service服务组件 45
4.2.4 用Broadcast/Receiver广播机制组件 46
4.2.5 ContentProvider存储组件 46
4.3 进程和线程 46
4.3.1 什么是进程 47
4.3.2 什么是线程 47
4.3.3 应用程序的生命周期 47
4.4 Android和Linux的关系 49
4.4.1 Android继承于Linux 50
4.4.2 Android和Linux内核的区别 50
4.5 第一段Android程序 52
4.5.1 新建Android工程 52
4.5.2 调试程序 54
4.5.3 运行程序 54
第5章 Android传感器系统分析 56
5.1 Android传感器系统概述 56
5.2 分析Java层 57
5.3 分析Frameworks层 62
5.3.1 监听传感器的变化 62
5.3.2 注册监听 62
5.4 分析JNI层 71
5.4.1 分析android hardware SensorManager.cpp 72
5.4.2 处理客户端数据 75
5.4.3 处理服务端数据 77
5.4.4 封装HAL层的代码 87
5.4.5 消息队列处理 91
5.5 分析HAL层 94
第6章 Android传感器系统概览 102
6.1 Android设备的传感器系统 102
6.1.1 包含的传感器 102
6.1.2 检测当前设备支持的传感器 103
6.2 使用SensorSimulator 105
6.3 查看传感器的相关信息 107
第7章 地图定位 120
7.1 位置服务 120
7.1.1 android.1ocation功能类 120
7.1.2 实现定位服务功能 121
7.1.3 实战演练——在Android设备中实现GPS定位 123
7.2 及时更新位置信息 125
7.2.1 Maps库类 125
7.2.2 使用LocationManager及时监听 126
7.2.3 实战演练——在Android设备中显示当前位置的坐标和海拔 127
7.3 在Android设备中使用地图 134
7.3.1 准备工作 134
7.3.2 使用Map API密钥的基本流程 135
7.3.3 实战演练——在Android设备中使用谷歌地图实现定位 137
7.4 在Android设备中实现地址查询 141
7.5 在Android设备中实现路径导航 144
第8章 光线传感器详解 149
8.1 光线传感器基础 149
8.1.1 光线传感器介绍 149
8.1.2 在Android中使用光线传感器的方法 150
8.2 实战演练——获取设备中光线传感器的值 151
8.3 实战演练——显示设备中光线传感器的强度 152
8.4 实战演练——显示设备名称和光线强度 154
8.5 实战演练——智能楼宇灯光控制系统 155
8.5.1 布局文件 156
8.5.2 实现程序文件 166
第9章 接近警报传感器详解 190
9.1 类Geocoder详解 190
9.1.1 类Geocoder基础 190
9.1.2 公共构造器 190
9.1.3 公共方法 190
9.1.4 Geocoder的主要功能 192
9.1.5 地理编码和地理反编码 193
9.2 实战演练——在设备地图中快速查询某个位置 195
9.3 实战演练——接近某个位置时实现自动提醒 197
第10章 磁场传感器详解 207
10.1 磁场传感器基础 207
10.1.1 什么是磁场传感器 207
10.1.2 磁场传感器的分类 207
10.2 Android系统中的磁场传感器 208
10.3 实战演练——获取磁场传感器的3个分量 209
10.4 实战演练——演示常用传感器的基本用法 210
10.4.1 实现布局文件 210
10.4.2 实现程序文件 210
第11章 加速度传感器详解 217
11.1 加速度传感器基础 217
11.1.1 加速度传感器的分类 217
11.1.2 加速度传感器的主要应用领域 218
11.2 Android系统中的加速度传感器 219
11.2.1 实战演练——获取x、y、z轴的加速度值 220
11.2.2 实战演练——实现控件的抖动效果 222
11.2.3 实战演练——实现仿微信“摇一摇”效果 224
11.3 线性加速度传感器详解 229
11.3.1 线性加速度传感器的原理 229
11.3.2 实战演练——测试小球的运动 230
第12章 方向传感器详解 235
12.1 方向传感器基础 235
12.1.1 方向传感器必备知 235
12.1.2 Android中的方向传感器 236
12.2 实战演练——测试当前设备的3个方向值 236
12.2.1 实现布局文件 236
12.2.2 实现主程序文件 237
12.3 实战演练——开发一个指南针程序 238
12.3.1 实现布局文件 238
12.3.2 实现程序文件 238
12.4 开发一个具有定位功能的指南针 240
12.4.1 实现布局文件 240
12.4.2 实现程序文件 242
第13章 陀螺仪传感器详解 251
13.1 陀螺仪传感器基础 251
13.2 Android中的陀螺仪传感器 252
13.2.1 陀螺仪传感器和加速度传感器的对比 252
13.2.2 智能设备中的陀螺仪传感器 252
13.3 实战演练——联合使用互补滤波器和陀螺仪传感器 254
13.3.1 实现布局文件 255
13.3.2 实现主Activity文件 260
13.3.3 实现均值滤波器 266
13.3.4 测量各个平面的值 267
13.3.5 传感器处理 278
第14章 旋转向量传感器详解 290
14.1 Android中的旋转向量传感器 290
14.2 实战演练——确定设备当前的具体方向 291
14.2.1 实现主Activity 291
14.2.2 获取设备的旋转向量 298
第15章 距离传感器详解 301
15.1 距离传感器基础 301
15.1.1 距离传感器介绍 301
15.1.2 Android系统中的距离传感器 302
15.2 实战演练——使用距离传感器实现自动锁屏功能 303
15.3 实战演练——根据设备的距离实现自动锁屏功能 308
15.4 实战演练——绘制运动曲线 310
15.4.1 实现布局文件 310
15.4.2 实现Activity程序文件 312
15.4.3 实现监听事件处理 316
15.5 实战演练——开发一个健身计步器 319
15.5.1 系统功能模块介绍 319
15.5.2 系统主界面 319
15.5.3 系统设置模块 329
第16章 气压传感器详解 347
16.1 气压传感器基础 347
16.1.1 什么是气压传感器 347
16.1.2 气压传感器在智能手机中的应用 347
16.2 实战演练——开发一个Android气压计系统 348
16.2.1 编写插件调用文件 348
16.2.2 编写Cordova插件文件 349
16.2.3 定义每个时间点的压力值 351
16.2.4 监听传感器传来的和存储的新压力值 351
16.3 实战演练——获取当前相对海拔和绝对海拔的数据 355
16.3.1 实现布局文件 355
16.3.2 实现主Activity 357
第17章 温度传感器详解 364
17.1 温度传感器基础 364
17.2 Android系统中的温度传感器 364
17.3 实战演练——让Android设备变为温度计 366
17.3.1 实现布局文件 367
17.3.2 检测温度传感器的温度变化 367
17.4 实战演练——电池温度测试仪 368
17.4.1 实现布局文件 368
17.4.2 实现程序文件 369
17.5 实战演练——测试温度、湿度、光照和压力 377
17.5.1 实现Arduino文件 377
17.5.2 实现Android APP 385
第18章 湿度传感器详解 388
18.1 湿度传感器基础 388
18.2 Android系统中的湿度传感器 389
18.3 实战演练——获取远程湿度传感器的数据 389
18.3.1 编写布局文件 390
18.3.2 监听用户触摸单击屏幕控件事件并处理 391
18.3.3 设置远程湿度传感器的初始URL地址 393
18.4 实战演练——开发一个湿度测试仪 394
18.4.1 实现主界面 394
18.4.2 设置具体值 397
18.4.3 显示当前的值 401
18.4.4 保存当前数值 404
18.4.5 图形化显示测试结果 405
18.4.6 湿度跟踪器 414
第19章 Android蓝牙系统概述 416
19.1 蓝牙概述 416
19.1.1 蓝牙技术的发展历程 416
19.1.2 蓝牙的特点 416
19.2 Android系统中的蓝牙模块 416
19.3 分析蓝牙模块的源码 418
19.3.1 初始化蓝牙芯片 418
19.3.2 蓝牙服务 418
19.3.3 管理蓝牙电源 419
19.4 和蓝牙相关的类 419
19.4.1 BluetoothSocket类 419
19.4.2 BluetoothServerSocket类 421
19.4.3 BluetoothAdapter类 421
19.4.4 BluetoothClass.Service类 428
19.4.5 BluetoothClass.Device类 428
19.5 在Android平台开发蓝牙应用程序 429
19.6 实战演练——开发一个控制玩具车的蓝牙遥控器 432
19.7 实战演练——开发一个蓝牙控制器 438
19.7.1 界面布局 439
19.7.2 响应单击按钮 440
19.7.3 和指定的服务器建立连接 441
19.7.4 搜索附近的蓝牙设备 442
19.7.5 建立和OBEX服务器的数据传输 443
19.7.6 实现蓝牙服务器端的数据处理 446
第20章 低功耗蓝牙技术详解 448
20.1 短距离无线通信技术概览 448
20.1.1 ZigBee——低功耗、自组网 448
20.1.2 Wi-Fi——大带宽支持家庭互联 449
20.1.3 蓝牙——4.0进入低功耗时代 449
20.1.4 NFC——近场通信 449
20.2 蓝牙4.0 BLE基础 450
20.2.1 蓝牙4.0的优势 450
20.2.2 Bluetooth 4.0 BLE推动了智能设备的兴起 451
20.3 低功耗蓝牙基础 452
20.3.1 低功耗蓝牙的架构 452
20.3.2 低功耗蓝牙分类 452
20.3.3 集成方式 453
20.3.4 低功耗蓝牙的特点 454
20.3.5 BLE和传统蓝牙BR/EDR技术的对比 454
20.4 监牙规范 455
20.4.1 Bluetooth系统中的常用规范 455
20.4.2 蓝牙协议体系结构 456
20.4.3 低功耗(BLE)蓝牙协议 457
20.4.4 现有的基于GATT的协议/服务 457
20.4.5 双模协议栈 458
20.4.6 单模协议栈 458
20.5 低功耗蓝牙协议栈详解 459
20.5.1 蓝牙协议栈基础 459
20.5.2 蓝牙协议体系中的协议 460
20.5.3 Android的低功耗蓝牙协议栈 461
20.6 TI公司的低功耗蓝牙 462
20.6.1 获取TI公司的低功耗蓝牙协议栈 462
20.6.2 分析TI公司的低功耗蓝牙协议栈 463
20.7 使用蓝牙控制电风扇 469
20.7.1 准备DHT传感器 469
20.7.2 实现Android测试APP 473
第21章 语音识别技术详解 479
21.1 语音识别技术基础 479
21.1.1 语音识别的发展历史 479
21.1.2 技术发展历程 480
21.2 Text-To-Speech技术详解 480
21.2.1 Text-To-Speech基础 480
21.2.2 Text-To-Speech的实现流程 481
21.2.3 实战演练——使用Text-To-Speech技术实现语音识别 483
21.3 Voice Recognition技术详解 484
21.3.1 Voice Recognition技术基础 484
21.3.2 实战演练——使用Voice Recognition技术实现语音识别 486
21.4 实战演练——开发一个语音识别系统 489
21.4.1 验证是否支持所需要的语言 489
21.4.2 实现TTS的初始化工作 489
21.4.3 开启语言检查功能 491
21.4.4 跟踪语言数据的安装状况 492
21.4.5 转换语言并处理结果 493
21.4.6 实现语音阅读测试 495
21.4.7 保证系统可以实现正确的语音识别 499
21.4.8 显示语音识别的结果 501
21.4.9 处理回调 502
第22章 手势识别技术详解 508
22.1 手势识别技术基础 508
22.1.1 类GestureDetector基础 508
22.1.2 使用类GestureDetector 509
22.1.3 手势识别处理事件和方法 511
22.2 实战演练——通过触摸方式移动图片 512
22.2.1 实例说明 512
22.2.2 具体实现 512
22.3 实战演练——实现各种手势识别 515
22.4 实战演练——实现手势拖动和缩放图片效果 517
22.4.1 实现布局文件 518
22.4.2 监听用户选择的设置选项 518
22.4.3 获取并设置移动位置和缩放值 519
22.4.4 在不同的缩放状态下绘制图像视图 520
22.4.5 根据监听到的手势实现图片缩放 522
第23章 NFC近场通信技术详解 524
23.1 近场通信技术基础 524
23.1.1 NFC技术的特点 524
23.1.2 NFC的工作模式 524
23.1.3 NFC和蓝牙的对比 525
23.2 射频识别技术详解 525
23.2.1 RFID技术简介 526
23.2.2 RFID技术的组成 526
23.2.3 RFID技术的特点 526
23.2.4 RFID技术的工作原理 527
23.3 Android系统中的NFC 528
23.3.1 分析Java层 528
23.3.2 分析JNI部分 548
23.3.3 分析底层 556
23.4 编写NFC程序 556
23.4.1 在Android系统编写NFC APP的方法 556
23.4.2 实战演练——使用NFC发送消息 558
23.4.3 实战演练——使用NFC读写Mifare Tag 562
第24章 拍照解析条形码技术详解 566
24.1 Android拍照系统介绍 566
24.1.1 分析拍照系统的底层程序 568
24.1.2 分析拍照系统的硬件抽象层 574
24.1.3 分析拍照系统的Java部分 577
24.2 开发拍照应用程序 582
24.2.1 通过Intent调用系统的照相机Activity 583
24.2.2 调用Camera API拍照 583
24.2.3 总结Camera拍照的流程 584
24.2.4 实战演练——获取系统现有相机拍摄的图片 586
24.2.5 实战演练——使用Camera预览并拍照 590
24.2.6 实战演练——使用Camera API方式拍照 594
24.3 使用拍照方式解析二维码 596
24.3.1 QR Code码的特点 596
24.3.2 实战演练——使用Android相机解析二维码 597
第25章 麦克风音频录制技术详解 604
25.1 使用MediaRecorder接口录制音频 604
25.1.1 类MediaRecorder详解 604
25.1.2 实战演练——使用MediaRecorder录制音频 605
25.2 使用AudioRecord接口录制音频 609
25.2.1 AudioRecord的常量 609
25.2.2 AudioRecord的构造函数 610
25.2.3 AudioRecord的公共方法 610
25.2.4 AudioRecord的受保护方法 612
25.2.5 实战演练——使用AudioRecord录制音频 612
25.3 实战演练——麦克风录音综合实例 614
25.3.1 获取录音源的最大振幅 614
25.3.2 实现异步音频录制功能 616
25.3.3 监听是否超越最大值 618
25.3.4 录制音频 618
25.3.5 巨响检测 621
25.3.6 检测一致性频率 622
第26章 基于图像处理的人脸识别技术详解 624
26.1 二维图形处理详解 624
26.1.1 类Graphics基础 624
26.1.2 实战演练——使用Graphics类 624
26.1.3 实战演练——使用Color类和Paint类实现绘图处理 626
26.2 二维动画处理详解 628
26.2.1 类Drawable详解 628
26.2.2 实现Tween Animation动画 629
26.2.3 实战演练——实现Tween动画效果 630
26.2.4 实战演练——使用Tween Animation实现Tween动画效果 631
26.2.5 实现Frame Animation动画效果 632
26.2.6 实战演练——播放GIF动画 633
26.3 Android人脸识别技术详解 634
26.3.1 分析人脸识别模块的源码 634
26.3.2 实战演练——使用内置模块实现人脸识别 635
26.3.3 实战演练——实现人脸识别 636
26.3.4 实战演练——从照片中取出人脸 640
第27章 行走轨迹记录器 642
27.1 系统功能模块介绍 642
27.2 系统主界面 642
27.2.1 布局文件 642
27.2.2 实现主Activity 645
27.3 系统设置 658
27.3.1 选项设置 659
27.3.2 生成GPX文件和KML文件 661
27.4 邮件分享提醒 665
27.4.1 基本邮箱设置 665
27.4.2 实现邮件发送功能 668
27.5 上传OSM地图 671
27.5.1 授权提示布局文件 671
27.5.2 实现文件上传 673
第28章 手势音乐播放器 675
28.1 系统功能模块介绍 675
28.2 系统主界面 675
28.3 系统列表界面 678
28.3.1 布局文件 678
28.3.2 程序文件 680
28.4 实现公共类 691
28.4.1 核心公共类Jamendo Application 691
28.4.2 缓存图片资源 694
28.4.3 类RequestCache 694
28.5 手势操作 695
28.5.1 Android提供的手势操作API 695
28.5.2 使用命令模式构建手势识别系统 698
28.5.3 实现抽象命令角色 Command 698
28.5.4 实现具体命令角色ConcreteCommand 698
28.5.5 实现命令接收者角色Receiver 699
28.5.6 实现调用者角色Invoker 700
28.5.7 实现装配者角色Client 701
28.6 播放处理 701
28.6.1 设计播放界面 702
28.6.2 分析播放流程 702
第29章 智能家居系统 710
29.1 需求分析 710
29.1.1 背景介绍 710
29.1.2 传感技术的推动 710
29.1.3 Android与智能家居的紧密联系 711
29.2 系统功能模块介绍 711
29.3 系统主界面 711
29.3.1 实现布局文件 711
29.3.2 实现程序文件 712
29.4 系统设置 714
29.4.1 总体配置 714
29.4.2 系统总体配置 714
29.4.3 构建数据库 719
29.5 电器控制模块 721
29.5.1 电器控制主界面 721
29.5.2 温度控制界面 723
29.5.3 电灯控制界面 724
29.6 预案管理模块 727
29.6.1 天气情况 727
29.6.2 历史数据 735
29.6.3 系统设置 737