Android应用开发实验指导书.docx
《Android应用开发实验指导书.docx》由会员分享,可在线阅读,更多相关《Android应用开发实验指导书.docx(53页珍藏版)》请在冰豆网上搜索。
![Android应用开发实验指导书.docx](https://file1.bdocx.com/fileroot1/2023-4/24/1ad6bcba-f821-4d36-957f-7608e102b414/1ad6bcba-f821-4d36-957f-7608e102b4141.gif)
Android应用开发实验指导书
《手机应用开发》
实验指导书
西南科技大学计算机科学与技术学院
2015.11
注意:
平时实验只完成实验一到实验五
实验一:
搭建Android开发平台和创建HelloWorld程序
实验目的
本次实验的目的是让同学们熟悉搭建智能手机开发平台的过程,了解Andorid应用程序项目的基本文件目录结构,并实现HelloWorld小例程。
实验要求
1.学习Android开发平台的搭建及相关配置
2.创建项目并熟悉文件目录结构
3.实现例程HelloWorld
实验内容
一、安装并配置JavaJDK
1.下载安装JDK,网址如下。
(
(1)了解JDK与JRE的区别。
(2)了解JDK不同版本号的区别。
(3)了解jdk-8u65-windows-i586.exe与jdk-8u65-windows-x64.exe的区别
(4)查看并记录下实验用机上jdk的版本以及安装地址。
2.配置JDK:
XP:
右键“我的电脑”→“属性”→“高级”→“环境变量”
WIN7:
右键“我的电脑”→“高级系统设置”→“环境变量”
新建系统变量:
JAVA_HOME,C:
\ProgramFiles(x86)\Java\jdk1.6.0_18(JDK安装目录)。
PATH,%JAVA_HOME%\bin;%JAVA_HOME%\jr\bin。
CLASSPATH,.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(前面的.;一定要加上)
配置完成后在CMD中输入java–version和javac–version,能看到对应的JDK版本即配置成功,如下图所示。
请思考设置这三个环境变量的作用。
二、下载安装集成ADT(AndroidDevelopmentTools插件的Eclipse(即adt-bundle)
1.认识开发工具
根据桌面的eclipse(adt)快捷找到本机上的adt-bundle,打开并了解其目录结构。
2.认识、使用SDK管理器工具
在adt-bundle文件目录里找到并启动SDKManager.exe,查看本机目前安装的AndroidSDK插件情况。
3.启动Eclipse
在adt-bundle文件目录里找到并启动eclipse.exe,启动后查看本机上eclipse配置的工作区位置(工程源代码存放的位置)。
请思考如何使代码编辑区的代码显示行号,如果修改代码区字符的大小。
三、创建Android虚拟设备(AVD)
1.启动AVD(AndroidVirtualDevice)管理器
在adt-bundle的sdk目录下找到并启动AVDManager.exe
2.尝试创建一台虚拟的目标调试设备,注意物理内存不要设置太大。
四、创建第一个Android工程项目—HelloWorld
1.打开Eclipse。
2.点击“File”→“New”→“Project”→“AndroidProject”,创建HelloWorld项目。
3.输入合法的ApplicationName、ProjectName和PackageName后一路Next,完成项目的创建。
创建成功后的项目文件结构如下:
找到并查看项目中的如下几个文件:
a)MainActivity.java
b)R.java
c)activity_main.xml
d)strings.xml
e)AndroidManifest.xml
f)Project.properties
4.打开eclipse下方的Problem查看器查看警告。
5.选择项目HelloWorld点击右键RunAs→“AndroidApplication”,用之前创建的AVD运行此项目。
6.如果运行失败,查看相应的提示信息后,重新跳到步骤1创建一个新的项目HelloWorld2,创建时将MinimunRequiredSDK设置为Android4.0或以上。
请思考第一次创建的项目为什么会多生成一个appcompat_V7目录,并且运行失败。
更改最低SDK版本后运行成功。
实验二:
UI设计
实验目的
本次实验的目的是让同学们熟悉Android开发中的UI设计,包括了解和熟悉常用控件的使用、界面布局和事件处理等内容。
实验要求
1.熟悉和掌握界面控件设计
2.了解Android界面布局
3.掌握控件的事件处理
实验内容
一、常用控件
1.常用控件介绍
Android中有许多常用控件(简单分类):
文本框:
TextView、EditText
按钮:
Button、RadioButton、RadioGroup、CheckBox、ImageButton
列表:
List、ExpandableListView、Spinner、AutoCompleteTextView、GridView、ImageView
进度条:
ProgressBar、ProgressDialog、SeekBar、RatingBar
选择器:
DatePicker、TimePicker
菜单:
Menu、ContentMenu
对话框:
Dialog、ProgressDialog
常用的控件有文本框、按钮和列表等。
2.控件的实现
在上一个实验中,我们用一个TextView控件实现了在界面显示一句“HelloWorld!
”。
现在我们来看一看.xml文件和编码的相互关系。
将MainActivity.java中代码修改如下:
注意在上面并没有为textView和button设置文本内容等,另外textView的初始化代码为:
TextViewtextView=(TextView)findViewById(R.id.textView01);
此处初始化用到了id为textView01的TextView。
在项目目录中找到/res/layout/activity_main.xml,修改代码如下:
注意上面列出了两个控件:
TextView和Button,id分别为textView01和button01,它们的文本内容分别为@string/hello_world和@string/button。
在项目目录中找到/res/values/strings.xml,如下:
可以看到两个string:
hello和button的内容分别为“HelloTheAndroidWorld!
”和“Iamabutton!
”,即使文本框和按钮在界面上显示的内容,如下图所示:
3.控件的属性
可以直接在类中为控件设置属性,也可以在xml文件中设置属性。
每个控件都有一系列的属性,例如id、size、text、color等等,大家可以找找API查看控件的属性。
二、界面布局
Android中有很多布局:
●FrameLayout:
最简单的一个布局对象。
它里面只显示一个显示对象。
Android屏幕元素中所有的显示对象都将会固定在屏幕的左上角,不能指定位置。
但允许有多个显示对象,但后一个将会直接在前一个之上进行覆盖显示,把前一个部份或全部挡住(除非后一个是透明的)。
●LinearLayout:
以单一方向对其中的显示对象进行排列显示,如以垂直排列显示,则布局管理器中将只有一列;如以水平排列显示,则布局管理器中将只有一行。
同时,它还可以对个别的显示对象设置显示比例。
●TableLayout:
以拥有任意行列的表格对显示对象进行布局,每个显示对象被分配到各自的单元格之中,但单元格的边框线不可见。
●AbsoluteLayout:
允许以坐标的方式,指定显示对象的具体位置,左上角的坐标为(0,0),向下及向右,坐标值变大。
这种布局管理器由于显示对象的位置定死了,所以在不同的设备上,有可能会出现最终的显示效果不一致。
●RelativeLayout:
允许通过指定显示对象相对于其它显示对象或父级对象的相对位置来布局。
如一个按钮可以放于另一个按钮的右边,或者可以放在布局管理器的中央。
布局中可以放置控件,而每个布局又可以嵌套其他布局,这种思想和之前学习java的布局是一样的。
例如在activity_main.xml中如下布局:
在一个LinearLayout布局下嵌套了两个LinearLayout,出来的效果如下图所示:
其他布局请同学们自行尝试。
三、事件处理
事件监听和时间处理的概念大家以前都学习过,android中主要有如下事件方法:
●onClick(Viewv)一个普通的点击按钮事件
●booleanonKeyMultiple(intkeyCode,intrepeatCount,KeyEventevent)用于在多个事件连续时发生,用于按键重复
●booleanonKeyDown(intkeyCode,KeyEventevent)用于在按键进行按下时发生
●booleanonKeyUp(intkeyCode,KeyEventevent)用于在按键进行释放时发生
●onTouchEvent(MotionEventevent)触摸屏事件,当在触摸屏上有动作时发生
●booleanonKeyLongPress(intkeyCode,KeyEventevent)当长时间按时发生
下面以点击一个Button为例子:
为button添加了一个监听buttonListener,对应的onClick方法则抛出了一则文本框提示用户,效果图如下所示:
其它控件的使用请同学们自行尝试。
实验三:
Intent、Activity应用
一、实验目的
本次实验的目的是让同学们熟悉Intent和Activity的使用。
Intent的最常用的用途是绑定应用程序组件。
Intent用来在应用程序Activity间启动、停止和传输。
并实现添加用户名,密码小例程。
二、实验要求
1.完成Android开发平台的搭建及相关配置
2.创建项目并熟悉文件目录结构
3.实现例程添加用户名,密码实验步骤
三、实验步骤
项目界面:
添加用户名,密码,在另一页面显示用户名。
1、创建项目
新建一个Android工程命名为test1,目录结构如下图:
2、添加布局文件
修改main.xml布局文件(这里增加了两个TextView,两个EditView,一个按钮),如下图
新建test2.xml布局文件(这里增加了两个TextView),这个页面是用来显示添加的用户名,如下图:
3、创建Activity
修改test1.java,并且新建一个Activity,一个是test2.java。
代码分别如下:
Test1.java
作用:
获得页面输入的内容,存储并跳转到test2.xml。
Test2.java
作用:
从Intent中获得需要显示name的值,并给TextView赋值。
4.修改AndroidManifest.xml文件
比较重要的一步啦,修改AndroidManifest.xml文件(将新增的Activity,test2)注册一下,代码如下(第16行):
请尝试使用startActivityForResult(Intentintent,intrequestCode)方法实现页面的跳转。
实验四:
service应用
一、实验目的
本次实验的目的是让大家熟悉service的使用。
一个使用Service的典型的例子是,用户一边在手机做其他的事情,一边听手机上的音乐。
其中,在后台播放音乐就可以使用Service来实现。
并实现简单播放器的小例程。
二、实验要求
1.创建项目并熟悉文件目录结构。
2.实现例程简单播放器。
三、实验步骤
项目界面:
1、创建项目
新建一个Android工程命名为test1,目录结构如下图:
2、布局文件
修改main.Xml文件
修改MusciPlayer.java文件,新建MusicService.java文件,代码如下图:
MusciPlayer.java文件
MusicService.java
3、修改AndroidManifest.xml文件
比较重要的一步,修改AndroidManifest.xml文件(将新增的service)注册一下,代码如下(第16行):
实验五:
SQLite和SQLiteDatabase应用
一、实验目的
1、本次实验的目的是让大家熟悉Android中对数据库进行操作的相关的接口、类等。
SQLiteDatabase这个是在android中数据库操作使用最频繁的一个类。
通过它可以实现数据库的创建或打开、创建表、插入数据、删除数据、查询数据、修改数据等操作。
2、实现添加用户名,爱好小例程。
二、实验要求
1、完成Android开发平台的搭建及相关配置
2、创建项目并熟悉文件目录结构
3、实现例程添加用户名,爱好实验步骤
三、实验步骤
项目界面:
输入用户名,爱好添加到数据库,由数据库查询出来显示插入的列表。
当单击列表时会弹出Alert询问是否删除,进行删除操作。
1、创建项目
新建一个Android工程命名为Database,目录结构如下图:
2、布局文件
修改main.xml布局文件,添加display.xml文件,用来显示列表。
如下图
Main.Xml
Display.xml
3、创建Activity
修改DatabaseActivity.java文件,新建DBHelper.java文件和displayAvtivity.java,代码如下图:
DBHelper.java操作数据库的工具类,该类继承SQLiteOpenHelper。
DatabaseActivity.java获取页面输入的值,添加到数据库
displayAvtivity.java显示列表,删除数据
实验六:
图形绘制与OpenGLES
一、实验目的
在屏幕绘制各种图形,了解OpenGL
二、实验要求
1、了解在屏幕绘图方法
2、了解OpenGL
三、实验原理
四、实验过程
1、绘制直线、园、曲线等各种图形
2、显示字符
3、利用OpenGLES方法编程
Android中的图形系统采用Client/Server架构。
Server(即SurfaceFlinger)主要由c++代码编写而成。
Client端代码分为两部分,一部分是由Java提供的供应用使用的api,另一部分则是由c++写成的底层实现。
Android图形系统中通过surface为view创建一个Canvas对象,管理view在surface上的绘图操作。
View及其子类(如TextView,Button)要画在surface上。
OpenGLES(OpenGLforEmbeddedSystems)是一个针对嵌入式应用的,免费的,支持全功能2D、3D的跨平台API(OpenGL®ESisaroyalty-free,cross-platformAPIforfull-function2Dand3Dgraphicsonembeddedsystems-includingconsoles,phones,appliancesandvehicles)。
目前主要由3个版本,1.0,1.1,2.0。
OpenGLES1.0是以OpenGL1.3规范为基础的,OpenGLES1.1是以OpenGL1.5规范为基础的,1.1完全兼容1.0。
OpenGLES2.0则是参照OpenGL2.0规范定义的。
简单的来说,OpenGLES是OpenGL针对嵌入式应用的简化版,也就是android使用的标准。
OpenGLES1.1强调api的硬件加速,OpenGLES2.0更强调3D能力。
OpenGLES1.1和OpenGLES2.0之间的关系并不是旧版本和新版本之间的差别,而是一个针对相对低端的应用,一个针对高级应用,OpenGL官方的roadmap也是将这两个版本并行发展的。
2.X并不能百分百兼容1.X。
Android现在支持1.X和2.X。
OpenGLES是专为内嵌和移动设备设计的一个2D/3D轻量级图形库,它基于OpenGLAPI设计,是OpenGL三维图形API的子集。
Android里有三个与OpenGL有关的包:
android.opengl
javax.microedition.khronos.egl
javax.microedition.khronos.opengles
publicvoidonDrawFrame(GL10gl){
//一般的opengl程序,首先要做的就是清屏
gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);
//紧接着设置模型视图矩阵
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();//清空矩阵
GLU.gluLookAt(gl,0,0,3,0,0,0,0,1,0);//视点变换,将相机位置设置为(0,0,3),同时指向(0,0,0)点
//设置模型位置旋转及缩放信息
gl.glTranslatef(0.0f,0.0f,-1.0f);//将模型位置设置为(0,0,-1)
floatangle=30.0f;
gl.glRotatef(angle,0,1,0);//绕模型自身Y轴旋转30度
gl.glRotatef(angle,1,0,0);//绕模型自身X轴旋转30度
gl.glScalef(1.2f,1.2f,1.2f);//设置三方向的缩放系数
//设置颜色
gl.glColor4f(0.0f,0.0f,0.0f,1.0f);
//渲染立方体
mCube.draw(gl,gl.GL_TRIANGLES);
//mCube.draw(gl,gl.GL_LINES);
}
实验七:
网络访问与服务
一、实验目的
掌握Android网络访问方法
二、实验要求
1、了解手机WEB网站访问编程
2、通过网络进行数据访问
3、了解数据库使用
三、实验原理
利用Android网络访问协议
四、实验过程
1、访问WEB网站,通过HttpResponse类,读入网络数据。
AndroidSDK网络包:
包
描述
Android网络访问socket。
该包包括URI类,不仅仅是传统的联网方面。
.http
处理Android有关Http协议类。
.wifi
在Android平台上管理有关WiFi(802.11无线Ethernet)应用的类。
android.telephony.gsm
包含用于管理和发送SMS(文本)消息的类。
读入WEB数据例程:
HttpClientclient=newDefaultHttpClient();
HttpGetget=newHttpGet(url);
HttpResponseresponse=client.execute(get);
HttpEntityentity=response.getEntity();
//尝试读取entity的长度,返回-1表示长度未知
longlength=entity.getContentLength();
InputStreamis=entity.getContent();
Strings=null;
if(is!
=null){
ByteArrayOutputStreambaos=newByteArrayOutputStream();
byte[]buf=newbyte[512];
intch=-1;
intcount=0;
while((ch=is.read(buf))!
=-1){
baos.write(buf,0,ch);
count+=ch;
//如果长度已知,可以通过taskProgress()通知监听者任务执行的比例
if(length>0){
listener.taskProgress(this,count,length);
}
//为了更好的演示进度,让线程休眠100ms
Thread.sleep(100);
}
Log.e("HttpTask","length="+baos.toByteArray().length);
//返回内容
s=newString(baos.toByteArray());
}
returns;
实验八硬件访问与传感器
一、实验目的
通过底层API访问手机硬件及手机上的各种传感器
二、实验要求
1、获取手机上电话、短信等各种功能的编程
2、了解手机上各种传感器的功能与使用方法
三、实验原理
利用手机本身的功能与相关传感器的使用
四、实验过程
1、了解程序使用手机电话功能的方法
短信收发:
◆发送短信只需要几行代码,如下:
SmsManagersms=SmsManager.getDefault();
PendingIntentpi=PendingIntent.getBroadcast(this,0,newIntent(),0);
sms.sendTextMessage(phoneNumber,null,MsgStr,pi,null);
其中参数phoneNumber和MsgStr均是String类型,表示接收方的电话号码和短信内容
◆接收短信主要是继承BroadcaseReceiver类,覆盖onReceive函数:
packagecom.android.TinySMS;
importandroid.app.Activity;
importandroid.app.PendingIntent;
importandroid.content.BroadcastReceiver;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.telephony.gsm.SmsManager;
importandroid.view.View;
importandroid.widget.Button;