本书从Android应用出发, 深入讲解Android Studio设计应用程序的基础知识。本书共分9章, 详细叙述了Android Studio及其开发过程, 图形用户界面设计 , 多个图形界面的程序设计, 数据存储技术, 图形与多媒体处理技术, 后台服务与网络通信, 地图服务及传感检测技术, 应用项目开发实例。本书内容涵盖了Android的流行版本和新版本的主要功能和特性, 全面介绍了Android手机编程的基本原理、技术和应用模式。
(1)易学易懂。本书面向Android系统的初学者,在叙述方式上浅显易懂,摒弃枯燥的理论,尽可能使用图示加以说明。对每一个知识点,都配了相应的例题。所有例题均短小精悍,适合课堂教学讲授。读者学完每一章内容后都可以编写出相应功能的程序。
(2)解释详细。对每一个例题,均进行了详细分析和解释,既可以帮助读者学习理解知识和概念,大大降低学习难度,又具有启发性。
(3)Java语言零基础学习。为了帮助没有Java语言基础的读者学习Android系统,特别安排了一章介绍Java基础知识的内容。
(4)配有视频教学 。书中大部分例题均录制了视频教学,详细地记录了设计的操作过程,对重点和难点问题作了详细讲解,帮助读者更加轻松、迅速地理解和掌握本书内容。
与第1版相比,第2版的最大修改之处是把开发工具Eclipse换成了Android Studio。这主要考虑Android Studio是Google公司推出的专门为Android“量身定制”的开发工具,是Google大力支持的一款基于IntelliJ IDEA改造的IDE集成开发环境,可以说它是Android开发工具的未来。
第2版删除了第1版中Java语言基础知识简介的章节,增加了访问Web服务器数据的内容。另外,由于Android Studio与Eclipse的目录结构和菜单差异很大,因此很多例题在介绍操作时做了修改。
第2版全书共分9章,第1章主要讲解Android Studio开发环境的搭建,并介绍了开发Android应用程序的步骤和应用程序框架的结构;第2~3章讲解如何使用布局和视图创建用户界面,介绍了用户图形界面的常用组件;第4章介绍图形与多媒体处理技术,介绍了绘制几何图形的基本方法、处理触摸屏事件的方法,还详细讨论了音频播放和视频播放的设计以及录音、照相技术,并详细讲解了在Android中实现动画的技术;第5章介绍后台服务与系统服务,以及系统功能调用;第6章介绍网络通信技术,介绍了Web视图以及基于TCP协议的网络程序设计、基于HTTP协议的网络程序设计等网络编程技术;第7章介绍应用Volley框架访问Web服务器,并介绍了JSON数据格式和一个网络音乐播放器设计实例;第8章介绍数据存储技术,介绍了SQLite数据库存储方式、文件存储方式和XML文件的SharedPreferences存储方式,还介绍了访问远程数据库的方法;第9章讲解地图服务与传感器检测技术,地图服务主要介绍实现地图视图的基本方法,传感器检测主要介绍重力加速度的应用。
本书提供了电子课件和所有例题的源代码,扫描每章提供的二维码可观看教学视频。
张思民
2017年5月
第1章 Android系统及其开发过程 1
1.1 Android系统概述 1
1.1.1 Android系统及特点 1
1.1.2 Android系统的体系结构 2
1.1.3 Android开发的分类 3
1.2 搭建Android Studio开发环境 4
1.2.1 安装Android Studio前的必要准备 4
1.2.2 安装Android Studio详解 5
1.2.3 设置环境变量 7
1.3 Android API和在线帮助文档 8
1.4 Android应用程序的开发过程 9
1.4.1 开发Android应用程序的一般过程 9
1.4.2 生成Android应用程序框架 10
1.4.3 编写代码生成MainActivity.java 12
1.4.4 在模拟器中运行应用程序 13
1.5 Android项目结构 13
1.5.1 目录结构 13
1.5.2 Android应用程序结构分析 19
1.6 Android应用程序设计示例 21
习题1 23
第2章 Android用户界面的设计 24
2.1 用户界面组件包widget和View类 24
2.2 文本标签TextView与按钮Button 25
2.2.1 文本标签 25
2.2.2 按钮及按钮处理事件 27
2.3 文本编辑框 32
2.4 Android布局管理 35
2.4.1 布局文件的规范与重要属性 36
2.4.2 常见的布局方式 37
2.5 进度条和选项按钮 46
2.5.1 进度条 46
2.5.2 选项按钮 48
2.6 图像显示类ImageView与画廊组件类Gallery 55
2.6.1 图像显示类ImageView 55
2.6.2 画廊组件类Gallery与图片切换器ImageSwitcher 59
2.7 消息提示类Toast 64
2.8 列表组件 67
2.8.1 列表组件类ListView 67
2.8.2 ListActivity类 69
2.9 滑动抽屉组件类SlidingDraw 72
习题2 76
第3章 多个用户界面的程序设计 78
3.1 页面的切换与传递参数值 78
3.1.1 传递参数组件Intent 78
3.1.2 Activity页面的切换 78
3.1.3 应用Intent在Activity页面之间传递数据 82
3.2 菜单设计 86
3.2.1 选项菜单 86
3.2.2 上下文菜单 89
3.3 对话框 91
3.3.1 消息对话框AlertDialog 91
3.3.2 其他几种常用对话框 96
习题3 100
第4章 图形与多媒体处理 101
4.1 绘制几何图形 101
4.1.1 几何图形绘制类 101
4.1.2 几何图形的绘制过程 102
4.1.3 自定义组件 107
4.2 触摸屏事件的处理 110
4.2.1 简单的触摸屏事件 110
4.2.2 手势识别 116
4.3 音频播放 120
4.3.1 多媒体处理包 120
4.3.2 多媒体处理播放器MediaPlayer 120
4.3.3 播放音频文件 121
4.4 视频播放 127
4.4.1 应用媒体播放器播放视频 127
4.4.2 应用视频视图播放视频 130
4.5 录音与拍照 133
4.5.1 用于录音、录像的MediaRecorder类 133
4.5.2 录音示例 134
4.5.3 拍照 137
4.6 动画技术 142
4.6.1 动画组件类 142
4.6.2 补间动画Tween Animation 143
4.6.3 属性动画Property Animation 148
习题4 152
第5章 后台服务与系统服务 153
5.1 后台服务Service 153
5.2 信息广播机制Broadcast 157
5.3 系统服务 166
5.3.1 Android的系统服务 166
5.3.2 系统通知服务Notification 167
5.3.3 系统定时服务AlarmManager 169
5.3.4 系统功能的调用 172
习题5 175
第6章 网络通信技术 176
6.1 Web视图 176
6.1.1 浏览器引擎WebKit 176
6.1.2 Web视图对象 176
6.1.3 调用JavaScript 180
6.2 基于TCP协议的网络程序设计 186
6.2.1 网络编程的基础知识 187
6.2.2 利用Socket设计客户机/服务器系统程序 191
6.2.3 应用Callable接口实现多线程Socket编程 196
6.3 基于HTTP协议网络程序设计 200
6.3.1 建立PHP服务器网站 200
6.3.2 应用HttpURLConnection访问Web服务器 200
习题6 210
第7章 应用Volley框架访问Web服务器 211
7.1 Volley框架及其应用 211
7.1.1 Volley包的下载与安装 211
7.1.2 JSON数据格式简介 212
7.1.3 Volley的工作原理和几个重要对象 216
7.1.4 Volley的基本使用方法 217
7.2 应用Volley框架设计网络音乐播放器 221
习题7 226
第8章 数据存储技术 227
8.1 SQLite数据库 227
8.1.1 SQLite数据库简介 227
8.1.2 管理和操作SQLite数据库的对象 228
8.1.3 SQLite数据库的操作命令 228
8.2 文件的处理 240
8.2.1 输入/输出流 240
8.2.2 处理文件流 241
8.3 轻量级存储SharedPreferences 248
8.4 访问远程数据库 250
习题8 255
第9章 地图服务与传感器检测技术 256
9.1 电子地图服务的应用程序开发 256
9.1.1 Android地图的SDK开发包的下载以及Key的申请 256
9.1.2 显示地图的应用程序示例 259
9.2 传感器检测技术 262
9.2.1 传感器简介 262
9.2.2 加速度传感器的应用示例 264
习题9 273
多个用户界面的程序设计
3.1 页面的切换与传递参数值
3.1.1 传递参数组件Intent
Intent是Android系统的一种运行时的绑定机制,在应用程序运行时连接两个不同组件。在Android 的应用程序中不管是页面切换还是传递数据或是调用外部程序都可能要用到Intent。Intent负责对应用中某次操作的动作、动作涉及的数据、附加数据进行描述,Android则根据此Intent的描述负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。因此可以将Intent理解为不同组件之间通信的“媒介”,其专门提供组件互相调用的相关信息。
Intent的属性有动作(Action)、数据(Data)、分类(Category)、类型(Type)、组件(Compent)以及扩展(Extra),其中最常用的是Action属性。
例如:
Intent.ACTION_MAIN 表示标识Activity为一个程序的开始。
Intent.ACTION_GET_CONTENT 表示允许用户选择图片或录音等特殊种类的数据。
Intent.ACTION_SEND 表示发送邮件的action动作。
Telephony.SMS_RECEIVED 表示接收邮件的action动作。
Intent.ACTION_ANSWER 表示处理呼入的电话。
Intent.Action_CALL_BUTTON 表示按“拨号”键。
Intent.Action_CALL 表示呼叫指定的电话号码。
3.1.2 Activity页面的切换
Activity跳转与传递参数值主要通过Intent类协助实现。在一个Activity页面中启动另一个Activity页面的运行是最简单的Activity页面切换方式。其步骤如下:
(1)创建一个Intent对象,其构造方法如下。
Intent intent = new Intent(当前Activity.this, 另一Activity.class);
(2)调用Activity的startActivity(intent)方法,切换到另一个Activity页面。
【例3-1】 从一个Activity页面启动另一个Activity页面示例。
创建名称为ex3_1的新项目,包名为com.ex3_1。在本项目中要建立两个页面文件及两个控制文件,第1个页面的界面布局文件为activity_main.xml、控制文件为MainActivity.java,第2个页面的界面布局文件为second.xml、控制文件为secondActivity.java,还要修改配置文件AndroidManifest.xml。
(1)设计第1个页面。
① 修改第1个页面的控制文件MainActivity.java,源代码如下:
1 package com.ex3_1;
2 import android.app.Activity;
3 import android.content.Intent;
4 import android.os.Bundle;
5 import android.view.View;
6 import android.view.View.OnClickListener;
7 import android.widget.Button;
8 public class MainActivity extends Activity
9 {
10 private Button btn;
11 @Override
12 public void onCreate(Bundle savedInstanceState)
13 {
14 super.onCreate(savedInstanceState);
15 setContentView(R.layout.activity_main);
16 btn = (Button)findViewById(R.id.mButton);
17 btn.setOnClickListener(new btnclock());
18 }
19 class btnclock implements OnClickListener
20 {
21 public void onClick(View v)
22 {
23 Intent intent = new Intent(MainActivity.this, secondActivity.class);
24 //创建好Intent之后就可以通过它启动新的Activity
25 startActivity(intent);
26 }
27 }
28 }
② 第1个页面的布局文件activity_main.xml如下:
1
2 3 android:layout_width="fill_parent"
4 android:layout_height="fill_parent"
5 android:orientation="vertical" >
6 7 android:id="@+id/textView1"
8 android:layout_width="fill_parent"
9 android:layout_height="wrap_content"
10 android:text="@string/hello" />
11 12 android:id="@+id/mButton"
13 android:layout_width="wrap_content"
14 android:layout_height="wrap_content"
15 android:text="@string/button"
16 />
17
(2)设计第2个页面。
① 在项目中新建第2个页面的控制文件secondActivity.java。右击资源管理器中的com.example.ex3_1选项,在弹出的快捷菜单中选择New(新建)→File(文件)命令,如图3.1所示。
……