音乐播放器实习报告.docx
- 文档编号:7755528
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:19
- 大小:29.42KB
音乐播放器实习报告.docx
《音乐播放器实习报告.docx》由会员分享,可在线阅读,更多相关《音乐播放器实习报告.docx(19页珍藏版)》请在冰豆网上搜索。
音乐播放器实习报告
武汉工程大学
计算机科学与工程学院
认识实习报告
专业
计算机科学与技术
班级
学号
学生姓名
指导教师
陈艳(讲师)
实习时间
2014~2015学年第1学期
2014.9.1至2014.9.5
实习成绩
武汉工程大学计算机科学与工程学院制
说明:
1、实习指导教师由学院校内教师担任,负责组织实习、学生管理、参加实习答辩、实习成绩评定、给出实习评语等工作。
2、实习报告由武汉工程大学计算机科学与工程学院提供基本格式(适用于学院各专业),各专业教研室和指导教师可根据本专业特点及实习内容做适当的调整,学生须按指导教师下达的实习报告格式认真进行填写。
3、实习成绩由指导教师根据学生的实习情况给出各项分值及总评成绩。
4、指导教师评语一栏由实习指导教师就学生在整个实习期间的表现给出客观、全面的评价,包括实习期间的表现、实习报告的质量等。
5、实习报告正文字数应不少于5000字,实习日记字数不少于300字/天。
6、实习报告正文中实习目的与任务、实习地点、实习内容和要求等项,可由指导教师统一给出。
认识实习成绩评定表
学生姓名:
学号:
班级:
类别
总分值
各项分值
评分标准
实际得分
总得分
备注
实习表现
30
15
按时参加各项实习活动,无旷课、迟到、早退等情况。
15
遵守实习单位纪律和安排,无违反实习单位规定的情况;听从指导教师的安排,无不服从教师管理的现象。
实习报告
70
20
报告能对全过程的实习内容进行系统的总结,并能运用所学专业知识对问题加以分析,并有一定的见解。
20
实习报告文字通顺,内容翔实,论述充分、完整,结构严谨合理。
10
具有收集、加工各种信息及获得新知识的能力。
10
实习报告字数符合相关要求,实习报告工整规范,整齐划一。
10
实习日记(笔记)次数及内容符合要求。
总评成绩:
分
补充说明:
指导教师:
(签字)
日期:
2014年9月日
指导教师评语
指导教师:
(签字)
日期:
2014年9月日
一、实习目的与任务
认识实习是信息技术专业学生在完成基础课学习转入到专业课学习阶段的一个极其重要的实践教学环节。
其目的是通过实地参观和听取专业报告等多种方式,使学生进一步了解本专业及相关领域的发展现状,以及相关产品的研发过程和管理手段。
通过实习,使学生通过软件开发的实践训练,进一步掌握设计开发软件的方法与技术,学会数据的组织方法,提高软件开发的实际能力,培养创造性的工程设计能力和分析、解决问题的能力。
具体的任务包括:
1.深化已学的理论知识,完成理论到实践的转化,让学生对软件开发领域的最新技术有本质的了解,并能熟练运用。
通过电子商务网购平台的研发,让学生熟练操作各种开发平台,并能按照CMM3规范,和软件开发的流程开发一个小型项目;
2.提高分析和解决实际问题的能力,让学生有高质量的就业IT行业的机会。
培养“开拓创新”能力。
大力提倡和鼓励在开发过程中使用新方法、新技术,激励学生实践的积极性和创造性,开拓思路,设计新算法、新创意,培养创造性的工程设计能力。
3.了解信息技术产品的研发过程、信息系统的设计、信息系统的技术与管理等专业知识;了解计算机、通信等相关领域的发展现状和最新的科研成果,及在生产科研中的应用;巩固学生的理论知识,培养学生的实践能力、创新能力,拓宽学生视野,树立努力学习专业知识的信心,并为学习后续课程打下一定的实践基础;
4.增强劳动观念,树立正确的劳动观和价值观。
二、实习地点
软帝(Ruandy)信息科技有限公司,武汉光谷金融港
三、实习内容和要求
本次实习在软帝信息科技有限公司的实习基地进行。
要求学生在5天的实习期间,在教师的指导下熟悉JavaAndroid开发平台,掌握APP开发的基本方法和技巧,完成一个小型APP的设计和开发。
四、实习总结及分析
1)、搭建Android开发环境
Android需要运行环境才能够运行,下面介绍Android的开发环境配置。
搭建开发环境需要的软件:
1.操作系统:
WindowsXP;
2.软件包:
AndroidSDK(SoftwareDevelopmentkitJavaDevelopmentkit)、ADT(AndroidDevelopmentTool)
3.IDE环境:
EclipseIDE+ADTEclipse3.3以上
4.JDK:
JavaRuntimeEnvironment虚拟机、(JDK)JavaDevelopmentkit
安装步骤如下:
第一步:
安装Java虚拟机sun-java6-jdk版本;
第二步:
安装Eclipse3.5工具;
第三步:
安装AndroidSDK;
第四步:
安装AndroidADT插件,将地址栏中选择android-sdk-windows所在的目录,点击OK;单击new按钮,新建一个安卓虚拟机,在name栏中输入名字,将target选中,然后设置size,单击createAVD按钮,其中name栏是所创建虚拟机的名字,target栏是需要的ADT的版本,size用来设置安卓虚拟机的大小。
单击start按钮随后单击lanuch(执行)按钮,就会弹出安卓虚拟机界面。
2)、Android音乐播放器的工程
Android工程基本结构目录包括:
src(源代码)、gen(Android系统自动生成的常量)、Res(资源文件):
主要存放程序界面的布局配置(.xml)文件和图片资源。
AndroidMainfes.xml是四大组件的驱动配置文件,有它的存在,Android程序的四大组件才可以正常的跳转
3)、Android相关组件
activity——应用表示层(基类activity)
应用程序中的每个屏幕都是通过继承和扩展基类activity来实现的。
同一应用中的每个activity是相互独立的。
程序启动后显示的第一幅画面是应用程序的第一个activity(默认窗口),而后可以根据需要从这个activity启动另一个新的activity。
activity利用view来实现应用中的gui(用户直接通过gui和应用程序做交互)。
activity窗口内的可见内容通过基类view提供。
使用activity.setcontentview()方法设置当前activity中的view对象。
service——没有可见的用户界面,但能够长时间运行于后台(基类service)。
运行于应用程序进程的主线程中,因此service不会阻塞其他组件和用户界面。
service是不能自己启动的,必须通过context对象(如一个activity)调用startservice或bindservice方法来启动(用这两种方法启动的service的生命周期不同)。
broadcastreceiver——用户接收广播通知的组件(基类broadcastreceiver)。
android中的广播要么来自于系统,要么来自普通应用程序。
很多事件都可能导致系统广播,如手机所在时区发生变化,电池电量低,用户改变系统语言设置等。
来自普通应用程序,如一个应用程序通知其他应用程序某些数据已经下载完毕。
contentprovider——为解决应用程序间数据通信、共享的问题(基类contentprovider)
在android中,每个应用程序都是用自己的用户id并在自己的进程中运行。
这样的好处是,可以有效地保护系统及应用程序,避免被其他不正常德应用程序所影响,每个进程都拥有独立的进程地址空间和虚拟空间。
contentprovider——可以将应用程序特定的数据提供给另一个应用程序使用。
其数据存储方式可以是android文件系统、sqlite数据库或者其他合理的方式。
当数据需要在应用程序间共享时,我们就可以利用contentprovider为数据定义一个uri。
之后,其他应用程序对数据进行查询或者修改时,只需要从当前上下文对象获得一个contentresolver,然后传入响应的uri就可以了。
intent——连接组件的纽带。
以上4种基本组件中,除了contentprovider是通过contentresolver激活外,其他3种组件activity、service和broadcastreceiver都是由intent异步消息激活的。
intent在不同的组件之间传递消息,将一个组件的请求意图传给另一个组件。
因此,intent是包含具体请求信息的对象。
intent是一种运行时绑定(runtimebinding)机制,它能够在程序运行的过程中连接两个不同的组件。
通过intent,你的程序可以向android表到某种请求或者意愿,android会根据意愿的内容选择适当的组件来处理请求。
4)、Androidxml文件
在安卓工程中,大量使用了xml文件,比如界面布局文件,字符资源文件,风格style文件,简单图形文件等。
比如在界面布局文件中,通过指定控件的排列方式、间隔像素、对齐方式等,达到对页面进行布局的目的,同时使用特定编辑器,实时解析布局文件,到达所见即所得的目的。
5)、程序界面activity类的设计
程序的界面musictestactivity类是程序的主要部分,设计到界面所有控件的操作及设计、程序的流程控制及音乐播放的核心部分。
字段mediaplayer是音乐播放的核心变量,进行音乐播放,处理器mhandle是对音乐播放流程进行管理的变量,然后六个监听器是对按钮及进度条的变化进行及时响应,剩下的都是辅助标记变量,标记当前播放信息,以及控制参数信息。
播放音乐文件采用MediaPlayer,音乐的播放应在后台进行,所以MediaPlayer应该在一个Service中,用户操作Activity上的控件,所以当用户操作时,应该通过Intent传递一些参数给Service,后者根据这些参数来控制MediaPlayer的播放。
当用户进行了操作,Service这时也响应了操作以后,需要对Activity进行的ui进行更新,这时则需要
通过BroadCastReciver来进行对Activity的更新,同时Service需要通过一个Notification被置为前台.BroadCastReciver因为要对更新Activity,所以最好是作为需要被更新Activity的内部类。
6)、程序运行效果
在手机上运行,程序可以流畅地播放音乐,无卡顿现象,实时准确地显示播放进度信息,并调整控制音量大小。
按钮上一曲、下一曲及停止都可以正确地作用,暂停按钮在音乐播放的时候可以正确显示并作用,当被点击之后,即显示为播放按钮,此时点击该按钮也可以正确播放音乐。
经测试,最终得到的程序可以在手机上运行,并无任何bug及程序不响应现象。
7)、关键代码
此代码的主要功能是用来使音乐播放器在进行播放前,从手机存储设备中过滤出后缀名为MP3的文件,一层一层往下找,不限于根目录下,知道最后没有子文件夹为止。
publicclassMusicFilterimplementsjava.io.FileFilter{
publicbooleanaccept(Filepathname){
booleanb=false;
if(pathname.isDirectory()){
b=true;
}else{
if(pathname.getName().endsWith(".mp3")){
b=true;
}else{
b=false;
}
}
returnb;
}
}
下面为程序主要代码主要实现的功能为:
设置播放器音量大小,音乐进度拖拉条,上一首,下一首,播放,停止,歌曲时间显示;
publicclassMusicTestActivityextendsListActivity{
//用来存放音乐文件路径
privateArrayList
//用来存放音乐文件名字
privateArrayList
//音乐路径.<常量>
privatefinalStringMUSIC_PUTH="/sdcard/";
//播放对象
privateMediaPlayermediaPlayer;//音乐例表中当前要播放音乐文件的索引
privateintcurrentListItem;//图片按钮的申明
privateImageButtonimageStop;
privateImageButtonimagePause;
privateImageButtonimageLast;
privateImageButtonimageStart;
privateImageButtonimageNext;//关于音量的变量
privateAudioManageraudioManager;//最大音量
privateintmaxVolume;//当前音量
privateintcurrentVolume;//音量拖动条
privateSeekBarsoundBar;//显示时间的控件
privateTextViewtv;//音乐的进度条
privateSeekBarmusicBar;//过虑器
privateMusicFiltermf;//用来标记是否为播放状态(0:
初始状态,1:
播放状态,2:
暂停状态)
privateintfalg=0;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mf=newMusicFilter();//播放对象初始化
mediaPlayer=newMediaPlayer();//调用音乐绑定方法
this.musicList();//将5个按钮进行初始化
imageStop=(ImageButton)this.findViewById(R.id.imageStop);
//imagePause=(ImageButton)this.findViewById(R.id.imagePause);
imageLast=(ImageButton)this.findViewById(R.id.imageLast);
imageStart=(ImageButton)this.findViewById(R.id.imageStart);
imageNext=(ImageButton)this.findViewById(R.id.imageNext);
//获取系统声音管理器
audioManager=(AudioManager)this.getSystemService(Context.AUDIO_SERVICE);
//获取系统声音的最大值
maxVolume=audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
//获取系统当前的声音值大小
currentVolume=audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
//初始化音量拖动条
soundBar=(SeekBar)this.findViewById(R.id.soundBar);
//设置音量拖动条的最大值
soundBar.setMax(maxVolume);
//设置音量拖动条的当前值
soundBar.setProgress(currentVolume);
//时间显示控件初始化
tv=(TextView)this.findViewById(R.id.textView1);
//把音乐播放进度条进行初始化
musicBar=(SeekBar)this.findViewById(R.id.musicBar);
//调用listener方法
this.listener();
}
//递归....通过递归把sdcard里面所有的音乐文件中的路径和音乐名字分区保存到(musiclist和musicnamelist)中
privatevoidshowInfo(Stringpath){
Filef=newFile(path);//先实现文件类对象
File[]fileList=f.listFiles(mf);
if(fileList!
=null){
for(inti=0;i if(fileList[i].isFile()){ musiclist.add(fileList[i].getAbsolutePath()); musicnamelist.add(fileList[i].getName()); } if(fileList[i].isDirectory()){//判断是否是一个目录如果是就递归 showInfo(fileList[i].getPath()); } } } } privatevoidmusicList(){ //调用上面的递归方法.把sdcard里面的所有音乐文件的名字和路径分区保存到(musiclist和musicnamelist)这两个容器中 showInfo(MUSIC_PUTH); //1设置面板容器2设置布局3音乐例表 ArrayAdapter (MusicTestActivity.this,R.layout.musicitem,musicnamelist); //将适配器里面的数据添充到ListView(例表视图)中 this.setListAdapter(adap); } publicStringtoTime(inttime){ time/=1000; intminute=time/60; inthour=minute/60; intsecond=time%60; minute%=60; returnString.format("%02d: %02d",minute,second); } privatevoidplayMusic(Stringpath){ try{ mediaPlayer.reset();//先重置一下 mediaPlayer.setDataSource(path);//设置音乐文件的路径 mediaPlayer.prepare();//准备 mediaPlayer.setLooping(true);//循环播放 mediaPlayer.start();//开始播放 //设置音乐拖动度的当前进度初始值 musicBar.setProgress(mediaPlayer.getCurrentPosition()); //设置音乐拖动条的最大值 musicBar.setMax(mediaPlayer.getDuration()); //System.out.println("当前正在播放的歌曲时间是: "+mediaPlayer.getDuration()); //显示出来当前音乐的时间 tv.setText(toTime(mediaPlayer.getCurrentPosition())+"/"+toTime(mediaPlayer.getDuration())); //当歌曲开始播放时.线程也开始运行 this.startProgressUpdate(); }catch(IllegalArgumentExceptione){ e.printStackTrace(); }catch(IllegalStateExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); } } privateHandlermHandle=newHandler(){ publicvoidhandleMessage(Messagemsg){ //对音乐显示时间每一秒钟付值一次 tv.setText(toTime(mediaPlayer.getCurrentPosition())+"/"+toTime(mediaPlayer.getDuration())); //不断将音乐播放的位置赋值给MusicBar... musicBar.setProgress(mediaPlayer.getCurrentPosition()); } }; //申明一个线程类 publicclassthextendsThread{ //实例化此类的用户会转一个时间毫秒数进来付值给i inti; //构造方法 publicth(inti){ this.i=i; } //线程方法 publicvoidrun(){ while(true){ try{ this.sleep(i); }catch(InterruptedExceptione){ e.printStackTrace(); } mHandle.sendEmptyMessage(0); } } } //开辟Thread用于定期刷新SeekBar,改变音乐时间 publicvoidstartProgressUpdate(){ tht=newth(1000);//初始化线程类转入1000毫秒 t.start();//开启一个线程 } //当用户返回时结束音乐并释放音乐对象 publicbooleanonKeyDown(intkeyCode,KeyEventevent){ if(keyCode==KeyEvent.KEYCODE_BACK){//音乐停止 //
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 音乐 播放 实习 报告