音乐播放器实习报告_第1页
音乐播放器实习报告_第2页
音乐播放器实习报告_第3页
音乐播放器实习报告_第4页
音乐播放器实习报告_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、武汉工程大学计算机科学与工程学院认识实习报告专 业计算机科学与技术班 级学 号学 生 姓 名指 导 教 师陈艳(讲师)实 习 时 间20142015学年第1学期2014.9.1至2014.9.5实 习 成 绩武汉工程大学计算机科学与工程学院 制说明:1、 实习指导教师由学院校内教师担任,负责组织实习、学生管理、参加实习答辩、实习成绩评定、给出实习评语等工作。2、 实习报告由武汉工程大学计算机科学与工程学院提供基本格式(适用于学院各专业),各专业教研室和指导教师可根据本专业特点及实习内容做适当的调整,学生须按指导教师下达的实习报告格式认真进行填写。3、 实习成绩由指导教师根据学生的实习情况给出各

2、项分值及总评成绩。4、 指导教师评语一栏由实习指导教师就学生在整个实习期间的表现给出客观、全面的评价,包括实习期间的表现、实习报告的质量等。5、 实习报告正文字数应不少于5000字,实习日记字数不少于300字/天。6、 实习报告正文中实习目的与任务、实习地点、实习内容和要求等项,可由指导教师统一给出。认识实习成绩评定表学生姓名: 学号: 班级: 类别总分值各项分值评分标准实际得分总得分备注实习表现3015按时参加各项实习活动,无旷课、迟到、早退等情况。15遵守实习单位纪律和安排,无违反实习单位规定的情况;听从指导教师的安排,无不服从教师管理的现象。实习报告7020报告能对全过程的实习内容进行系

3、统的总结,并能运用所学专业知识对问题加以分析,并有一定的见解。20实习报告文字通顺,内容翔实,论述充分、完整,结构严谨合理。10具有收集、加工各种信息及获得新知识的能力。10实习报告字数符合相关要求,实习报告工整规范,整齐划一。10实习日记(笔记)次数及内容符合要求。总评成绩: 分补充说明: 指导教师: (签字)日 期: 2014 年 9 月 日指导教师评语指导教师: (签字)日 期: 2014 年 9 月 日武汉工程大学计算机科学与工程学院 认识实习报告一、实习目的与任务认识实习是信息技术专业学生在完成基础课学习转入到专业课学习阶段的一个极其重要的实践教学环节。其目的是通过实地参观和听取专业

4、报告等多种方式,使学生进一步了解本专业及相关领域的发展现状,以及相关产品的研发过程和管理手段。通过实习,使学生通过软件开发的实践训练,进一步掌握设计开发软件的方法与技术,学会数据的组织方法,提高软件开发的实际能力,培养创造性的工程设计能力和分析、解决问题的能力。具体的任务包括:1深化已学的理论知识,完成理论到实践的转化,让学生对软件开发领域的最新技术有本质的了解,并能熟练运用。通过电子商务网购平台的研发,让学生熟练操作各种开发平台,并能按照cmm3规范,和软件开发的流程开发一个小型项目;2提高分析和解决实际问题的能力,让学生有高质量的就业it行业的机会。培养“开拓创新”能力。大力提倡和鼓励在开

5、发过程中使用新方法、新技术,激励学生实践的积极性和创造性,开拓思路,设计新算法、新创意,培养创造性的工程设计能力。3了解信息技术产品的研发过程、信息系统的设计、信息系统的技术与管理等专业知识;了解计算机、通信等相关领域的发展现状和最新的科研成果,及在生产科研中的应用;巩固学生的理论知识,培养学生的实践能力、创新能力,拓宽学生视野,树立努力学习专业知识的信心,并为学习后续课程打下一定的实践基础;4增强劳动观念,树立正确的劳动观和价值观。二、实习地点软帝(ruandy)信息科技有限公司,武汉光谷金融港三、实习内容和要求本次实习在软帝信息科技有限公司的实习基地进行。要求学生在5天的实习期间,在教师的

6、指导下熟悉java android开发平台,掌握app开发的基本方法和技巧,完成一个小型app的设计和开发。四、实习总结及分析1)、搭建android开发环境android需要运行环境才能够运行,下面介绍android的开发环境配置。搭建开发环境需要的软件: 1. 操作系统:windows xp;2. 软件包:android sdk(software development kit java development kit) 、adt(android development tool) 3. ide环境:eclipse ide+adt eclipse3.3以上 4. jdk:java runt

7、ime environment虚拟机 、(jdk)java development kit 安装步骤如下:第一步:安装java虚拟机sun-java6-jdk版本;第二步:安装eclipse3.5工具;第三步:安装android sdk;第四步:安装android adt插件,将地址栏中选择android-sdk-windows所在的目录,点击ok;单击new按钮,新建一个安卓虚拟机,在name栏中输入名字,将target选中,然后设置size,单击create avd按钮,其中name栏是所创建虚拟机的名字,target栏是需要的adt的版本,size用来设置安卓虚拟机的大小。单击start

8、按钮随后单击lanuch(执行)按钮,就会弹出安卓虚拟机界面。2)、android 音乐播放器的工程android工程基本结构目录包括:src (源代码)、gen(android系统自动生成的常量)、res(资源文件):主要存放程序界面的布局配置(.xml)文件和图片资源。androidmainfes.xml 是四大组件的驱动配置文件,有它的存在,android程序的四大组件才可以正常的跳转3)、android相关组件activity 应用表示层(基类activity)应用程序中的每个屏幕都是通过继承和扩展基类activity来实现的。同一应用中的每个activity是相互独立的。程序启动后显

9、示的第一幅画面是应用程序的第一个activity(默认窗口),而后可以根据需要从这个activity启动另一个新的activity。activity利用view来实现应用中的gui(用户直接通过gui和应用程序做交互)。activity窗口内的可见内容通过基类view提供。使用activity.setcontentview()方法设置当前activity中的view对象。service 没有可见的用户界面,但能够长时间运行于后台(基类service)。运行于应用程序进程的主线程中,因此service不会阻塞其他组件和用户界面。 service是不能自己启动的,必须通过context对象(如一个

10、activity)调用startservice或bindservice方法来启动(用这两种方法启动的service的生命周期不同)。broadcast receiver 用户接收广播通知的组件(基类broadcastreceiver)。android中的广播要么来自于系统,要么来自普通应用程序。很多事件都可能导致系统广播,如手机所在时区发生变化,电池电量低,用户改变系统语言设置等。来自普通应用程序,如一个应用程序通知其他应用程序某些数据已经下载完毕。content provider 为解决应用程序间数据通信、共享的问题(基类contentprovider)在android中,每个应用程序都是用

11、自己的用户id并在自己的进程中运行。这样的好处是,可以有效地保护系统及应用程序,避免被其他不正常德应用程序所影响,每个进程都拥有独立的进程地址空间和虚拟空间。content provider可以将应用程序特定的数据提供给另一个应用程序使用。其数据存储方式可以是android文件系统、sqlite数据库或者其他合理的方式。当数据需要在应用程序间共享时,我们就可以利用contentprovider为数据定义一个uri。之后,其他应用程序对数据进行查询或者修改时,只需要从当前上下文对象获得一个contentresolver, 然后传入响应的uri就可以了。intent 连接组件的纽带。以上4种基本组

12、件中,除了content provider是通过content resolver激活外,其他3种组件activity、service和broadcast receiver都是由intent异步消息激活的。intent在不同的组件之间传递消息,将一个组件的请求意图传给另一个组件。因此,intent是包含具体请求信息的对象。intent是一种运行时绑定(runtime binding)机制,它能够在程序运行的过程中连接两个不同的组件。通过intent,你的程序可以向android表到某种请求或者意愿,android会根据意愿的内容选择适当的组件来处理请求。4)、 android xml文件在安卓工

13、程中,大量使用了xml文件,比如界面布局文件,字符资源文件,风格style文件,简单图形文件等。比如在界面布局文件中,通过指定控件的排列方式、间隔像素、对齐方式等,达到对页面进行布局的目的,同时使用特定编辑器,实时解析布局文件,到达所见即所得的目的。5)、程序界面activity类的设计程序的界面musictestactivity类是程序的主要部分,设计到界面所有控件的操作及设计、程序的流程控制及音乐播放的核心部分。 字段mediaplayer是音乐播放的核心变量,进行音乐播放,处理器mhandle是对音乐播放流程进行管理的变量,然后六个监听器是对按钮及进度条的变化进行及时响应,剩下的都是辅助

14、标记变量,标记当前播放信息,以及控制参数信息。播放音乐文件采用mediaplayer,音乐的播放应在后台进行,所以mediaplayer应该在一个service中,用户操作activity上的控件,所以当用户操作时,应该通过intent传递一些参数给service,后者根据这些参数来控制mediaplayer的播放。当用户进行了操作,service这时也响应了操作以后,需要对activity进行的ui进行更新,这时则需要通过broadcastreciver来进行对activity的更新,同时service需要通过一个notification被置为前台.broadcastreciver因为要对更

15、新activity,所以最好是作为需要被更新activity的内部类。6)、程序运行效果在手机上运行,程序可以流畅地播放音乐,无卡顿现象,实时准确地显示播放进度信息,并调整控制音量大小。按钮上一曲、下一曲及停止都可以正确地作用,暂停按钮在音乐播放的时候可以正确显示并作用,当被点击之后,即显示为播放按钮,此时点击该按钮也可以正确播放音乐。经测试,最终得到的程序可以在手机上运行,并无任何bug及程序不响应现象。7)、关键代码此代码的主要功能是用来使音乐播放器在进行播放前,从手机存储设备中过滤出后缀名为mp3的文件,一层一层往下找,不限于根目录下,知道最后没有子文件夹为止。public class

16、musicfilter implements java.io.filefilterpublic boolean accept(file pathname) boolean b = false;if(pathname.isdirectory()b = true;elseif(pathname.getname().endswith(".mp3")b = true;elseb = false;return b ;下面为程序主要代码主要实现的功能为:设置播放器音量大小,音乐进度拖拉条,上一首,下一首,播放,停止,歌曲时间显示;public class musictestactivi

17、ty extends listactivity /用来存放音乐文件路径private arraylist<string> musiclist = new arraylist<string>();/用来存放音乐文件名字private arraylist<string> musicnamelist = new arraylist<string>();/音乐路径.<常量>private final string music_puth = "/sdcard/"/播放对象private mediaplayer mediapl

18、ayer; /音乐例表中当前要播放音乐文件的索引private int currentlistitem; /图片按钮的申明private imagebutton imagestop;private imagebutton imagepause;private imagebutton imagelast;private imagebutton imagestart;private imagebutton imagenext; /关于音量的变量private audiomanager audiomanager ; /最大音量private int maxvolume; /当前音量private i

19、nt currentvolume; /音量拖动条private seekbar soundbar; /显示时间的控件private textview tv ; /音乐的进度条private seekbar musicbar; /过虑器private musicfilter mf;/用来标记是否为播放状态 (0:初始状态,1:播放状态,2:暂停状态)private int falg = 0 ; override public void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate); setconten

20、tview(r.layout.main); mf = new musicfilter();/播放对象初始化 mediaplayer = new mediaplayer(); /调用音乐绑定方法 this.musiclist();/将5个按钮进行初始化 imagestop = (imagebutton)this.findviewbyid(r.id.imagestop);/ imagepause = (imagebutton)this.findviewbyid(r.id.imagepause); imagelast = (imagebutton)this.findviewbyid(r.id.ima

21、gelast); 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);

22、 /获取系统当前的声音值 大小 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.textvie

23、w1); /把音乐播放进度条进行初始化 musicbar =(seekbar) this.findviewbyid(r.id.musicbar); /调用listener方法 this.listener(); /递归.通过递归把sdcard里面所有的音乐文件中的路径和音乐名字分区保存到(musiclist和musicnamelist)中 private void showinfo(string path)file f = new file(path);/先实现文件类对象file filelist = f.listfiles(mf);if(filelist!=null)for (int i =

24、0; i < filelist.length; i+) if(filelisti.isfile()musiclist.add(filelisti.getabsolutepath();musicnamelist.add(filelisti.getname();if(filelisti.isdirectory()/判断是否是一个目录如果是就递归showinfo(filelisti.getpath(); private void musiclist() /调用上面的递归方法.把sdcard里面的所有音乐文件的名字和路径分区保存到(musiclist和musicnamelist)这两个容器中 s

25、howinfo(music_puth); /1设置面板容器 2设置布局3音乐例表 arrayadapter<string>adap=newarrayadapter<string>(musictestactivity.this, r.layout.musicitem, musicnamelist); /将适配器里面的数据添充到listview(例表视图)中 this.setlistadapter(adap); public string totime(int time) time /= 1000;int minute = time / 60;int hour = minu

26、te / 60;int second = time % 60;minute %= 60;return string.format("%02d:%02d", minute, second); private void playmusic(string path) try mediaplayer.reset();/先重置一下mediaplayer.setdatasource(path);/设置音乐文件的路径mediaplayer.prepare();/准备 mediaplayer.setlooping(true);/循环播放 mediaplayer.start();/开始播放/

27、设置音乐拖动度的当前进度初始值musicbar.setprogress(mediaplayer.getcurrentposition();/设置音乐拖动条的最大值musicbar.setmax(mediaplayer.getduration();/system.out.println("当前正在播放的歌曲时间是:" + mediaplayer.getduration();/显示出来当前音乐的时间tv.settext( totime(mediaplayer.getcurrentposition() + " / " + totime(mediaplayer.

28、getduration();/当歌曲开始播放时.线程也开始运行this.startprogressupdate(); catch (illegalargumentexception e) e.printstacktrace(); catch (illegalstateexception e) e.printstacktrace(); catch (ioexception e) e.printstacktrace(); private handler mhandle = new handler()public void handlemessage(message msg) /对音乐显示时间每一秒

29、钟付值一次tv.settext( totime(mediaplayer.getcurrentposition() + " / " + totime(mediaplayer.getduration() );/不断将音乐播放的位置赋值给musicbar.musicbar.setprogress(mediaplayer.getcurrentposition(); ; /申明一个线程类 public class th extends thread /实例化此类的用户会转一个时间毫秒数进来付值给i int i ; /构造方法 public th(int i) this.i = i;

30、/线程方法 public void run() while(true) try this.sleep(i); catch (interruptedexception e) e.printstacktrace();mhandle.sendemptymessage(0); /开辟thread 用于定期刷新seekbar,改变音乐时间 public void startprogressupdate() th t = new th(1000);/初始化线程类转入1000毫秒 t.start();/开启一个线程 /当用户返回时结束音乐并释放音乐对象public boolean onkeydown(int

31、 keycode, keyevent event) if(keycode = keyevent.keycode_back)/音乐停止/mediaplayer.stop();/可以释放播放器占用的资源,一旦确定不再使用播放器时应当尽早调用它释放资源。/mediaplayer.release();/结束/this.finish();system.exit(0);return true;protected void onlistitemclick(listview l, view v, int position, long id) /获取到当前点击的音乐文件索引 this.currentlistit

32、em = position ;/调用playmusic方法进行音乐播放并传入音乐的文件路径this.playmusic(musiclist.get(currentlistitem) ) ;imagestart.setimageresource(r.drawable.pause);falg = 1;private void listener()/音乐播放进度条的事件处理musicbar.setonseekbarchangelistener(new onseekbarchangelistener() public void onstoptrackingtouch(seekbar seekbar)

33、/把音乐播放进度条的当前位置 的值赋给mediaplayer.mediaplayer.seekto(seekbar.getprogress();public void onstarttrackingtouch(seekbar seekbar) public void onprogresschanged(seekbar seekbar, int progress,boolean fromuser) );/调声音大小拖动条的事件处理soundbar.setonseekbarchangelistener(new onseekbarchangelistener() public void onstop

34、trackingtouch(seekbar seekbar) /system.out.println("-停止");public void onstarttrackingtouch(seekbar seekbar) /system.out.println("开始-");public void onprogresschanged(seekbar seekbar, int progress,boolean fromuser) /system.out.println("我的值在发生改变:" + progress);/设置音量的大小audio

35、manager.setstreamvolume(audiomanager.stream_music, progress,1););/1.为imagestart这个图片按钮添加一个单击事件imagestart.setonclicklistener(new onclicklistener() public void onclick(view v) /用来标记是否为播放状态 (0:初始状态,1:播放状态,2:暂停状态)if( falg = 0 )/0:初始状态/调playmusic方法进行音乐 播放musictestactivity.this.playmusic(musiclist.get(curr

36、entlistitem);/把播放状态的图片切换成暂停状态的图片imagestart.setimageresource(r.drawable.pause);falg = 1 ;else if(falg = 1)/1:播放状态/暂停播放mediaplayer.pause();/把暂停状态的图片切换成播放状态的图片imagestart.setimageresource(r.drawable.start);falg = 2 ;else if(falg = 2)/2:暂停状态mediaplayer.start();/播放/把暂停状态的图片切换成播放状态的图片imagestart.setimageres

37、ource(r.drawable.pause);falg = 1;);/2.停止按钮进行事件处理()imagestop.setonclicklistener(new onclicklistener() public void onclick(view v) falg = 0 ;imagestart.setimageresource(r.drawable.start);mediaplayer.seekto(0);/musicbar.setprogress(0);mediaplayer.stop();/停止);/4.下一首imagenext.setonclicklistener(new oncli

38、cklistener() public void onclick(view v) falg = 1 ;imagestart.setimageresource(r.drawable.pause);currentlistitem = (currentlistitem+1)%musiclist.size();musictestactivity.this.playmusic(musiclist.get(currentlistitem););/5.上一首imagelast.setonclicklistener(new onclicklistener() public void onclick(view

39、v) falg = 1 ;imagestart.setimageresource(r.drawable.pause);currentlistitem = (currentlistitem-1+musiclist.size()%musiclist.size();musictestactivity.this.playmusic(musiclist.get(currentlistitem);); 五、实习体会5天的实习生活转眼就已过去,在这几天里,我们都有所收获,不管是技能上还是认识上都有所提升。5天的时间,我熟悉了android系统的起源和发展,掌握了android的工作方式并搭建起了androi

40、d开发的环境。在大二已经接触学习了java语言的基础上学习android开发,相对来说轻松了许多。java的基础语法,面向对象的编程方法和思想,消息传递都有点熟悉。期间我学着建立android工程并做一些简单的编程和开发,包括熟悉android开发环境,android工程中各个文件及其作用,到简单的界面布局和控件使用。在这个过程中老师耐心给我们讲解,有什么问题、不懂的地方老师也会帮助解决,所以此次报告的完成里不开老师的支持。然后实习期间,我们得以初步了解我们所学专业的就业前景和工作环境,以及上班后的薪资待遇,还有关于选定方向去学习哪种语言的问题,这大概是很多同学都很迷惑的问题,大学学习的语言确

41、实很多,就目前而言我们就学习了c、c+、java,那么这么多的语言我们该如何取舍呢,要想在短期内精通几门语言无疑是相当难的,所以老师给我们的建议是选择一门语言,尽量在一种语言上有所突出,不然如果学的太杂而零散对找工作是不利的,所以鉴于这一点,我们应该暨早确定自己主修的方向。还有是关于考研的事,现阶段大家都很困惑,对于学习计算机的人来说考研的意义到底大不大,关于这个问题我也获得了初步的认识,考研也是一个学习的过程,在这个过程中自己的技术和熟练度当然会有所提高,同时又拥有了更高的文凭,有它有利的一面。实习是学生了解和认识企业事业单位对专业人才需求的重要途径,是学生进入职场之前,增加对专业认识的一个

42、必不可少的学习阶段。通过实习,增进对从事本专业的自豪感以及责任感,选好入职方向,做好人生职业规划。为毕业之后能够进入工作状态并且能够更好地工作,打好一定的基础,所以此次实习对自己来说是一次很好的锻炼。最后这个音乐播放器程序还有很多不足之处,比如没有实现在点击歌曲是获得歌曲的名字显示在界面上,没有同步显示歌词等功能,希望以后有机会逐步完善。附录:实习日记2014年9月1日星期一这是实习的第一天,一大早我们来到了实习的公司软帝,老师短暂的自我介绍之后,我们的实习生活正式拉开序幕。与学校不同的是老师是通过广播授课,比起学校要费力的盯着投影的确方便很多。如惯例,初次学习当然是从最基本的学起,老师慢慢进

43、入主题,天的实习,我们需要学习如何进行android软件的开发,首先老师给我们讲述android的起源,android一词的本义指“机器人”,同时也是google于2007年11月5日宣布的基于linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。android本是一家公司的名称,这家公司的创始人名叫andy rubin。andy rubin创立了两个手机操作系统公司:danger和android。danger以5亿美元卖给微软,成为了今天的kin,android以4千万美元卖给google。的优点有开放性

44、、应用程序相互平等、应用程序之间沟通无界限和快速方便的应用程序开发。接着我们学习了android开发环境的配置,按照老师的要求新建一个项目,学习过程中,我第一次见识了类似于我们手机界面的android开发虚拟环境看见这样一个东西,同学们都非常兴奋,接下来的几天我们的任务是做一个android软件。2014年9月2日星期二今天我们的主要任务是从开发工具到基本语法,主要是配置安卓sdk环境,建立安卓工程。接着老师给我们讲了android工程中的配置文件,主要包括r.java,main.xml,string.xml文件。其中r.java中的内容为自动生成,无法对其进行修改,在增加或者进行修改代码时会

45、报错。string类给string.xml里面的键值生成的id main.xml文件, 控制activity中空间的位置,每个activity对应一个此布局文件 string.xml,存放键值对,一般用在程序的多语言版本切换(多个文件,键一样,值不同)string.xml用来把应用中出现的文字单独存放在string.xml文中。这样在进行修改的时候就不用修改程序内容。另外一方面为了减少应用的体积,降低数据的冗余。main.xml文件用来对界面进行布局。xml布局资源必须被存储在项目目录的/res/layout下。  另外的还有strc目录用来存放源文件代码,gen目录是adt插件生成的文件(自动生成),assets目录存放资源文件目录不会再r.java中生成id,res目录存放资源文件目录,这里面的每个文件或值都会在r.java中生成一个id,androidman

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论