android安卓音乐播放器毕业实习报告+实习日记.docx
- 文档编号:26670579
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:26
- 大小:244.22KB
android安卓音乐播放器毕业实习报告+实习日记.docx
《android安卓音乐播放器毕业实习报告+实习日记.docx》由会员分享,可在线阅读,更多相关《android安卓音乐播放器毕业实习报告+实习日记.docx(26页珍藏版)》请在冰豆网上搜索。
android安卓音乐播放器毕业实习报告+实习日记
毕业实习报告
专业
软件工程
班级
01
学号
学生姓名
指导教师
实习时间
2012~2013学年第2学期
2013.3.04至2013.3.22
实习成绩
目录
一、引言2
1.1项目背景2
1.2安卓介绍2
1.3安卓组件介绍3
1.4安卓XML文件的使用4
1.5编写目的5
第二章系统功能简介6
2.1功能需求分析6
2.1.1播放器的基本控制需求6
2.1.2声音控制的程序流程图8
2.2系统性能需求9
2.3运行环境需求9
第三章程序详细设计10
3.1程序界面设计10
3.2程序音乐文件过滤12
3.3程序界面Activity类的设计12
3.4音乐播放核心代码13
第四章程序设计结果及测试分析15
4.1程序运行效果图15
4.2程序调试过程16
总结17
实习日记i
一、引言
1.1项目背景
当今社会的生活节奏越来越快,人们对手机的要求也越来越高,由于手机市场发展迅速,使得手机操作系统也出现了不同各类,现在的市场上主要有三个手机操作系统,symbian,Windowsmobile,以及谷歌的Android操作系统,其中占有开放源代码优势的Android系统有最大的发展前景。
那么能否在手机上拥有自己编写的个性音乐播放器呢?
答案是:
肯定的,谷歌Android系统就能做到。
本文的音乐播放器就是基于谷歌Android手机平台的播放器。
Android:
是谷歌于2007年公布的开放式源代码手机系统,它的开放性就优于其它封闭式的手机系统,因此,任何人都可能根据自己的喜好将手机系统中的所有功能重新编写。
这使得越来越多的人关注这个操作系统。
本次作品音乐播放器就是基于Android平台的。
随着计算机的广泛运用,手机市场的迅速发展,各种音频视频资源也在网上广为流传,这些资源看似平常,但已经渐渐成为人们生活中必不可少的一部分了。
于是各种手机播放器也紧跟着发展起来,但是很多播放器一味追求外观花哨,功能庞大,对用户的手机造成了很多资源浪费,比如CPU,内存等的占用率过高,在用户需要多任务操作时,受到了不小的影响,带来了许多不便,而对于大多数普通用户,许多功能用不上,形同虚设。
针对以上各种弊端,选择了开发多语种的音频视频播放器,将各种性能优化,继承播放器的常用功能,满足一般用户(如听歌,看电影)的需求,除了能播放常见格式的语音视频文件,高级功能:
还能播放RMVB格式的视频文件。
此外,还能支持中文、英文等语言界面。
要研究了各种市场上流行的手机播放器,了解它们各自的插件及编码方式,还有各种播放器播放的特别格式文件,分析各种编码的优缺点以及各种播放器本身存在的缺陷和特点,编写出功能实用,使用方便快捷的播放器。
目前已经实现的功能有能播放常见音频文件的功能,如MP3,WAV等,拥有播放菜单,能选择播放清单,具备一般播放器的功能,如上一曲,下一曲,音量调节等。
1.2安卓介绍
Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。
目前最好的是Android2.0的摩托罗拉Droid
Android是基于Linux内核的软件平台和操作系统,早期由Google开发(在华注册商标名为“安致”),后由开放手机联盟(OpenHandsetAlliance)开发。
它采用了软件堆层(softwarestack,又名以软件叠层)的架构,主要分为三部分。
低层以Linux内核工作为基础,只提供基本功能;其他的应用软件则由各公司自行开发,以Java作为编写程序的一部分。
另外,为了推广此技术,Google和其它几十个手机公司建立了开放手机联盟。
1.3安卓组件介绍
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会根据意愿的内容选择适当的组件来处理请求。
1.4安卓XML文件的使用
在安卓工程中,大量使用了XML文件,比如界面布局文件,字符资源文件,风格style文件,简单图形文件等。
比如在界面布局文件中,通过指定控件的排列方式、间隔像素、对齐方式等,达到对页面进行布局的目的,同时使用特定编辑器,实时解析布局文件,到达所见即所得的目的。
在字符资源中,通过关键字编辑字符内容,这样可以在不修改代码的情况下,修改程序内容。
同时,考虑多国语言的使用,更加容易替换字符内容,所以我们建议在代码的编写过程中,尽量少地在程序中使用特定语言字符,而是在字符资源文件中编写。
在风格文件中,通过特定关键字,可以使界面呈现统一风格,同时减少重复代码的编写,减轻工作量。
图形XML文件中可以实现一些矩形、椭圆形等图形文件,可以指定颜色和渐变颜色范围。
1.5编写目的
现今社会生活紧张,而欣赏音乐是其中最好的舒缓压力的方式之一,本项目的目的是开发一个可以播放主流音乐文件格式的播放器,本设计的实现的这主要功能是播放mp3、wav多种格式的音乐文件,并且能够控制播放,暂停,停止,上一曲,下一曲,音量调节,视觉外观,播放列表和歌曲文件的管理操作等多种播放控制功能,界面简明,操作简单。
本项目是一款基于Android手机平台的音乐播放器,使Android手机拥有个性的多媒体播放器,使手机显得更生动灵活化,与人们更为接近,让手机主人随时随地处于音乐视频的旋律之中。
使人们的生活更加多样化。
也使设计者更加熟练Android的技术和其它在市场上的特点。
第二章系统功能简介
2.1功能需求分析
根据项目的目标,我们可获得项目系统的基本需求,以下从不同角度来描述系统的需求,并且使用用例图来描述,系统的功能需求,我们分成四部分来概括,即播放器的基本控制需要,播放列表管理需求,播放器友好性需求和播放器扩展卡需求。
2.1.1播放器的基本控制需求
下面图2-1是音乐播放器的基本用例图,描述了程序的基本功能。
图2-1播放器基本用例图
2.1.2声音控制的程序流程图
程序中一个重要模块就是控制播放音量,程序可以通过点击控制条调整程序音量,以下图2-2是声音控制的程序流程图。
图2-2声音控制的程序流程图
点击控制条之后,程序判断音量是加还是减,程序获取系统音量,当声音可以按照用户点击的控制条设置时,程序按照控制条的大小进行音量的调整。
2.2系统性能需求
根据Android手机系统要求无响应时间为5秒,所以就有如下性能要求:
(1)当要求歌曲播放时,程序响应时间最长不能超过5秒
(2)当要求歌曲暂停时,程序响应时间最长不能超过5秒
(3)当要求歌曲停止时,程序响应时间最长不能超过5秒
(4)当要求歌曲上/下一首时,程序响应时间最长不能超过5秒
(5)当要求进行清单列表时,程序响应时间最长不能超过5秒
2.3运行环境需求
操作系统:
Android手机基于Linux操作系统
支持环境:
Android1.5-4.2.2版本
开发环境:
Eclipse3.5ADT21
第三章程序详细设计
3.1程序界面设计
通过XML布局文件设计的程序界面如下图3-1所示。
图3-1程序界面设计效果图
XML文件使用绝对布局方式,首先是全局的ListView,占据父部的全部长宽,然后是两个平行的进度条,几乎占全部宽度,然后是四个按钮控件,使用四张图片作为按钮的底色,依次是上一曲,播放,停止,下一曲。
其中播放按住被点击后,或是正在被播放时,该按钮会换作暂停按钮。
XML布局文件实际内容简略如下:
xmlns: android=" android: orientation="vertical" android: layout_width="fill_parent" android: layout_height="fill_parent"> android: id="@id/android: list" android: layout_width="fill_parent" android: layout_height="fill_parent" android: layout_weight="1" android: drawSelectorOnTop="false"> layout_height="wrap_content" android: layout_width="match_parent" android: id="@+id/musicBar"> text="TextView"android: layout_height="wrap_content" android: layout_width="wrap_content"android: id="@+id/textView1""> id="@+id/imageStop"android: src="@drawable/stop" android: layout_height="wrap_content"android: layout_width="wrap_content" > id="@+id/imageLast"android: src="@drawable/last" android: layout_height="wrap_content"android: layout_width="wrap_content"> id="@+id/imageStart"android: src="@drawable/start" android: layout_height="wrap_content"android: layout_width="wrap_content"> id="@+id/imageNext"android: src="@drawable/next" android: layout_height="wrap_content"android: layout_width="wrap_content" > id="@+id/soundBar"android: layout_height="wrap_content" android: layout_width="match_parent">
3.2程序音乐文件过滤
程序会对音乐文件夹进行扫描过滤,提取出后缀为.mp3的文件以供播放,文件过滤类的内容如下:
publicclassMusicFilterimplementsjava.io.FileFilter{
@Override
publicbooleanaccept(Filepathname){
booleanb=false;
if(pathname.isDirectory()){
b=true;
}else{
if(pathname.getName().endsWith(".mp3")){
b=true;
}else{
b=false;
}
}
returnb;
}
}
3.3程序界面Activity类的设计
程序的界面MusicTestActivity类是程序的主要部分,设计到界面所有控件的操作及设计、程序的流程控制及音乐播放的核心部分。
MusicTestActivity类的大纲如下图3-2所示。
字段mediaPlayer是音乐播放的核心变量,进行音乐播放,处理器mHandle是对音乐播放流程进行管理的变量,然后六个监听器是对按钮及进度条的变化进行及时响应,剩下的都是辅助标记变量,标记当前播放信息,以及控制参数信息。
图3-2MusicTestActivity类的设计
3.4音乐播放核心代码
整个程序的运转都是围绕音乐播放进行的,进行了流程控制及异常处理等多个阶段,而播放的核心是以下代码:
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();
}
}
mediaPlayer是设计到硬件播放的变量,多以进行了完善的异常处理,同时获取文件的长度信息。
第四章程序设计结果及测试分析
4.1程序运行效果图
如图4-1,是程序运行的效果图。
图4-1程序运行效果图
经过在手机上运行,程序可以流畅地播放音乐,无卡顿现象,可以从音乐列表的第一栏播放到最后一栏,实时准确地显示播放进度信息,并调整控制音量大小。
按钮上一曲、下一曲及停止都可以正确地作用,暂停按钮在音乐播放的时候可以正确显示并作用,当被点击之后,即显示为播放按钮,此时点击该按钮也可以正确播放音乐。
经测试,最终得到的程序可以在手机上运行,并无任何bug及程序不响应现象。
4.2程序调试过程
ADT工具附有LogCat工具,在函数的开始结束及分支处设置特定文字标记内容,即可以在LogCat工具中打印调试内容,这对于bug的判断及追踪有很大帮助,并了解程序的运行流程。
图4-2是LogCat工具使用的截图。
图4-2LogCat工具使用的截图
总结
由于对android的接触较少,所以也遇到了一些问题,无论是哪种语言首先要有自己的思路,接下来就是通过语言的实现。
我主要遇到android的四大组件的理解和使用,刚开始不知道如何用相关的组件,而且android的组件相当的多,就老师上课讲的相关知识比较少,对于我们初学者学习比较困难,而且,只是不是那么的连贯和详细,上课的时间只是跟上老师再敲代码,实现一个具体的功能,但是不有真正的弄懂它的使用方法,所以,我们在课设中出现很多问题。
实习日记
2013年3月4日星期一晴
今天上午,全班同学被召集在计算机院机电大楼机房召开实习动员大会,与上次我们参加的生产实习不同的是,这一次要进行的是毕业实习,也以为着我们要在实习的过程中亲自动手尝试做项目。
有了之前的实习经历,心里还是蛮期待这一次能学到点之前没有学过的知识。
在动员大会上,班导给我们简要的介绍了一下我们实习的安排和目的,并且给我们介绍了带领我们进行生产实习的老师,裴老师是北大青鸟的一名培训教师,看上去也是比较和蔼,本次实习就由他给我们讲述安卓开发方面的内容,希望能在他的指导下,学到点真东西。
接下来的时间,裴老师给我们大概介绍了一下实习的内容,在复习Java基础知识的前提下,一步步接触安卓的内容,从明天开始正式的开启生产实习之路,加油!
2013年3月5日星期二晴
今天开始我们算是正式开始了生产实习,由于考虑到大家基础知识掌握的程度不同,裴老师决定先给我们复习一下Java的基础知识,从开发工具到基本语法,再从编程逻辑到数组与集合的操作,带领我们很快的过了一遍,并配套的布置了一些相关的题目,虽然讲得很快,但因为我们之前也都或多或少的学过,因此第一天的课程也算顺利,几乎没有留下任何问题。
在跟着裴老师复习基础的过程中,尽管只是一次复习和总结,但还是解决了一些之前一直模棱两可的问题,比如说集合那一部分,各种不同集合结构的区别与联系,以及它们的用法等,因此还是有一定收获的,与此同时,这也算是为这次的生产实习开了一个好头吧。
明天的课程还是复习有关Java面向对象编程的知识,尽管也算比较熟悉了,但还是希望能从中发现新东西。
2013年3月6日星期三多云
继昨天复习完Java基础知识后,今天我们将会复习Java面向对象编程的知识,裴老师先把昨天遗留的一点小问题解决后,就开始了这一部分内容的复习。
这一部分作为Java编程的重点,主要是培养我们面向对象编程的思维,因此还是很重要的。
主要涉及到类和对象,面向对象的三大特性——封装、继承和多态,以及抽象类与接口等知识。
同样,因为我们之前也都接触过,因此理解起来也不算困难,跟着老师的进度也觉得比较轻松。
老师也用一些贴近生活、有趣的例子给我们做讲解,这让我们接受起来也更加容易。
课后老师给我们留了一个总结性的题目,让我们实现一个动物乐园的程序,自己下来实现时发现,它结合了面向对象几乎所有的知识,同时还运用到了设计模式里面的一种,这对于知识的掌握和理解真的很有帮助,希望接下来能继续保持这种状态。
2013年3月7日星期四多云
前两天裴老师带着我们把Java的基础知识和面向对象编程思想过了一遍,总体效果还不错,从今天开始,就进入到了安卓方面的知识了。
老师首先给我们介绍安卓平台的特性:
应用程序框架支持组建的重用和替换,包括打电话应用程序、文件管理器等。
Dalvik虚拟机专门为移动设备做了优化,Dalvik虚拟机是基于寄存器的,相对于Java虚拟机速度要快很多。
内部集成浏览器基于开源的WebKit引擎。
优化的图形库包括2D和3D图形库,SQLite用作结构化的数据存储等。
老师还给我们介绍Android的四层体系结构,由上而下依次是应用程序、应用程序框架、核心类库和Linux内核。
老师给我们介绍了Android组件类:
●Activity:
一个Activity通常就是一个单独的屏幕,通过调用startActivity()方法可以从一个屏幕导航到另一个屏幕,打开Activity的条件被封装在Intent中。
当一个新的屏幕打开后,前一个屏幕将会暂停,并保存在历史堆栈中。
默认情况下,Android将会保留从主屏幕到每一个应用的运行屏幕。
●Service:
一种长生命周期的、没有用户界面的程序,通过嗲用Context.startService()来启动一个Service,还可以通过使用Context.bindService()方法连接到一个Service上,连接之后,我们还可以通过Service提供的接口与它进行通信。
●BroadcastReceiver:
为了实现系统广播而提供的一种组
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- android 音乐 播放 毕业 实习 报告 日记