《Android应用开发教程 第2版》课后习题参考答案.docx
《《Android应用开发教程 第2版》课后习题参考答案.docx》由会员分享,可在线阅读,更多相关《《Android应用开发教程 第2版》课后习题参考答案.docx(15页珍藏版)》请在冰点文库上搜索。
《Android应用开发教程第2版》课后习题参考答案
《Android应用开发教程第2版》
课后习题参考答案
第一章
1.主流的Android版本有哪些,各有何特点?
Android最早的一个发布版本开始于2007年11月的Android1.0beta,其后发布了多个更新版本。
这些更新版本都在前一个版本的基础上修复了bug并且添加了前一个版本所没有的新功能。
从2009年4月开始,Android操作系统改用甜点来作为版本代号,这些版本按照大写字母的顺序来进行命名:
纸杯蛋糕(Cupcake)、甜甜圈(Donut)、闪电泡芙(Éclair)、冻酸奶(Froyo)、姜饼(Gingerbread)、蜂巢(Honeycomb)﹑冰激凌三明治(IceCreamSandwich)、雷根糖(JellyBean)、奇巧(KitKat)、棒棒糖(Lollipop)、棉花糖(Marshmallow)、牛轧糖(Nougat)、奥利奥(Oreo)、馅饼(Pie)等。
此外,Android操作系统还有两个预发布的内部版本,它们分别是铁臂阿童木(Astro)和发条机器人(Bender)。
2.Android的系统结构如何?
由里向外有如下几层:
1.LinuxKernel(Linux内核)
Android是在Linux2.6的内核基础之上运行的,提供核心系统服务:
安全、内存管理、进程管理、网络组、驱动模型。
2.AndroidRuntime(Android运行时)
内核之上是核心库和一个叫做Dalvik的JAVA虚拟机。
核心库提供了Java语言核心库中包含的大部分功能,虚拟机负责运行程序。
3.Libraries(库)
Android提供了一组C/C++库,它们为平台的不同组件所使用。
开发人员通过ApplicationFramework来使用这些库所提供的不同功能。
4.ApplicationFramework(应用程序框架)
无论Android提供的应用程序还是开发人员自己编写的应用程序,都需要使用到ApplicationFramework。
通过使用ApplicationFramework,不仅可以大幅度简化代码的编写,而且提高了程序的复用性。
5.Application(应用程序)
Android提供了一组应用程序,包括Email客户端、SMS程序、日历、地图、浏览器、通讯录等。
这部分程序均使用Java语言编写。
3.Android主要用于什么设备之上,可以用于PC么?
Android是一种基于Linux的自由及开放源代bai码的操作系统,主要使用于移动设备,如智能手机和平板电脑
在PC上运行安卓系统有很多种方法,比如虚拟设备模拟器(如Genymotion)、可引导USB版本,以及安卓模拟器(如BlueStacks)。
还有PC上的Androidx86开源项目,Android-x86.org让PC的都可以运行安卓系统。
4.Windows下搭建Android应用程序开发环境需要什么软件,如何安装及配置,请简要说明过程。
Android开发程序使用的是Java语言,由于AndroidStudio安装时自带JRE,所以不需要单独配置Java环境。
在Windows下搭建Android的开发环境主要完成以下工作:
Ø安装用于程序开发的IDE:
AndroidStudio。
Ø安装并升级Android的开发工具包:
SDK。
Ø创建Android虚拟设备:
AVD。
(安装配置过程略)
5.模拟器的功能是什么?
有些什么设置参数?
Android模拟器是用软件模拟终端设备,提供一个虚拟的运行环境,以方便开发人员测试app功能。
常用设置参数如下:
MemoryOptions:
模拟器的运行内存大小。
Internalstorage:
是模拟器内置存储空间大小,用于存放安装程序和程序数据
SDcard:
SD卡存储空间大小
AVDName:
模拟器的名称
Device:
根据一些实际手机配置提供的一些模拟器设置,包括分辨率和运行内存大小、内置存储空间大小
Target:
选择模拟器的Android系统版本
CPU/ABI:
是根据下载的系统镜像文件来的,一般是arm的,intel的会很快
Front/BackCamera:
选择前后镜头设备
VMheap:
设置VM缓存堆栈的大小
6.开发一个Android应用程序,显示效果为黑底白字,界面正中显示“Androidisveryeasy!
”。
提示:
新建android项目,放入一个TextView元件,设置TextView的Text属性为“Androidisveryeasy!
”,在模拟器中运行项目。
7.修改模拟器的输入法为搜狗输入法
打开模拟器,找到“setting”-“language”功能,找到“input”菜单,进行设置即可。
第二章
1.横向和纵向分别显示“赤橙黄绿青蓝紫”七个字,每个字显示为本身所表示的颜色。
提示:
加入线性布局管理器,设置“orientation”属性为“Vertical”,再加入两个线性布局管理器,其中第一个线性布局的“orientation”属性为“Horizontal”,在其中加入7个TextView,按顺序分别设置Text属性为“赤橙黄绿青蓝紫”的一个字,并设置TextColor属性为对应的颜色;第二个线性布局的“orientation”属性为“Vertical”,在其中加入7个TextView,按顺序分别设置Text属性为“赤橙黄绿青蓝紫”的一个字,并设置TextColor属性为对应的颜色。
2.开发一个程序,实现一个漂亮的登录界面,需要应用字符串资源、颜色资源、尺寸资源进行界面管理。
略
3.将第一题中的字显示为两个字一行,最后一行一个字。
提示:
将后加入的两个线性布局改为TableLayout,加入四个TableRow,每个TableRow中加入两个TextView。
4.让第一题中的文字由大到小显示。
提示:
依次设置每个TextView中的TextSize值得大小。
5.让第一题中显示的文字可以自适应语言设置,显示中文、英文、繁体中文。
提示:
将TextView中显示得文字使用String进行管理,分别建立对应的中文、英文、繁体中文的资源字符串。
6.在第一题的基础上增加菜单,有两项,分别是“反向显示”和“正常显示”。
提示:
创建菜单资源,在Activity中重写onCreateOptionsMenu方法,加载菜单。
7.自己设计一张9-Patch图片,并应用图片为窗体添加一个不失真背景。
提示:
在SDK的tools目录下打开9-patch工具,编辑图片,将图片作为资源保存在项目中,设置项目布局的背景为图片资源。
8.开发一个程序,其中某个按钮能根据状态的不同选择不同的图片背景显示。
提示:
采用StateListDrawable资源方式实现。
第三章
1.设计一个界面可以实现常见的计算器屏幕和按键的布局。
提示:
布局采用表格布局或多种布局的灵活嵌套,推荐使用约束布局。
2.设计两个单选按钮,单击它们可以显示不同时长的提示信息。
提示:
设置按钮单击监听器,在其中使用Toas显示提示信息。
注意设置Toast.LENGTH_SHORT或Toast.LENGTH_LONG参数
3.检查用户是否按下“回退”键,让它失去“关闭程序”的功能,另外在界面右下位置显示一个“退出”按钮,完成“关闭程序”的功能。
提示:
onKeyDown回调函数的使用,检测Keycode。
按钮的单击监听,使用finish()关闭程序。
4.开发一个程序,实现通过ImageView显示带边框的图片。
(略)
5.有五个商品供选择购买,设计界面显示其品名及价格,用户可以多选,选择完毕后按“结账”按钮,系统在屏幕下方显示总金额。
提示:
CheckBox的使用
6.开发一个程序,使用AlertDialog实现一个带图标的、“确定”按钮、“取消”按钮、“中立”按钮的对话框。
(略)
7.开发一个程序,使用AlertDialog实现一个多选列表对话框
(略)
8.开发一个程序,使用Notification实现一个在状态栏上显示备忘通知。
可以查看通知的详细内容,并且该通知在查看后不删除。
(略)
9.开发一个程序,应用AlarmManager实现定时更换桌面背景的功能。
(略)
第四章
1.开发一个程序,实现在屏幕上显示一个按钮,单击按钮时系统转到另一个Activity中。
提示:
创建两个Activity,分别在AndroidManifest配置中添加配置;
在按钮单击监听器的单击事件中,使用StartActivity启动另一个Activity。
2.实现一个关于样式的Activity展示(程序启动界面中,单击关于按钮时,弹出关于介绍的对话框)。
提示:
采用沉浸式显示Activity
3.开发一个程序,实现在两个Activity中传递一个字符串,并在第二个Activity中弹出提示框显示传递的值。
提示:
使用Bundle包装数据,作为Intent对象的参数传递。
4.实现一个星座查询的程序,用户在一个界面上输入生日,在另一个界面上展示星座及性格介绍。
提示:
同第三题
5.实现一个带城市(独立城市列表页面)选择的用户注册界面。
提示:
使用StartActivityForResult启动另一个Activity
6.实现一个古诗阅读程序,程序左边显示诗名列表,右边显示对应的诗文内容。
提示:
仿照4.3节案例实现
7.实现一个图片浏览展示的程序,左边列表是图形缩略图,右边展示对应图的大图。
提示:
程序仿照4.3节案例,图形缩略图采用Gridview组件,右边大图采用ImageView
第五章
1.编写一个程序,使用Intent实现视频播放。
提示:
1.播放本地视频
Intentintent=newIntent(Intent.ACTION_VIEW);
Stringtype="video/mp4";
Uriuri=Uri.parse("file:
///sdcard/test.mp4");
intent.setDataAndType(uri,type);
startActivity(intent);
2.播放网络视频
Intentintent=newIntent(Intent.ACTION_VIEW);
Stringtype="video/*";
Uriuri=Uri.parse("
intent.setDataAndType(uri,type);
startActivity(intent);
如果不设置type的话,这样写:
Intentintent=newIntent(Intent.ACTION_VIEW);
Uriuri=Uri.parse("
intent.setData(uri);
startActivity(intent);
2.编写一个程序,使用Intent打开网页。
提示:
Intentintent1=newIntent(Intent.ACTION_VIEW);
intent1.setData(Uri.parse(""));
startActivity(intent1);
3.开发一个程序,实现当电池电量低于5%时给出提示。
提示:
采用BroadcastReceiver。
IntentFilterintentFilter=newIntentFilter();
intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
batteryReceiver=newMyReceiver();
registerReceiver(batteryReceiver,intentFilter);
4.开发一个程序,实现当安装新应用时给出提示。
(略)
5.编写一个程序,使用线程实现每隔一分钟更换一次窗体背景。
提示:
使用线程结合handler实现
6.编写一个程序,使用线程和消息传递机制实现水平移动的图标。
提示:
handler、Message的使用
7.开发一个程序,使用线程和消息传递机制实现一个来回飘动的气球。
提示:
handler、Message的使用,气球可采用图片代替。
第六章
1.编写一个继承IntentService类的服务类,在启动10秒后停止服务,并在LogCat中输出停止服务信息。
@Override
protectedvoidonHandleIntent(Intentintent){
//Normallywewoulddosomeworkhere,likedownloadafile.
//Foroursample,wejustsleepfor5seconds.
longendTime=System.currentTimeMillis()+10*1000;
while(System.currentTimeMillis() synchronized(this){
try{
.。
。
。
。
。
。
。
。
。
。
}catch(Exceptione){
}
}
}
2.编写一个继承Service类的服务类,在启动10分钟后,以通知的方式提示用户。
提示:
思路同题1,注意NotificationManager消息的使用
3.编写一个程序,以列表的形式显示当前运行服务的详细信息。
提示:
publicstaticvoidlistServices(ContextmContext){
ActivityManageractivityManager=(ActivityManager)
mContext.getSystemService(Context.ACTIVITY_SERVICE);
ListserviceList
=activityManager.getRunningServices(100);
if(!
(serviceList.size()>0)){
return;
}
for(inti=0;iLogUtils.d("caoservicename="+serviceList.get(i).service.getClassName());
}
}
4.编写一个程序,查看本地服务或远程服务的声明周期。
第七章
1.应用程序一般允许用户自己定义配置信息,如界面背景颜色、字体大小和字体颜色等,尝试使用SharedPreferences保存用户的自定义配置信息,并在程序启动时自动加载这些自定义的配置信息。
提示:
SharedPreferencespreferences=getSharedPreferences(“myfile”,MODE_PRIVATE);
SharedPreferences.Editoreditor=preferences.edit();
editor.putString(“userName”,“jake”);
……………………
mit();
2.尝试把第1题的用户自定义配置信息,以INI文件的形式保存在内部存储器上。
提示:
//以私有模式建立文件
FileOutputStreamfos=openFileOutput(“myfile.ini”,Context.MODE_PRIVATE);
fos.write(“…………..”);//向文件中写入数据,将字符串转换为字节
fos.flush();//将所有剩余的数据写入文件
fos.close();
3.简述在嵌入式系统中使用SQLite数据库的优势。
独立性:
SQLite数据库的核心引擎本身不依赖第三方软件,使用它也不需要“安装”。
所以在部署的时候能够省去不少麻烦。
轻量级:
SQLite和C/S模式的数据库存软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。
使用SQLite,一般只需要带上它的一个动态库,就可以使用它的全部功能。
而且这个动态库的尺寸相当小。
隔离性:
SQLite数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件内,方便管理和维护。
安全性:
SQLite数据库通过数据库级上的独占性和共享锁来实现独立事务处理。
这意味着多个进程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据。
在某个进程或线程向数据库执行写操作之前,必须获得独占锁定。
在发出独占锁定后,其他的读写操作将不会再发生。
跨平台:
SQLite数据库支持大部分操作系统,除了在电脑上使用的操作系统之外,很多手机操作系统同样可以运行,比如Andorid、WindowsMobile、Symbin、Palm等。
多语言接口:
SQLite数据库支持很多语言编程接口,比如C/C++、Java、Python、dotNet、Ruby、Perl等,得到更多开发者的喜爱。
4.分别使用手动建库和代码建库的方式,创建名为test.db的数据库,并建立staff数据表,表内的属性值如表7-7所示,同时提供表数据的插入、修改和删除操作方法。
表7-7staff表结构
属性
数据类型
说明
_id
integer
主键
name
text
姓名
sex
text
性别
department
text
所在部门
salary
float
工资
提示:
修改教材中MyDBHelper类中表名称为staff,修改其中的表创建语句为此题结构。
5.开发一个程序,使用列表显示联系人姓名,当单击列表项时显示联系人手机号码。
提示:
权限配置:
name="android.permission.READ_CONTACTS"/>
读取联系人>
name="android.permission.WRITE_CONTACTS"/>
主要代码:
//联系人的Uri,也就是content:
//com.android.contacts/contacts
Uriuri=ContactsContract.Contacts.CONTENT_URI;
//指定获取_id和display_name两列数据,display_name即为姓名
String[]projection=newString[]{
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME
};
//根据Uri查询相应的ContentProvider,cursor为获取到的数据集
Cursorcursor=context.getContentResolver().query(uri,projection,null,null,null);
String[]arr=newString[cursor.getCount()];
inti=0;
if(cursor!
=null&&cursor.moveToFirst()){
do{
try{
Longid=cursor.getLong(0);
//获取姓名
Stringname=cursor.getString
(1);
//指定获取NUMBER这一列数据
String[]phoneProjection=newString[]{ContactsContract.CommonDataKinds.Phone.NUMBER};
//根据联系人的ID获取此人的电话号码
CursorphonesCusor=context.getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
phoneProjection,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"="+id,
null,
null);
//因为每个联系人可能有多个电话号码,所以需要遍历
if(phonesCusor!
=null&&phonesCusor.moveToFirst()){
do{
。
。
。
。
。
。
}while(phonesCusor.moveToNext());
}
i++;
}catch(PinyinExceptione){
e.printStackTrace();
}
}while(cursor.moveToNext());
}
6.开发一个程序,根据联系人应用中保存的数据,实现自动补全姓名的功能。
提示:
参考题5的样例
7.开发一个程序,实现删除联系人应用中指定的联系人信息。
提示:
参考题5的访问方式
8.开发程序,实现将个人应用数据提供给其他程序访问。
提示:
Contentprovider的使用
第八章
1.开发一个程序,实现播放SD卡中的MP3文件。
提示:
(注意外部sdcard设备的访问权限处理)
/实例化MediaPlayer
MediaPlayerplay=newMediaPlayer();
//指定播放文件的路径
play.setDataSource("/sdcard/music.mp3");
//准备
play.prepare();
//开始播放
play.start();
2.开发一个程序,实现播放SD卡中的3gp文件。
提示:
同题1
3.开发一个程序,实现音频的录制。
提示:
(注意外部摄像头、sdcard设备的访问权限处理)
使用mediarecorder处理。
第九章
1.开发一个程序,实现在屏幕上绘制一个空心的六边形和一个实心的六边形。
提示:
计算六边各点的坐标位置,连线、填充
2.开发一个程序,实现在屏幕上绘制一个随机的数字组成的验证码。
提示:
将随机的数字用绘图方式展现。
3.开发一个程序,实现一个飞舞的蝴蝶。
提示:
准备几张蝴蝶图片,采用逐帧动画实现。
4.开发一个程序,实现在夜空中同时有多颗星星闪烁的效果。
提示:
采用属性动画方式,随机设置星星的亮度。
5.开发一个程序,实现一条小鱼来回捕食的效果。
提示:
参照项目案例-野猪奔跑
第十章
1.使用Socket编制一个文件下载程序,要求能浏览服务器上的下载资源并支持点选下载功能。
提示:
编制通信协议,建立S