《Android应用开发教程 第2版》课后习题参考答案Word文档下载推荐.docx
《《Android应用开发教程 第2版》课后习题参考答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《《Android应用开发教程 第2版》课后习题参考答案Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
在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.播放网络视频
video/*"
如果不设置type的话,这样写:
intent.setData(uri);
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()<
endTime){
synchronized(this){
try{
.。
。
}catch(Exceptione){
}
2.编写一个继承Service类的服务类,在启动10分钟后,以通知的方式提示用户。
思路同题1,注意NotificationManager消息的使用
3.编写一个程序,以列表的形式显示当前运行服务的详细信息。
publicstaticvoidlistServices(ContextmContext){
ActivityManageractivityManager=(ActivityManager)
mContext.getSystemService(Context.ACTIVITY_SERVICE);
List<
ActivityManager.RunningServiceInfo>
serviceList
=activityManager.getRunningServices(100);
if(!
(serviceList.size()>
0)){
return;
for(inti=0;
i<
serviceList.size();
i++){
LogUtils.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
性别
department
所在部门
salary
float
工资
修改教材中MyDBHelper类中表名称为staff,修改其中的表创建语句为此题结构。
5.开发一个程序,使用列表显示联系人姓名,当单击列表项时显示联系人手机号码。
权限配置:
<
uses-permissionandroid:
name="
android.permission.READ_CONTACTS"
/>
!
读取联系人>
<
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{
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!
phonesCusor.moveToFirst()){
。
}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