计算机综合实践报告Word文档格式.docx
《计算机综合实践报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《计算机综合实践报告Word文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
1
1.1功能需求分析
1.1.1播放器的基本功能
1.1.2功能需求时序分析
2
1.2系统结构流程图
3
1.3系统界面需求
1.4开发环境
4
2、音乐播放器详细设计与实现
2.1播放器界面设计
2.2获取并解析XML文件
6
2.3下载MP3文件
9
2.4播放MP3文件
10
1、系统需求分析
1.1功能需求分析
根据项目的目标,我们可获得项目系统的基本需求,一下从不同角度来描述系统的需求,并且使用用例图来描述,系统的功能需求,播放器的基本控制需求。
以下分别描述:
1.1.1播放器的基本功能
退出
图4-1播放器基本控制图
在播放器运行时,主界面是服务器的歌曲列表,可以点击刷新列表,也可以点击歌曲名,开始下载歌曲,然后点击本地歌曲列表可以显示出本地的歌曲文件,点击文件名则跳转到播放界面,在播放界面可以控制歌曲的播放、暂停、停止以及返回本地歌曲列表。
1.1.2功能需求时序分析
图4-2音乐播放器的时序图
从以上时序图可以看到播放器中消息发送及调用过程。
1.2系统结构流程图
图4-3音乐播放器系统流程图
以上显示了播放器的各个流程。
1.3系统界面需求
播放器界面要求布局合理,简约,颜色舒适,控制按钮友好,能让用户一眼就能看出各个按钮的作用及操作方法。
能实现要求的功能,但又不重复。
要考虑到不同手机屏幕大小可能不一样,应尽量兼容大多数手机屏幕尺寸,使之显示无障碍。
1.4开发环境
操作系统:
Windows7x64。
开发环境:
EclipseVersion:
IndigoServiceRelease1
ADTVersion:
16.0.1
运行环境:
Android2.2
2、音乐播放器详细设计与实现
2.1播放器界面设计
首先是创建一个主界面MainActivity,它使用TabHost布局,这里面的TabWidget控件控制着两个Activity的互相切换:
一个是Mp3PlayerListActivity(图5-1),这个Activity是一打开程序就显示的服务器歌曲列表。
图5-1Mp3PlayerListActivity
另一个是LocalActivity(图5-2),这个Activity是点击TabWidget控件中的“本地”按钮才会显示的本地歌曲列表界面。
图5-2LocalActivity
在LocalActivity中点击列表中的歌曲名就会调出PlayerActivity(图5-3),这个Activity就是播放音乐时的界面,其中有一些对播放器进行控制的控件。
图5-3PlayerActivity
详细设计代码见附录。
2.2获取并解析XML文件
因为打开播放器首先就要刷新服务器上的歌曲列表,那么我们就得获取服务器上的歌曲列表文件,即XML文件。
实现代码如下:
//根据URL下载文本文件,必须是文本文件,因为返回值是文本中的字符
publicStringdownload(StringurlStr){
StringBuildersb=newStringBuilder();
Stringline=null;
BufferedReaderbuffer=null;
try{
//创建一个URL对象
URLurl=newURL(urlStr);
//创建一个http连接
HttpURLConnectionurlConn=(HttpURLConnection)url
.openConnection();
//使用io读取数据
buffer=newBufferedReader(newInputStreamReader(
urlConn.getInputStream()));
//一行行的读取数据
while((line=buffer.readLine())!
=null){
sb.append(line);
}
}catch(Exceptione){
e.printStackTrace();
}finally{
//关闭buffer节约资源
buffer.close();
}catch(Exceptione2){
e2.printStackTrace();
//将读取到的文本文件中的内容传回去
returnsb.toString();
从服务器上下载到XML中的文本后就要开始解析,在开始解析之前我们先来了解一下服务器上用来保存歌曲信息的XML文件。
图5-2XML文件结构图
从上图中可以看出所有的歌曲信息是包含在一个resources标签当中的,而每一个resource标签就代表一首歌曲,其中的id、mp3.name、lrc.name、lrc.size标签都分表代表了歌曲的一条信息。
在我所设计的播放器中所用到是实现SAX(SimpleAPIforXML)接口的方式来解析XML文件,解析的实现代码如下:
//开始解析XML文件中的每一个标签时调用的方法
@Override
publicvoidstartElement(Stringuri,StringlocalName,StringqName,
Attributesattr)throwsSAXException{
//将从XML文件中读取到的标签名赋值给tagName
tagName=localName;
//如果标签名为resource时就创建一个mp3Info的实例对象
if(tagName.equals("
resource"
)){
mp3Info=newMp3Info();
//解析完XML文件中的每一个标签时调用的方法
publicvoidendElement(Stringuri,StringlocalName,StringqName)
throwsSAXException{
//每次读取到resource标签就代表一首歌曲的信息已经完成,并将次mp3Info加到infos当中
if(qName.equals("
infos.add(mp3Info);
//每读完一个标签就清空tagName,以免出错
tagName="
"
;
//读取XML文件中没一个标签中内容
publicvoidcharacters(char[]ch,intstart,intlength)
//将读取到的内容赋值给temp
Stringtemp=newString(ch,start,length);
//将每个标签中的内容赋值给mp3Info实例对象中相应的变量
id"
mp3Info.setId(temp);
}elseif(tagName.equals("
mp3.name"
mp3Info.setMp3Name(temp);
mp3.size"
mp3Info.setMp3Size(temp);
lrc.name"
mp3Info.setLrcName(temp);
lrc.size"
mp3Info.setLrcSize(temp);
2.3下载MP3文件
根据URL的地址从服务器上下载文件,因为下载不可能是一瞬间就能完成的事,如果我们在主线程中进行下载,那么下载过程中程序就会出现假死状态,因为它在等待文件下载完成,下载完成才能执行后面的操作,所以我们需要用一个线程来进行下载任务,实现代码如下:
//每次用户点击ListActivity当中的一个条目时,就会调用该方法
publicintonStartCommand(Intentintent,intflags,intstartId){
//从Intent对象当中将Mp3Info对象取出
Mp3Infomp3Info=(Mp3Info)intent.getSerializableExtra("
mp3Info"
);
//生成一个下载线程,并将Mp3Info对象作为参数传递到线程对象当中
DownloadThreaddownloadThread=newDownloadThread(mp3Info);
//启动新线程
Threadthread=newThread(downloadThread);
thread.start();
returnsuper.onStartCommand(intent,flags,startId);
classDownloadThreadimplementsRunnable{