O'Reilly精品图书系列 Android应用开发实战(原书第2版)
作者: (美)伊恩F. 达尔文(Ian F. Darwin) 著 胡训强,夏红梅,张文娟 译
出版时间: 2018年版
内容简介
本书内容来自于Android社区数十位一线优秀开发者,涵盖Android应用程序开发的方方面面,从GUI、图形图像、多媒体、数据持久化到各种通信方式、常用传感器等等内容无所不包,甚至还囊括了应用程序测试、国际化和面向非Java程序员的编程方式等内容,以及自然应用程序开发环境的搭建和程序的发布。无论你打算使用什么IDE,准备开发什么样的项目,都能从本书中找到适合自己的内容。每一节都是先提出问题,即本节内容所面向的程序应用背景,然后提出总体解决思路,最后再按步实施、解决问题,便于你参考解决实际开发问题。
本书对Android程序员在日常开发中容易混淆、迷茫、犯错、走弯路的种种问题做了深入解析,并给出了230多个经过测试的实用技巧,既能成为Android开发新手的入门指南,又能作为有经验开发者的案头工具书。
目录
目录
前言 1
第1章 入门 9
1.1 理解Android应用程序体系结构 9
1.2 理解Android Activity的生命周期 11
1.3 了解Android发行版本 13
1.4 学习Java语言 15
1.5 从命令行创建“Hello World”应用程序 16
1.6 用Apache Maven创建“Hello World”应用程序 20
1.7 为Android开发选择集成开发环境(IDE) 22
1.8 安装Android Studio 26
1.9 安装Platform Editions并保持SDK更新 28
1.10 用Android Studio创建“Hello World”应用程序 31
1.11 将Eclipse ADT项目转换成Android Studio项目 37
1.12 从Eclipse向Android Studio转换时保留历史记录 40
1.13 用Eclipse和Android Studio共同构建Android应用程序 42
1.14 安装带有AndMore的Eclipse(代替ADT) 44
1.15 用Eclipse创建“Hello World”应用程序 51
1.16 在Eclipse中安装Eclipse Marketplace Client 56
1.17 将项目从Eclipse ADT升级到Eclipse AndMore 59
1.18 用命令行ADB控制模拟器/设备 62
1.19 共享其他Eclipse项目中的Java类 64
1.20 引用库实现外围功能 66
1.21 通过兼容库在老设备上使用新功能 70
1.22 应用SDK示例帮助避免让人头疼的问题 72
1.23 从模拟器/Android设备上截图/截取视频 73
1.24 程序:一个简单的定时器示例 78
1.25 程序:Tipster, Android操作系统上的小费计算器 82
第2章 设计成功的应用程序 98
2.1 异常处理 101
2.2 运行时请求Android访问权限 104
2.3 以“单例”模式访问Android的Application对象 106
2.4 在用户旋转设备时保持数据 109
2.5 监控Android设备上的电池电量 111
2.6 在Android中创建闪屏 112
2.7 设计面向会议/野营/黑客马拉松/公共机构的应用程序 116
2.8 在Android应用程序中使用Google的分析工具 118
2.9 进行首次运行的偏好设置 120
2.10 格式化数字 122
2.11 用正确的复数形式进行格式化 126
2.12 格式化时间和日期进行显示 128
2.13 用Java 8的java.time API简化日期/时间计算 131
2.14 用键盘监听器控制输入 133
2.15 备份Android应用程序数据 136
2.16 用提示(Hint)代替工具小贴士 142
第3章 应用程序测试 144
3.1 针对测试设置Android虚拟设备 145
3.2 在大量设备上进行云测试 151
3.3 用Eclipse和JUnit进行测试 152
3.4 用Android Studio和JUnit进行测试 154
3.5 用Robolectric和JUnit 4进行测试 159
3.6 用ATSL、Espresso和JUnit 4进行测试 161
3.7 排查应用程序崩溃原因 165
3.8 用Log.d( )和LogCat进行调试 168
3.9 用Crash Reporting自动获取崩溃报告 169
3.10 针对现场错误或情况使用本地运行时应用程序日志 172
3.11 为测试重现Activity生命周期场景 176
3.12 利用严苛模式让应用程序保持简洁 180
3.13 用Android Lint进行静态代码测试 181
3.14 用Monkey程序进行动态测试 183
3.15 在AVD之间发送文本消息和通话 185
第4章 进程间/进程内通信 187
4.1 用Intent打开网页、电话号码本或其他应用程序 187
4.2 从视图中用电子邮件发送文本 189
4.3 发送带有附件的电子邮件 192
4.4 用Intent.putExtra( )发送字符串值 194
4.5 从子Activity向主Activity发回数据 195
4.6 当其他应用程序在屏幕上显示的同时让后台服务保持运行 198
4.7 发送/接收广播消息 200
4.8 在设备重启后启动服务 201
4.9 使用线程创建高可响应的应用程序 202
4.10 使用AsyncTask进行后台处理 203
4.11 利用Activity的线程队列和Handler在线程间发送消息 210
4.12 结合Android和HTML/JavaScript创建一个万年历应用程序 211
第5章 图形 218
5.1 使用自定义字体 218
5.2 用OpenGL ES绘制旋转正方体 221
5.3 为OpenGL旋转正方体添加控制 224
5.4 手绘光滑曲线 227
5.5 用Intent拍照 232
5.6 用android.media.Camera照相 234
5.7 用Google的条形码扫描器ZXing扫描条形码和二维码 238
5.8 用AndroidPlot显示图表和图形 240
5.9 使用Inkscape借助OpenClipArt.org创建Android启动器图标 244
5.10 使用Paint.NET借助OpenClipArt.org创建Android启动器图标 248
5.11 使用九宫格文件 254
5.12 使用Android RGraph创建HTML5图表 258
5.13 添加一个简单的光栅动画 262
5.14 用拇指和食指进行缩放 265
第6章 图形用户界面 268
6.1 理解和遵循用户界面准则 269
6.2 用原质化设计赋予应用程序良好外观 270
6.3 选择布局管理器(ViewGroup)排列组件 274
6.4 通过解耦视图与模型处理配置变化 275
6.5 处理动作栏 277
6.6 向动作栏添加共享动作 281
6.7 用Fragment API构建现代UI 285
6.8 创建按钮及其单击事件监听器 289
6.9 用图像按钮增强UI设计 290
6.10 使用FloatingActionButton 291
6.11 以多种不同方式编写事件监听器 294
6.12 使用复选框和单选按钮 298
6.13 使用卡片窗口部件 302
6.14 通过Spinner类提供下拉选择器 304
6.15 处理长按/长点事件 307
6.16 用TextView和EditText显示文本域 308
6.17 用属性和TextWatcher接口限制EditText的值 309
6.18 实现AutoCompleteTextView 311
6.19 使用SQLite数据库查询填充AutoCompleteTextView 313
6.20 将文本域转换为密码域 315
6.21 将软键盘上的回车键改为“下一个” 315
6.22 在Activity中处理键盘按键事件 318
6.23 让他们看星星:使用RatingBar 319
6.24 让视图晃动 323
6.25 提供触觉反馈 325
6.26 在TabView中的各个Activity之间切换 328
6.27 创建在两个Activity之间显示的载入界面 329
6.28 为布局添加带有圆角的边框 331
6.29 在Android中检测手势 333
6.30 创建一个简单的应用程序窗口小部件 340
第7章 GUI中的警告:菜单、对话框、Toast、
Snackbar和通知 344
7.1 用Toast和Snackbar向用户发出警告 344
7.2 自定义Toast的外观 346
7.3 创建和显示菜单 348
7.4 处理菜单项的选择 349
7.5 创建子菜单 350
7.6 创建弹出式/警告对话框 352
7.7 创建时间选择器窗口部件 353
7.8 针对选择创建iPhone风格的滚轮选择器 356
7.9 创建选项卡式对话框 358
7.10 创建进度对话框 361
7.11 创建带有按钮、图像和文本的自定义对话框 362
7.12 创建可重用的“关于对话框”类 364
7.13 在状态栏中创建通知 368
第8章 其他GUI组件:列表和视图 373
8.1 用RecyclerView构建基于列表的应用程序 373
8.2 用ListView构建基于列表的应用程序 376
8.3 为ListView创建“无数据”视图 381
8.4 创建带有图像和文本的高级ListView 382
8.5 在ListView中使用分组标题 386
8.6 让ListView始终处于用户的关注点上 390
8.7 编写自定义列表适配器 391
8.8 利用SearchView在ListView中查找数据 394
8.9 处理方向变化:从ListView数据值到全局模式中的图表绘制 396
第9章 多媒体 402
9.1 播放YouTube视频 402
9.2 利用MediaRecorder录制视频 403
9.3 使用Android的人脸检测功能 406
9.4 播放音频文件 409
9.5 在没有交互的情况下播放音频 411
9.6 使用语音文本转换 412
9.7 利用文本语音转换让设备发声 414
第10章 数据持久化 416
10.1 读写内存储器和外存储器中的文件 416
10.2 获取文件和文件夹信息 421
10.3 读取应用程序自带而非文件系统中的文件 426
10.4 获取SD卡的存储空间信息 427
10.5 提供偏好设置Activity 428
10.6 检查共享偏好设置的一致性 433
10.7 在Android应用程序中使用SQLite数据库 435
10.8 在SQLite数据库上执行高级文本检索 438
10.9 处理SQLite中的日期 443
10.10 将非SQL数据对外暴露为SQL游标 445
10.11 用CursorLoader显示数据 448
10.12 利用JSONObject解析JSON 451
10.13 利用DOM API解析XML文档 453
10.14 利用ContentProvider存储和获取数据 455
10.15 编写一个ContentProvider 456
10.16 通过联系人内容提供器添加联系人 460
10.17 利用ContentProvider读取联系人数据 462
10.18 实现拖放 464
10.19 通过FileProvider共享文件 468
10.20 利用SyncAdapter把SQLite中的数据备份到云端 473
10.21 利用Google Firebase将数据存放到云端 482
第11章 电话应用程序 487
11.1 来电处理 487
11.2 处理去电呼叫 490
11.3 拨打电话 494
11.4 发送单段式或多段式短信 495
11.5 接收短信 498
11.6 利用模拟器控制台向模拟器发送短信 499
11.7 利用Android的TelephonyManager获取设备信息 500
第12章 网络应用程序 511
12.1 借助URLConnection利用RESTful Web服务 512
12.2 借助Volley利用RESTful Web服务 515
12.3 利用Google Cloud Messaging的“推送消息”向应用程序发出
通知消息 517
12.4 利用正则表达式从非结构化文本中提取信息 525
12.5 利用ROME解析RSS/Atom订阅内容 526
12.6 利用MD5加密纯文本 531
12.7 将文本转换为超链接 531
12.8 利用WebView访问网页 532
12.9 自定义WebView 533
12.10 编写进程间通信服务 534
第13章 游戏和动画 539
13.1 利用flixel-gdx制作Android游戏 540
13.2 利用AndEngine制作Android游戏 544
13.3 处理与时间相关的键盘输入 549
第14章 社交网络 551
14.1 利用OAUTH2对用户进行身份认证 551
14.2 利用HTTP集成社交网络 555
14.3 利用HTML或JSON加载用户的Twitter时间线 557
第15章 定位和地图应用程序 559
15.1 获取位置信息 559
15.2 在应用程序内获取GPS信息 561
15.3 在设备上模拟GPS坐标 563
15.4 使用地理编码和逆向地理编码 565
15.5 为使用Google Maps API V2进行开发做好准备 566
15.6 使用Google Maps API V2 571
15.7 利用OpenStreetMap显示地图数据 576
15.8 利用OpenStreetMap地图创建覆盖图层 578
15.9 在OpenStreetMap地图上使用比例尺 581
15.10 在OpenStreetMap覆盖图层上处理触摸事件 582
15.11 利用OpenStreetMap获取定位更新 584
第16章 加速计 588
16.1 检查传感器是否存在 588
16.2 利用加速计检测晃动 589
16.3 检测设备正面朝上还是朝下 593
16.4 读取温度传感器 594
第17章 蓝牙 595
17.1 启用蓝牙并让设备可被发现 595
17.2 连接启用了蓝牙的设备 597
17.3 接受来自蓝牙设备的连接 599
17.4 实现发现蓝牙设备的功能 600
第18章 系统和设备控制 602
18.1 获取手机的网络/连接信息 602
18.2 从应用程序清单文件中获取信息 603
18.3 将来电通知改为静音、振动或普通铃声 604
18.4 复制文本并从剪切板中获取文本 606
18.5 使用基于LED的通知 606
18.6 让设备振动 607
18.7 确定指定的应用程序是否正在运行 608
第19章 世上并非只有Java:其他编程语言和框架 609
19.1 了解跨平台解决方案 610
19.2 在应用程序中执行Shell命令 611
19.3 利用JNI在NDK上运行原生C/C++代码 613
19.4 Android脚本编程层SL4A入门 618
19.5 在SL4A中创建警告消息 620
19.6 利用SL4A获取Google文档并在ListView中显示 624
19.7 在二维码中共享SL4A脚本 626
19.8 通过JavaScript在WebView中使用原生的手机功能 628
19.9 利用Xamarin构建跨平台应用程序 630
19.10 利用PhoneGap/Cordova构建跨平台应用程序 634
第20章 世上并非只有英语:字符串和国际化 639
20.1 国际化应用程序中的文本 640
20.2 查找和翻译字符串 643
20.3 处理strings.xml中的细微差别 644
第21章 打包、部署及发布/出售应用程序 650
21.1 创建签名证书并用其对应用程序签名 650
21.2 通过Google Play应用商店发布应用程序 653
21.3 通过其他应用商店发布应用程序 655
21.4 利用AdMob让你的应用程序赚钱 656
21.5 利用ProGuard进行混淆和优化 662
21.6 让应用程序驻留在你自己的服务器上 664
21.7 创建“自行更新”的应用程序 666
21.8 为Google Play应用商店中其他已发布的应用程序提供链接 668