音乐播放器实习报告.doc

上传人:仙人指路1688 文档编号:3264137 上传时间:2023-03-12 格式:DOC 页数:20 大小:89KB
返回 下载 相关 举报
音乐播放器实习报告.doc_第1页
第1页 / 共20页
音乐播放器实习报告.doc_第2页
第2页 / 共20页
音乐播放器实习报告.doc_第3页
第3页 / 共20页
音乐播放器实习报告.doc_第4页
第4页 / 共20页
音乐播放器实习报告.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《音乐播放器实习报告.doc》由会员分享,可在线阅读,更多相关《音乐播放器实习报告.doc(20页珍藏版)》请在三一办公上搜索。

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天的实习期间,在教师的指导下熟悉Java Android开发平台,掌

6、握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 Runtime Environment虚拟机 、(JD

7、K)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按钮随后单击lanuch(执行)按钮,就会弹出

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

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

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

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

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

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

14、播放音乐文件采用MediaPlayer,音乐的播放应在后台进行,所以MediaPlayer应该在一个Service中,用户操作Activity上的控件,所以当用户操作时,应该通过Intent传递一些参数给Service,后者根据这些参数来控制MediaPlayer的播放。当用户进行了操作,Service这时也响应了操作以后,需要对Activity进行的ui进行更新,这时则需要通过BroadCastReciver来进行对Activity的更新,同时Service需要通过一个Notification被置为前台.BroadCastReciver因为要对更新Activity,所以最好是作为需要被更新A

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

16、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 MusicTestActivity extends ListActivity /用来存放音乐文件路径

17、private ArrayList musiclist = new ArrayList();/用来存放音乐文件名字private ArrayList musicnamelist = new ArrayList();/音乐路径.private final String MUSIC_PUTH = /sdcard/;/播放对象private MediaPlayer mediaPlayer; /音乐例表中当前要播放音乐文件的索引private int currentListItem; /图片按钮的申明private ImageButton imageStop;private ImageButton i

18、magePause;private ImageButton imageLast;private ImageButton imageStart;private ImageButton imageNext; /关于音量的变量private AudioManager audioManager ; /最大音量private int maxVolume; /当前音量private int currentVolume; /音量拖动条private SeekBar soundBar; /显示时间的控件private TextView tv ; /音乐的进度条private SeekBar musicBar;

19、 /过虑器private MusicFilter mf;/用来标记是否为播放状态 (0:初始状态,1:播放状态,2:暂停状态)private int falg = 0 ; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); mf = new MusicFilter();/播放对象初始化 mediaPlayer = new MediaPlayer(); /调用音乐绑定方法 this.musicList(

20、);/将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.findViewByI

21、d(R.id.imageNext); /获取系统声音管理器 audioManager =(AudioManager) this.getSystemService(Context.AUDIO_SERVICE); /获取系统声音的最大值 maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); /获取系统当前的声音值 大小 currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); /初始化音量拖动条 soundBar = (S

22、eekBar)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(); /递归.通过递

23、归把sdcard里面所有的音乐文件中的路径和音乐名字分区保存到(musiclist和musicnamelist)中 private void showInfo(String path)File f = new File(path);/先实现文件类对象File fileList = f.listFiles(mf);if(fileList!=null)for (int i = 0; i fileList.length; i+) if(fileListi.isFile()musiclist.add(fileListi.getAbsolutePath();musicnamelist.add(fileL

24、isti.getName();if(fileListi.isDirectory()/判断是否是一个目录如果是就递归showInfo(fileListi.getPath(); private void musicList() /调用上面的递归方法.把sdcard里面的所有音乐文件的名字和路径分区保存到(musiclist和musicnamelist)这两个容器中 showInfo(MUSIC_PUTH); /1设置面板容器 2设置布局3音乐例表 ArrayAdapteradap=newArrayAdapter(MusicTestActivity.this, R.layout.musicitem,

25、 musicnamelist); /将适配器里面的数据添充到ListView(例表视图)中 this.setListAdapter(adap); public String toTime(int time) time /= 1000;int minute = time / 60;int hour = minute / 60;int second = time % 60;minute %= 60;return String.format(%02d:%02d, minute, second); private void playMusic(String path) try mediaPlayer.

26、reset();/先重置一下mediaPlayer.setDataSource(path);/设置音乐文件的路径mediaPlayer.prepare();/准备 mediaPlayer.setLooping(true);/循环播放 mediaPlayer.start();/开始播放/设置音乐拖动度的当前进度初始值musicBar.setProgress(mediaPlayer.getCurrentPosition();/设置音乐拖动条的最大值musicBar.setMax(mediaPlayer.getDuration();/System.out.println(当前正在播放的歌曲时间是:

27、+ mediaPlayer.getDuration();/显示出来当前音乐的时间tv.setText( toTime(mediaPlayer.getCurrentPosition() + / + toTime(mediaPlayer.getDuration();/当歌曲开始播放时.线程也开始运行this.startProgressUpdate(); catch (IllegalArgumentException e) e.printStackTrace(); catch (IllegalStateException e) e.printStackTrace(); catch (IOExcept

28、ion e) e.printStackTrace(); private Handler mHandle = new Handler()public void handleMessage(Message msg) /对音乐显示时间每一秒钟付值一次tv.setText( toTime(mediaPlayer.getCurrentPosition() + / + toTime(mediaPlayer.getDuration() );/不断将音乐播放的位置赋值给MusicBar.musicBar.setProgress(mediaPlayer.getCurrentPosition(); ; /申明一个

29、线程类 public class th extends Thread /实例化此类的用户会转一个时间毫秒数进来付值给i int i ; /构造方法 public th(int i) this.i = i; /线程方法 public void run() while(true) try this.sleep(i); catch (InterruptedException e) e.printStackTrace();mHandle.sendEmptyMessage(0); /开辟Thread 用于定期刷新SeekBar,改变音乐时间 public void startProgressUpdate

30、() th t = new th(1000);/初始化线程类转入1000毫秒 t.start();/开启一个线程 /当用户返回时结束音乐并释放音乐对象public boolean onKeyDown(int keyCode, KeyEvent event) if(keyCode = KeyEvent.KEYCODE_BACK)/音乐停止/mediaPlayer.stop();/可以释放播放器占用的资源,一旦确定不再使用播放器时应当尽早调用它释放资源。/mediaPlayer.release();/结束/this.finish();System.exit(0);return true;prote

31、cted void onListItemClick(ListView l, View v, int position, long id) /获取到当前点击的音乐文件索引 this.currentListItem = position ;/调用playMusic方法进行音乐播放并传入音乐的文件路径this.playMusic(musiclist.get(currentListItem) ) ;imageStart.setImageResource(R.drawable.pause);falg = 1;private void listener()/音乐播放进度条的事件处理musicBar.set

32、OnSeekBarChangeListener(new OnSeekBarChangeListener() public void onStopTrackingTouch(SeekBar seekBar) /把音乐播放进度条的当前位置 的值赋给mediaPlayer.mediaPlayer.seekTo(seekBar.getProgress();public void onStartTrackingTouch(SeekBar seekBar) public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUse

33、r) );/调声音大小拖动条的事件处理soundBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() public void onStopTrackingTouch(SeekBar seekBar) /System.out.println(-停止);public void onStartTrackingTouch(SeekBar seekBar) /System.out.println(开始-);public void onProgressChanged(SeekBar seekBar, int progress,boolea

34、n fromUser) /System.out.println(我的值在发生改变: + progress);/设置音量的大小audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress,1););/1.为imageStart这个图片按钮添加一个单击事件imageStart.setOnClickListener(new OnClickListener() public void onClick(View v) /用来标记是否为播放状态 (0:初始状态,1:播放状态,2:暂停状态)if( falg = 0 )/0:初始状态/调pl

35、ayMusic方法进行音乐 播放MusicTestActivity.this.playMusic(musiclist.get(currentListItem);/把播放状态的图片切换成暂停状态的图片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:暂

36、停状态mediaPlayer.start();/播放/把暂停状态的图片切换成播放状态的图片imageStart.setImageResource(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);m

37、ediaPlayer.stop();/停止);/4.下一首imageNext.setOnClickListener(new OnClickListener() 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

38、.setOnClickListener(new OnClickListener() public void onClick(View v) falg = 1 ;imageStart.setImageResource(R.drawable.pause);currentListItem = (currentListItem-1+musiclist.size()%musiclist.size();MusicTestActivity.this.playMusic(musiclist.get(currentListItem);); 五、实习体会5天的实习生活转眼就已过去,在这几天里,我们都有所收获,不管

39、是技能上还是认识上都有所提升。5天的时间,我熟悉了android系统的起源和发展,掌握了android的工作方式并搭建起了android开发的环境。在大二已经接触学习了java语言的基础上学习android开发,相对来说轻松了许多。Java的基础语法,面向对象的编程方法和思想,消息传递都有点熟悉。期间我学着建立android工程并做一些简单的编程和开发,包括熟悉android开发环境,android工程中各个文件及其作用,到简单的界面布局和控件使用。在这个过程中老师耐心给我们讲解,有什么问题、不懂的地方老师也会帮助解决,所以此次报告的完成里不开老师的支持。然后实习期间,我们得以初步了解我们所学

40、专业的就业前景和工作环境,以及上班后的薪资待遇,还有关于选定方向去学习哪种语言的问题,这大概是很多同学都很迷惑的问题,大学学习的语言确实很多,就目前而言我们就学习了c、c+、Java,那么这么多的语言我们该如何取舍呢,要想在短期内精通几门语言无疑是相当难的,所以老师给我们的建议是选择一门语言,尽量在一种语言上有所突出,不然如果学的太杂而零散对找工作是不利的,所以鉴于这一点,我们应该暨早确定自己主修的方向。还有是关于考研的事,现阶段大家都很困惑,对于学习计算机的人来说考研的意义到底大不大,关于这个问题我也获得了初步的认识,考研也是一个学习的过程,在这个过程中自己的技术和熟练度当然会有所提高,同时

41、又拥有了更高的文凭,有它有利的一面。实习是学生了解和认识企业事业单位对专业人才需求的重要途径,是学生进入职场之前,增加对专业认识的一个必不可少的学习阶段。通过实习,增进对从事本专业的自豪感以及责任感,选好入职方向,做好人生职业规划。为毕业之后能够进入工作状态并且能够更好地工作,打好一定的基础,所以此次实习对自己来说是一次很好的锻炼。最后这个音乐播放器程序还有很多不足之处,比如没有实现在点击歌曲是获得歌曲的名字显示在界面上,没有同步显示歌词等功能,希望以后有机会逐步完善。附录:实习日记2014年9月1日星期一这是实习的第一天,一大早我们来到了实习的公司软帝,老师短暂的自我介绍之后,我们的实习生活正式拉开序幕。与学校不同的是老师是通过广播授课,比起学校要费力的盯着投影的确方便很多。如惯例,初次学习当然是从最基本的学起,老师慢慢进入主题,天的实习,我们需要学习如何进行Android软件的开发,首先老师给我们讲述Android的起源,Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。Android

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教育教学 > 成人教育


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号