山东大学计算机学院人机交互实验指导书
山东大学软件学院 软件工程专业 《人机交互技术》课程
实验指导书
山东大学 软件学院 2015年9月
第 1 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
《人机交互技术》课程实验教学大纲
一.实验教学的目的
通过《人机交互技术》实验课程的实践,使学生了解《人机交互技术》与计算机图形、程序设计、认知心理学以及计算机硬件的发展等领域密切相关, 本课程在2013年春节课程的实验安排采用Android
系统,通过开发并创建个Android应用程序,
并在PC机上模拟Android 手机环境下或连接手机环境下进行开发和运行。加深学生对人机交互知识的理解,增强学生的实际运用能力和开发高可用性的交互
界面的能力,了解和掌握最新的人机交互开发工具和手段,方法。
二.实验教学的任务
了解利用Android系统进行人机交互系统或界面开发的系统通过案例学习,让学生了解不同的人机交互模型设计类型,以及成功与失败案例所带来的启示。通过原型设计使学生了解原型的作用,并了解用户需求对设计一个良好人机交互界面的重要性。通过原型和界面评估,使学生掌握针对交互系统的评估方法。
三.实验教学的环境
在游戏与动漫实训中心的PC机房进行。 开发和运行环境:MS Windows XP 或Windows 7 ; Android2.1及以上版本;
JAVA的IDE开发工具– Eclipse,Java开发包 — Java SE Development Kit (JDK) JDK 6; Android开发包 — Android SDK For Windows
四.具体实验题目名称和学时分配、适用专业及实验性质(设计性、综合性、验证性) 序号 实验项目名称 学时 适用专业 实验性质 必开/选开 备注 第 2 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
(1)了解和熟悉Android应用程序开发环境、语言和配置方法,初步掌握创建、运行Android程序的方法 (2)编写并运行第一个Android应用程序1 “Holle World !” 程序。 (3)学习如何导入已存在的程序 ,并运行程序. (4)了解和体会在Android虚拟机上如何进行交互操作的方法 (1)简单列表操作:编程实现一个使用列计算机科学技2 术/软件工程 设计性 必开 计算机科学技2 设计性 术/软件工程 必开 2 表视图显示人员职位信息的交互操作界面。 第 3 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
(2)编程实现扩展列表视图的实机界面。 (1)编程实现滚动视图(ScrollView) 计算机科学技3 2 术/软件工程 设计性 必开 基于Android的二维交互游戏:利用Android2.1以上系4 统,搭建二维游戏平台,通过8 键盘鼠标交互方式,实现综合养成、解谜、休闲、角色扮演和移动应用的3G游戏。 计算机科学技综合性 术/软件工程 必开 第 4 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
计算机科学技5 人机交互系统的评估 2 术/软件工程 综合性 选开 人机交(1)基于三维空间的定位设备互与虚的空间位置信息的获得与处理 计算机科学技2 (2)基于三维立体扫描仪采集数据 验室
术/软件工程 专业实演示性 选开 拟现实6 五.单项实验的内容、要求
实验环境与设备及案例的学习
通过对实验设备与环境及案例的学习,了解各种人机交互界面类型,加深学生对人机交互系统的理解。
按要求设计、制作交互系统原型(工具不限原型)
掌握原型设计方法,并运用原型开发工具设计原型。在原型制作之前,力争全面了解实验需求。了解交互系统与交互界面设计的开发环境,掌握相关开发工具的使用方法。 评价并改进原型
了解评价原型的方法,通过评估来发现原型中存在的可用性问题,并改进原型。按照改进的原型设计交互界面系统。 4.评估
掌握人机交互系统与界面的评估方法。
六.实验教材或讲义名称
见山东大学软件学院软件工程专业《人机交互技术实验指导书》
七.实验考核标准
1.优秀
第 5 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
能按实验指导书独立完成实验,正确使用仪器设备,能灵活、熟练地运用相关知识,实验数据及计算结果准确,实验报告(含图表)清晰无误。
2.良好
能按实验指导书基本独立完成实验,正确使用仪器设备,能比较熟练地运用相关知识,实验数据及计算结果基本准确,实验报告(含图表)质量较好。
3. 中等
能在教师指导下顺利完成实验,会使用仪器设备,尚能运用相关知识,实验数据及计算结果有明显错误,实验报告(含图表)质量一般。
4.及格
能在教师指导下完成实验,会使用仪器设备,运用相关知识能力较差,实验数据及计算结果有较大错误,基本达到实验最低要求。
5.不及格
不能完成实验,或抄袭他人实验报告,或实验数据及计算结果有多处重大错误。
八.与其他课程的联系与分工
本实验课前续先修课为:
Java计算机程序设计,数据结构,计算机图形学,
九.要求掌握的开发工具
Java,Android语言等辅助开发工具。
十.为达到本课程的目的和要求所采取的措施
1.要求实验室配备本实验所需的设备和器材。每人配备计算机一台,要求具有CPU是P4以上,内存128MB以上,硬盘20GB以上,并配备网卡、光驱,实验室中具有集线器、网线等,并配备相应的软件光盘。
2.承担实验教学的教师和实验员提前作好实验准备。 3.实验之前,要求学生对每个实验的内容进行预习。 4.要求学生按时上机,交实验报告。
5.指导实验的教师和实验员要耐心辅导,帮助学生解决实验中出现的问题,认真批改实验报告。
第 6 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
十一.编制依据
本实验教学大纲的编写 按照《人机交互技术》课程教学大纲对实验环节的要求编写。
参加本大纲制订编写人员: 蒋志方,王璐
本课程所在实验室:人机交互与虚拟现实实验室 实验室主任签字: 系主任签字:
主管教学院长签字: 制定时间: 2015年2月
第 7 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
实验 一
在Windows上搭建Android的JAVA开发环境图文教程
(Eclipse版本)
工具/原料
下载需要用到的工具:
(1)下载JAVA的IDE开发工具– Eclipse
到Eclipse官方网站下载Ecplise For Java EE的最新Windows版本
下载Ecplise
(2)下载Java开发包 — Java SE Development Kit (JDK) JDK 6 到Sun官方网站下载JDK6,选择JDK 6 Update 12
下载JDK6
(3)下载Android开发包 — Android SDK
到Google的官方网站下载Android的开发包For Windows的
步骤/方法
1. 下载完需要的工具之后,开始安装
(1)安装Ecplise:下载回来的Ecplise(eclipse-jee-ganymede-SR2-win32.zip)直接解压即可
(2)安装JDK6:运行下载回来的JSK安装包(jdk-6u12-windows-i586-p.exe)一路”下一步”即可
(3)安装Android开发包(SDK):下载回来的SDK包(android-sdk-windows-1.1_r1.zip)直接解压即可
2. 让Ecplise自动安装Android开发插件(ADT- plugin)
(1)启动安装完(解压)后的Ecplise目录下的Ecplise.exe
(2)点击菜单”Help”->”Software Updates”,在打开的窗口中切换到选项页”Availabe Software”
(3)点击”Add site…”,加入以下地址: http://dl-ssl.google.com/android/eclipse/ 然后点击”OK”
(4)刚才加入的地址,点击”Install…”进行ADT(Android Development Tools)的安装工作.
(5)Ecplise此时会从加入的地址中自动下载跟安装ADT,稍等一会,安装完毕后,提示需
第 8 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
要重启Ecplise,点击”OK”重启Ecplise 安装ADT
3. 配置Andiord SDK路径
重启完Ecplise后,点击菜单”Window”->”Preference”,打开了配置窗口,在左边选中Android,在右边输入Android SDK的路径(刚才步骤1-(3)下载的Android SDK解压出来的目录),点击”OK”,至此环境配置完毕. 配置Android SDK路径
第 9 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
4. 测试开发一个Android项目
(1)点击菜单”File”->”New”->”Other…”,在打开的窗口中选择”Android”->”Android Project”,点击”Next”进入下一步
(2)随便起个项目名,例如”HelloWorld”,注意Package name里需要输入”com.项目名”才能点击”Finish”继续. 新建Android项目
第 10 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
5. 建好项目之后,点击菜单”Run”->”Run”,在弹出窗口中选择以”Android Application”模
式运行程序,即可调起Android的模拟器运行测试程序了. 以Android Application运行
第 11 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
6. 完成 测试Android模拟器
(五)实验步骤
第 12 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
1.使用Eclipse和Java开发包 ,Android开发包 进行实验题目的设计和人机交互操作的代码设计
2.体会交互过程和实现方法
3.在Android虚拟机上运行代码,进行对象运动和场景运动人机交互的操作。
(六)实验报告要求
1. 整理实验结果,编写实验报告; 2. 总结实验心得体会。
第 13 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
实验二、三
一、创建第一个Android程序 1、
新建AVD(Android Vitural Device)
(1)单击红色框标识的按钮(或者找到SDK文件夹,运行其中的AVD Manager.exe)
进入如下界面:
第 14 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
(2)点击New按钮后,进入如下界面:
第 15 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
虚拟机的名称(AVD Name)可以随便取,target选择你需要的SDK版本,SD卡大小自定义,Device根据你所开发的机器大小定义, 点击 OK,得到如下结果,AVD创建完毕
第 16 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
2、 新建Android项目
(1)、选择菜单file->new->project 进入如下界面:
第 17 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
(2)、选择新建Android Application Project项目,点击Next按钮 (3)、输入项目名称newApp,选择使用的Androd版本,点击Next按钮
(4)、一直点击Next,最后点击Finish按钮,创建完成 (5)、创建完成的新项目newApp
第 18 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
3、测试新建的Androind应用
执行newApp程序,右击newApp->run as->Android Application, 第一次启动虚拟机会比较慢,大家需要耐心等待一下...
第 19 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
OK!!!成功。
二、如何导入已存在的程序 1、File->import„ 打开如下界面:
第 20 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
2、进行如下选择,然后点击Next
3、找到文件位置,点击Finish即可。
第 21 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
4、按前面的第三步运行即可。
三、Android中的几个示例 示例一:列表视图(ListView)
列表视图几乎是所有开发平台都非常喜欢的组件,无论是作为标准的Win32组件,还是标准的Java基础类组件,列表视图的功能都是高深莫测的。图1-1,图1-2是使用列表视图显示人员职位信息的实机界面。
第 22 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
图1-1列表视图的实机界面
图1-2 单击“张三”的实际界面
第 23 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
(1)
主界面布局定义
代码1-1是列表视图示例程序的主界面布局定义,该布局中只包含了一个列表视图。
代码1-1 列表视图示例程序的主界面布局定义 文件名:main.xml
在代码1-1中,该列表视图的ID属性为@id/android:list,表示该组件参考的是系统列表视图。 (2)应用程序Activity组件框架
代码1-2是该列表视图示例程序的Activity组件的框架定义 代码1-2列表视图示例程序的Activity组件的框架定义 文件名:ListViewAct.java
第 24 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
在代码1-2中,首先是初始化列表项数据容器(第23-26行),然后是创建适配器(第29行),最后将该适配器设置为该Activity
第 25 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
(列表Activity)的列表适配器(第40行),在列表项单击事件回调方法中,根据列表项位置通过列表适配器或者直接从数据集获得该项对应的数据记录(第53行或第55行)。 (3)应用程序配置信息接口
代码1-3是应用程序中有关配置信息接口的定义,包括记录的数据项数组和显示列内容的组件ID数组。 代码1-3 应用程序配置信息接口的定义 文件名:IConfig.java
(4)列表视图的行视图
代码1-4是该列表视图的行视图定义,其中必须包含适配器所指定的用于显示数据项的组件,其组件数可以比数据记录的数据项多,但是不能少。
代码1-4 列表视图的行视图的定义
文件名:row_ui.xml
第 26 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
(5)设置列表视图的页眉页脚
代码1-5是列表视图的页眉视图的定义。
代码1-5 列表视图的页眉视图的定义
文件名:header_view.xml
代码1-6是列表视图的页脚视图的定义。
代码1-6 列表视图的页脚视图的定义
文件名:footer_view.xml
示例二:扩展列表视图(Expandable ListView)(详细代码见源程序) 顾名思义,扩展列表视图是在列表视图的基础之上进行了扩展,其组织形式要比列表视图更为复杂。图2-1、2-2所示为扩展列表视图的实机界面,其列表项中又嵌套了列表。
第 27 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
图2-1 扩展列表视图的实机界面
图2-2 扩展列表视图的实机界面
第 28 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
示例三、滚动视图(ScrollView)(详细代码见源程序)
图3-1所示为一款类似于“手机报”工具的实机界面,该程序可以实现自动滚屏或根据选择直接滚动到指定的位置,其中用到的主要组件就是滚动视图(ScrollView)。
第 29 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
图3-1 滚动视图的实机界面
第 30 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
图3-2 点击跳转后的实机界面
第 31 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
实验四 基于Android的二维交互游戏设计
一.界面设计:控件与布局
(一)实验目的
加深对Android编程环境和原理的认识和理解与掌握,进一步熟悉Android编程基础,掌握界面控件设计,完整的UI设计理念和方法,掌握控件的事件处理编程。
研究Android游戏的开发途径和应用方法,实现综合养成、解谜、休闲、角色扮演和移动应用的3G游戏。
(二)UI设计原理
1. 了解各种控件的基本功能
Menu、
TextView、EditText、
Button
Radio button
List
第 32 页 共 47 页
人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院
ProgressBar;
1、 了解布局Layout的应用 多种Layout: AbsoluteLayout FrameLayout GridView LinearLayout ListLayout RadioGroup TableLayout „„„
2、 利用布局安排各种控件,设计良好用户界面 /> android:layout_width=\"wrap_content\" android:layout_height=\"wrap_content\" android:orientation=\"horizontal\"> android:layout_width=\"wrap_content\" android:layout_height=\"wrap_content\" android:text=\"@string/btn_name\" /> android:layout_width=\"wrap_content\" android:layout_height=\"wrap_content\" android:text=\"@string/stp_name\" /> 第 34 页 共 47 页 人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院 第 35 页 共 47 页 人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院 第三部分:图形绘制与OpenGL 【目的】 在屏幕绘制各种图形,了解OpenGL 【要求】 1、 了解在屏幕绘图方法 2、 了解OpenGL 【原理】 【过程】 1、 绘制直线、园、曲线等各种图形 2、 显示字符 3、 利用OpenGL编程方法 public void onDrawFrame(GL10 gl) { //一般的opengl程序,首先要做的就是清屏 gl.glClear(GL10.GL_COLOR_BUFFER_BIT | //紧接着设置模型视图矩阵 gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadIdentity();//清空矩阵 GLU.gluLookAt(gl, 0, 0, 3, 0, 0, 0, 0, 1, 0);//视点变换,将相机位GL10.GL_DEPTH_BUFFER_BIT); 置设置为(0, 0, 3),同时指向(0, 0, 0)点 //设置模型位置旋转及缩放信息 gl.glTranslatef(0.0f, 0.0f, -1.0f);//将模型位置设置为(0, 0, -1) float angle = 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); } 第 36 页 共 47 页 人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院 第 37 页 共 47 页 人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院 第四部分:网络访问与服务 【目的】 掌握Android网络访问方法 【要求】 1、 了解手机WEB网站访问编程 2、 通过网络进行数据访问 3、 了解数据库使用 【原理】 利用Android网络访问协议 【过程】 1、 访问WEB网站,通过HttpResponse类,读入网络数据。 HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet(url); HttpResponse response = client.execute(get); HttpEntity entity = response.getEntity(); //尝试读取entity的长度,返回-1表示长度未知 long length = entity.getContentLength(); InputStream is = entity.getContent(); String s = null; if (is != null) { } return s; ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buf = new byte[512]; int ch = -1; int count = 0; while ((ch = is.read(buf)) != -1) { } Log.e(\"HttpTask\", \"length=\" + baos.toByteArray().length); //返回内容 s = new String(baos.toByteArray()); baos.write(buf, 0, ch); count += ch; //如果长度已知,可以通过taskProgress()通知监听者任务执行的比例 if (length > 0) { } //为了更好的演示进度,让线程休眠100ms Thread.sleep(100); listener.taskProgress(this, count, length); 读入www.google.com网站数据: 第 38 页 共 47 页 人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院 第 39 页 共 47 页 人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院 第五部分:硬件访问与传感器 【目的】 通过底层API访问手机硬件及手机上的各种传感器 【要求】 1、 获取手机上电话、短信等各种功能的编程 2、 了解手机上各种传感器的功能与使用方法 【原理】 利用手机本身的功能与相关传感器的使用 【过程】 1、 了解程序使用手机电话功能的方法 短信收发: package com.android.TinySMS; import android.app.Activity; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.gsm.SmsManager; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class TinySMS extends Activity { public static final String SMS_ACTION = \"com.android.TinySMS.RESULT\"; // private TextView message; private Button snd; private EditText tel; private EditText txt; private SentReceiver receiver = new SentReceiver(); private class SentReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(SMS_ACTION)) { int code = getResultCode(); //短消息发送成功 if(code == Activity.RESULT_OK) Toast.makeText(TinySMS.this, R.string.msg_sent, 第 40 页 共 47 页 人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院 } } Toast.LENGTH_SHORT).show(); }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tel = (EditText) findViewById(R.id.EditText01); tel.setText(\"5554\"); //模拟器之间互发短信 txt = (EditText) findViewById(R.id.EditText02); txt.setText(\"我用自己的程序试试发短信。\"); snd = (Button) findViewById(R.id.Button01); snd.setOnClickListener(new View.OnClickListener() { public void onClick(View arg0) { String phoneNo = tel.getText().toString(); String message = txt.getText().toString(); if (phoneNo.length()>0 && message.length()>0){ } } }); } private void sendSMS(String address, String content) { SmsManager manager = SmsManager.getDefault(); Intent i = new Intent(SMS_ACTION); //生成PendingIntent,当消息发送完成,接收到广播 PendingIntent sentIntent = PendingIntent.getBroadcast( this, 0, i, PendingIntent.FLAG_ONE_SHOT); sendSMS(phoneNo, message); Toast.makeText(TinySMS.this, \"请重新输入电话号码和短信内容\", Toast.LENGTH_LONG).show(); } else { manager.sendTextMessage( address, null, 第 41 页 共 47 页 人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院 } } content, sentIntent, null); 如果要发短信,还需在AndroidManifest.xml中声明权限: 2、 手机上有多种传感器,可以对这些传感器进行编程。 相机拍摄: package com.android.cameraAndroid; import android.app.Activity; import android.os.Bundle; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import android.content.Context; import android.content.Intent; import android.graphics.PixelFormat; 第 42 页 共 47 页 人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院 import android.hardware.Camera; import android.hardware.Camera.Parameters; import android.hardware.Camera.PictureCallback; import android.hardware.Camera.ShutterCallback; import android.media.AudioManager; import android.media.ToneGenerator; import android.net.Uri; import android.os.Environment; import android.os.StatFs; import android.view.Menu; import android.view.MenuItem; import android.view.SurfaceHolder; import android.view.SurfaceView; public class CameraAndroid extends Activity { private CameraPreview preview; private Camera camera; private ToneGenerator tone; private static final int OPTION_SNAPSHOT = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); preview = new CameraPreview(this); setContentView(preview); } @Override public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); switch(itemId){ case OPTION_SNAPSHOT: //拍摄照片 camera.takePicture(shutterCallback, null, jpegCallback); break; } return true; } //返回照片的JPEG格式的数据 private PictureCallback jpegCallback = new PictureCallback(){ public void onPictureTaken(byte[] data, Camera camera) { Parameters ps = camera.getParameters(); 第 43 页 共 47 页 人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院 if(ps.getPictureFormat() == PixelFormat.JPEG){ //存储拍照获得的图片 String path = save(data); //将图片交给Image程序处理 Uri uri = Uri.fromFile(new File(path)); Intent intent = new Intent(); intent.setAction(\"android.intent.action.VIEW\"); intent.setDataAndType(uri, \"image/jpeg\"); startActivity(intent); } } }; //快门按下的时候onShutter()被回调 private ShutterCallback shutterCallback = new ShutterCallback(){ public void onShutter() { if(tone == null) //发出提示用户的声音 tone = new ToneGenerator(AudioManager.STREAM_MUSIC, ToneGenerator.MAX_VOLUME); tone.startTone(ToneGenerator.TONE_PROP_BEEP2); } }; private String save(byte[] data){ String path = \"/sdcard/\"+System.currentTimeMillis()+\".jpg\"; try { //判断SD卡上是否有足够的空间 String storage = Environment.getExternalStorageDirectory().toString(); StatFs fs = new StatFs(storage); long available = fs.getAvailableBlocks()*fs.getBlockSize(); if(available e.printStackTrace(); return null; } return path; } @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, OPTION_SNAPSHOT, 0, R.string.snapshot); return super.onCreateOptionsMenu(menu); } class CameraPreview extends SurfaceView implements SurfaceHolder.Callback { SurfaceHolder mHolder; public CameraPreview(Context context) { super(context); mHolder = getHolder(); mHolder.addCallback(this); mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } //Sureface创建的时候,此方法被调用 public void surfaceCreated(SurfaceHolder holder) { //打开摄像头,获得Camera对象 camera = Camera.open(); try { //设置显示 camera.setPreviewDisplay(holder); } catch (IOException exception) { camera.release(); camera = null; } } //Surface销毁的时候,此方法被调用 public void surfaceDestroyed(SurfaceHolder holder) { camera.stopPreview(); //释放Camera camera.release(); camera = null; } 第 45 页 共 47 页 人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院 } } public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { //已经获得Surface的width和height,设置Camera的参数 Camera.Parameters parameters = camera.getParameters(); parameters.setPreviewSize(w, h); camera.setParameters(parameters); //开始预览 camera.startPreview(); } 拍摄模拟: 三.项目实训 1.同学通讯录的设计 设计一个同学录,能添加、删除、修改、查询同学的基本信息(可以包括同学图片,视频和音频内容),可以列表,控制滚动条和滑动手势。 2. 音乐播放器的设计 设计一个简单的音乐播放器,能查看所有音乐列表,播放界面具备播放、暂停、停止、显示音乐信息、进度条等功能,并可以创建、删除用户自定义的播放列表。 第 46 页 共 47 页 人机交互技术实验指导书 山东大学计算机科学技术学院,齐鲁软件学院 项目二:网络聊天系统 类似手机MSN、QQ的聊天工具软件,具备文本聊天、设置、个人资料管理、好友管理、查看聊天记录、更改在线状态等功能。 项目三:手机应用超市Android客户端 设计手机应用超市Android客户端,有应用分类、排行、搜索、下载、收藏、试听、安装/卸载等功能,并具备简单的用户注册、登录、信息查询等管理功能。 第 47 页 共 47 页 因篇幅问题不能全部显示,请点此查看更多更全内容