基 础 篇 第1章 开篇综述 3   1.1 Kotlin语言简介 3     1.1.1 Kotlin语言设计目标 3     1.1.2 Kotlin语言特点 3   1.2 Android移动操作系统概述 4     1.2.1 Android历史介绍 4     1.2.2 Android架构 5     1.2.3 Android平台介绍 6   1.3 本章总结 7 第2章 Kotlin语言基础 8   2.1 Kotlin语言学习环境的搭建 8   2.2 JDK 8     2.2.1 JDK的下载和安装 8     2.2.2 设置环境变量 9   2.3 IntelliJ IDEA开发工具 11     2.3.1 创建第一个IntelliJ IDEA项目 12     2.3.2 编写Kotlin源代码文件 14     2.3.3 运行程序 15   2.4 变量与常量 16   2.5 Kotlin数据类型 17     2.5.1 基本数据类型 17     2.5.2 可空类型 18   2.6 字符串 21     2.6.1 字符串表示形式 21     2.6.2 字符串模板 22   2.7 Kotlin中的函数 23     2.7.1 函数声明 23     2.7.2 使用命名参数调用函数 24     2.7.3 参数默认值 24     2.7.4 表达式函数体 25   2.8 Kotlin函数式编程 25     2.8.1 函数类型 26     2.8.2 Lambda表达式 26   2.9 Kotlin面向对象编程 28     2.9.1 类声明 28     2.9.2 构造函数 29     2.9.3 属性 30   2.10 数据类 32   2.11 嵌套类 32 2.11.1 声明嵌套类 32 2.11.2 内部类 34 2.11.3 对象表达式 35   2.12 抽象类与接口 37 2.12.1 抽象类声明及实现 37 2.12.2 接口声明及实现 39   2.13 数据容器 40 2.13.1 数组 41 2.13.2 set集合 44 2.13.3 List集合 48 2.13.4 Map集合 51   2.14 本章总结 55 第3章 Android开发环境的搭建 56   3.1 下载和安装Android Studio 56   3.2 安装Android SDK 57     3.2.1 配置Android SDK环境变量 58     3.2.2 变更Android SDK的安装路径 59   3.3 创建Android模拟器 60   3.4 本章总结 62 第4章 第一个Android应用程序 63   4.1 通过Android Studio工具创建项目 63   4.2 Android项目剖析 65     4.2.1 Android项目目录结构 65     4.2.2 活动文件MainActivity.kt 65     4.2.3 activity_main.xml布局文件 66     4.2.4 AndroidManifest.xml文件 66   4.3 运行项目 67   4.4 学会使用Android开发者社区帮助文档 68     4.4.1 在线帮助文档 68     4.4.2 Android SDK API文档 68     4.4.3 Android SDK开发指南 69   4.5 本章总结 69 界 面 篇 第5章 Android界面编程基础 73   5.1 Android界面组成 73     5.1.1 视图 73     5.1.2 视图组 73   5.2 Android应用界面构建 74     5.2.1 使用Android Studio界面设计工具 74     5.2.2 LabelButton实例:界面布局实现 74   5.3 事件处理模型 78     5.3.1 活动作为事件监听器 78     5.3.2 对象表达式作为事件监听器 80     5.3.3 Lambda表达式作为事件监听器 80   5.4 屏幕上的事件处理 81     5.4.1 触摸事件 81     5.4.2 实例:屏幕触摸事件 82     5.4.3 键盘事件 84     5.4.4 实例:改变图片的透明度 84   5.5 本章总结 86 第6章 Android界面布局 87   6.1 Android界面布局设计模式 87     6.1.1 表单布局模式 87     6.1.2 列表布局模式 88     6.1.3 网格布局模式 88   6.2 布局管理 89     6.2.1 帧布局 89     6.2.2 实例:帧布局 89     6.2.3 线性布局 91     6.2.4 线性布局实例:构建登录界面 91     6.2.5 相对布局 94     6.2.6 相对布局实例:构建查询功能界面 94     6.2.7 网格布局 96     6.2.8 网格布局实例:构建计算器界面 96     6.2.9 布局文件嵌套实例:构建登录界面 98   6.3 Android约束布局 100     实例:使用约束布局重构LabelButton界面 100   6.4 本章总结 103 第7章 Android基础控件 104   7.1 按钮 104     7.1.1 Button 104     7.1.2 ImageButton 104     7.1.3 ToggleButton 105     7.1.4 实例:ButtonSample 106   7.2 标签 107   7.3 文本框 108     7.3.1 文本框相关属性 108     7.3.2 实例:用户登录 109     7.3.3 实例:文本框输入控制 110   7.4 单选按钮 113     7.4.1 RadioButton 113     7.4.2 RadioGroup 114     7.4.3 实例:使用单选按钮 114   7.5 复选框 116     7.5.1 CheckBox 116     7.5.2 实例:使用复选框 117   7.6 进度栏 119     7.6.1 进度栏相关属性和函数 119     7.6.2 实例:水平条状进度栏 120     7.6.3 实例:圆形进度栏 124   7.7 拖动栏 125     7.7.1 SeekBar 126     7.7.2 实例:使用拖动栏 126   7.8 本章总结 128 第8章 Android高级控件 129   8.1 列表类型控件 129     8.1.1 适配器 129     8.1.2 Spinner 129     8.1.3 实例:使用Spinner进行选择 131     8.1.4 ListView 132     8.1.5 实例:使用ListView实现显示文本 133     8.1.6 实例:使用ListView实现显示文本+图片 134   8.2 Toast 138     实例:文本类型Toast 138   8.3 对话框 139     8.3.1 实例:显示文本信息对话框 139     8.3.2 实例:简单列表项对话框 141     8.3.3 实例:单选列表对话框 142     8.3.4 实例:复选列表对话框 144     8.3.5 实例:复杂布局对话框 146   8.4 操作栏和菜单 148     8.4.1 操作栏 148     8.4.2 菜单编程 149     8.4.3 实例:文本菜单 149     8.4.4 实例:操作表按钮 151   8.5 本章总结 152 第9章 活动 153   9.1 活动概述 153     9.1.1 创建活动 153     9.1.2 活动的生命周期 155     9.1.3 实例:Back和Home按钮的区别 156   9.2 多个活动之间的跳转 161     9.2.1 用户登录 161     9.2.2 启动下一个活动 162     9.2.3 参数传递 164     9.2.4 返回上一个活动 165   9.3 活动任务与返回栈 166   9.4 本章总结 167 第10章 碎片 168   10.1 界面重用问题 168   10.2 碎片技术 169   10.3 碎片的生命周期 169   10.4 使用碎片开发 171 10.4.1 碎片相关类 171 10.4.2 创建碎片 172 10.4.3 静态添加碎片到活动 173 10.4.4 动态添加碎片到活动 174 10.4.5 管理碎片事务 175 10.4.6 碎片与活动之间的通信 175   10.5 实例:比赛项目 176 10.5.1 创建两个碎片 177 10.5.2 创建MainActivity活动 181 10.5.3 点击Master碎片列表项 183 10.5.4 数据访问对象 186   10.6 本章总结 187 进 阶 篇 第11章 意图 191   11.1 意图概述 191 11.1.1 意图与目标组件间的通信 191 11.1.2 意图对象包含的内容 191   11.2 意图类型 192 11.2.1 显式意图 192 11.2.2 隐式意图 193   11.3 匹配组件 193 11.3.1 动作 194 11.3.2 数据 195 11.3.3 类别 196   11.4 实例:Android系统内置意图 197   11.5 本章总结 199 第12章 数据存储 200   12.1 Android数据存储概述 200   12.2 本地文件 200 12.2.1 沙箱目录设计 200 12.2.2 访问应用程序files目录 201 12.2.3 实例:访问本地CSV文件 201   12.3 SQLite数据库 205 12.3.1 SQLite数据类型 205 12.3.2 Android平台下管理SQLite数据库 206   12.4 SQLite数据存储实例:我的备忘录 207 12.4.1 我的备忘录App概述 207 12.4.2 数据库设计 208 12.4.3 SQLiteOpenHelper帮助类 208 12.4.4 数据查询 209 12.4.5 数据插入 213 12.4.6 数据删除 214   12.5 使用SharedPreferences 217 实例:读写SharedPreferences 217   12.6 本章总结 219 第13章 使用内容提供者共享数据 220   13.1 内容提供者概述 220   13.2 Content URI 221 13.2.1 Content URI概述 221 13.2.2 内置Content URI 222   13.3 实例:访问联系人信息 223 13.3.1 查询联系人 223 13.3.2 运行时权限 227   13.4 实例:查询联系人Email 229   13.5 实例:查询联系人电话 231   13.6 实例:访问通话记录 232   13.7 本章总结 237 第14章 Android多任务开发 238   14.1 Android中使用Kotlin协程 238 14.1.1 在项目中添加协程库 238 14.1.2 第一个Android协程程序 240   14.2 案例:协程实现计时器 241 14.2.1 主线程更新UI问题 242 14.2.2 协程解决更新UI问题 242   14.3 本章总结 243 第15章 服务 244   15.1 服务概述 244 15.1.1 创建服务 244 15.1.2 服务的分类 245   15.2 启动类型服务 246 15.2.1 启动类型服务生命周期 246 15.2.2 实例:启动类型服务 247   15.3 绑定类型服务 248 15.3.1 绑定类型服务生命周期 248 15.3.2 实例:绑定类型服务 249   15.4 本章总结 252 第16章 广播接收器 253   16.1 广播接收器概述 253   16.2 编写与注册广播接收器 253 16.2.1 编写广播接收器 253 16.2.2 注册广播接收器 254 16.2.3 实例:发送广播 255   16.3 系统广播 257 16.3.1 系统广播动作 257 16.3.2 实例:Downloader 257   16.4 通知 262 发送通知实例:NotificationSample 262   16.5 本章总结 265 第17章 多媒体开发 266   17.1 多媒体文件概述 266 17.1.1 音频文件 266 17.1.2 视频文件 267   17.2 Android音频/视频播放API 267 17.2.1 核心API——MediaPlayer类 268 17.2.2 播放状态 268   17.3 音频播放实例:MyAudioPlayer 270 17.3.1 资源音频文件播放 270 17.3.2 本地音频文件播放 274   17.4 Android音频/视频录制API 277   17.5 音频录制实例:MyAudioRecorder 278   17.6 视频播放 281 17.6.1 VideoView控件 281 17.6.2 实例:使用VideoView控件播放视频 281   17.7 本章总结 283 第18章 网络通信技术 284   18.1 网络通信技术概述 284 18.1.1 Socket通信 284 18.1.2 HTTP 284 18.1.3 HTTPS 285 18.1.4 Web服务 285 18.1.5 搭建自己的Web服务器 285   18.2 发送网络请求 287 18.2.1 使用java.net.URL 288 18.2.2 重构实例:“我的备忘录”App 291 18.2.3 使用第三方请求库OkHttp4 293 18.2.4 OkHttp4发送Post请求实例:“我的备忘录”App 293 18.2.5 实例:Downloader 295   18.3 本章总结 296 第19章 百度地图与定位服务 297   19.1 使用百度地图 297 19.1.1 获得Android签名证书中的SHA1值 297 19.1.2 搭建和配置环境 298 19.1.3 实例:显示地图 301 19.1.4 实例:设置地图状态 304 19.1.5 实例:地图覆盖物 306   19.2 定位服务 308 19.2.1 定位服务授权 308 19.2.2 位置信息提供者 309 19.2.3 管理定位服务 310 19.2.4 实例:MyLocation 311 19.2.5 测试定位服务 314   19.3 定位服务与地图结合实例:WhereAMI 317   19.4 本章总结 321 第20章 Android绘图与动画技术 322   20.1 Android 2D绘图技术 322 20.1.1 画布和画笔 322 20.1.2 实例:绘制点和线 323 20.1.3 实例:绘制矩形 324 20.1.4 实例:绘制弧线 326 20.1.5 实例:绘制位图 327   20.2 位图变换 328 20.2.1 矩阵 328 20.2.2 实例:位图变换 328   20.3 调用Android照相机获取图片 329 20.3.1 调用Android照相机 329 20.3.2 调用Android照相机实例:CameraTake 330   20.4 Android动画技术 334 20.4.1 渐变动画 334 20.4.2 实例:渐变动画 335 20.4.3 动画插值器 339 20.4.4 使用动画集 340 20.4.5 帧动画 340   20.5 本章总结 342 第21章 手机电话功能开发 343   21.1 拨打电话功能 343 21.1.1 拨打电话功能概述 343 21.1.2 实例:拨打电话 344   21.2 访问电话呼入状态功能 346 21.2.1 呼入电话状态 346 21.2.2 实例:电话黑名单(Blacklist) 347   21.3 本章总结 351 实 战 篇 第22章 项目实战——“我的备忘录”云服务版 355   22.1 应用分析与设计 355   22.2 编码实现过程 356 22.2.1 用Android Studio创建项目 356 22.2.2 查询备忘录功能 357 22.2.3 增加备忘录功能 362 22.2.4 删除备忘录功能 366   22.3 Android设备测试 368   22.4 还有“最后一公里” 369 22.4.1 添加图标 369 22.4.2 生成数字签名文件 369 22.4.3 发布打包 370      10 Android从小白到大牛(Kotlin版)    9 目 录