版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科毕业论文〔设计〕题目:基于Android平台的音乐播放器的设计与实现姓名:学号:专业:院系:指导老师:职称学历:完成时间:教务处制本科毕业论文〔设计〕独创承诺书本人按照毕业论文〔设计〕进度方案积极开展实验〔调查〕研究活动,实事求是地做好实验〔调查〕记录,所呈交的毕业论文〔设计〕是我个人在导师指导下进行的研究工作及取得的研究成果。据我所知,除文中特别加以标注引用参考文献资料外,论文〔设计〕中所有数据均为自己研究成果,不包含其他人已经发表或撰写过的研究成果。与我一同工作的同志对本研究所做的工作已在论文中作了明确说明并表示谢意。毕业论文〔设计〕作者签名:日期:基于Android平台的音乐播放器的设计与实现摘要随着科学的开展,的功能也越来越完善,从以前单纯追求技术到现在追求感官上的享受等,的功能已经成为很多人关注的焦点。而音乐播放器作为一款的根本配置软件,无可防止的会成为评判一款性能优良与否的尺度之一。几乎市场上所有的都拥有一个自带的音乐播放软件,在音乐播放器中用户可以根据自己的习惯或者爱好来设置音乐的播放。本音乐播放器是基于Android开源系统技术下,在Eclipse中通过Java语言的编写实现音乐播放器的根本功能,如:上一首、下一首、播放、暂停等播放功能,同时在音乐播放器中,用户可以对现有的歌曲进行操作,对于自己不喜欢的音乐,用户可以在相应的菜单中将其删除,对于自己喜欢的音乐,用户也可以查看歌曲的详细信息。本音乐播放器界面优美,性能良好,经测试后在Android系统中能正常的运行。关键词:Android;开源系统;音乐播放器;JavaDesignandimplementationofamusicplayerbasedonAndroidplatformAbstractWiththedevelopmentofscience,thephone'sfunctionsaremoreperfect,fromthesimplepursuitoftechnologytoenjoysensoryandotherfunctions.Thephone'sfunctionshasbecomethefocusofalotofpeople.Themusicplayerasthebasicconfigurationsoftwareofamobilephone,willbecomeonejudgescalewhetherornotacellphonewithexcellentperformanceinevitably.Almostallmobilephonesonthemarkethaveabuilt-inmusicplayersoftware.Theusercansetthemusicplayinginthemusicplayeraccordingtotheirhabitsorhobbies.ThemusicplayerisbasedontheAndroidopensourcetechnology,ThefunctionsofmusicplayerisimplementedbywritingJavalanguageintheEclipse,suchas:lastsong,nextsong,play,pauseandsoon,whiletheusercanoperatetheexistingsonginthemusicplayer.Iftheydonotlikethemusic,theusercanremoveitinthecorrespondingmenu.Foryourfavoritemusic,youcanalsoviewthedetailsofthesong.Themusicplayerhasbeautifulinterfaceandgoodperformance.AfterthetestthemusicplayercanrunintheAndroidsystem.KeyWords:Android;Opensystem;Musicplayer;Java目录253021绪论126461.1智能行业的开展现状116204中国是智能最大的市场1268731.1.2全球前五位中国品牌占三席129049中国智能市场格局悄然生变227095众多企业纷纷涌入智能市场391701.2课题意义3170422安卓开发577872.1安卓简介5184332.1.1安卓介绍59101安卓平台优势563792.2搭建安卓开发环境6117742.3Android模拟器中sd卡的创立和文件的上传810161创立SD卡916632.3.2向sd卡里面上传文件及异常解决9251723系统需求分析1046853.1需求分析10295453.1.1功能需求1027353.1.2系统流程图11112643.2系统界面需求1235333.3系统性能需求12260043.4运行环境需求12152064详细设计13257064.1扫描功能设计13256374.2主界面设计14179384.2.1播放列表的实现1518590删除功能的实现1794574.3侧滑菜单设计1833924.4播放设计208432播放原理2029368播放模式设计22160695播放器测试2478405.1测试方法24231595.2测试用例24241735.2.1测试12538475.2.2测试225243095.2.3测试326175135.2.4测试42725863测试528241086总结3014318致谢316279参考文献321绪论现如今中国已经成为了全球最大的智能市场,许多的中国企业也纷纷走出国门,在海外开拓自己的市场。在这竞争剧烈的舞台上,各大企业纷纷大显身手,有人说智能迎来了他的黄金开展期[1]。1.1智能行业的开展现状中国是智能最大的市场当前,全球智能市场正在以惊人的速度开展。国际市场调研机构eMarketer公布的最新数据显示,到2016年全球使用智能的人数将超过20亿人,占世界人口四分之一以上,开展中国家的使用率快速提升是主要的驱动力。到2018年,智能使用人数有望进一步提高到超过25.6亿人,约占世界人口的三分之一,到时候,智能的使用人数将正式超过功能机。由此来看,全球智能市场潜力巨大,据中国报告大厅发布的《2014-2020年中国智能行业竞争格局分析及投资可行性报告》中国作为新兴经济体保持着强劲的增长势头,智能市场潜力可见一斑。eMarketer数据显示,2014年智能用户人数最多的前三个国家分别是中国,用户人数5.197亿;美国,1.653亿;印度1.233亿。据估计,2018年,中国的智能用户人数仍将统领全球,到达7.041亿,印度将升至第二,用户人数2.792亿,美国第三,用户人数约2.20亿。另外,据宇博智业研究中心了解到,国际数据公司〔IDC〕的市场调研也预计,2015年中国人将购置5亿部智能,这一数字是美国的三倍还多。中国无疑是当前智能最大的市场,没有一个企业可以忽略中国市场[2]。1.1.2全球前五位中国品牌占三席市场决定着企业的开展空间,但并不是唯一决定因素,各大智能巨头格局也因此在发生变化。中国不仅有较大的智能市场,也出现了较强劲的智能企业[3]。近日,市场研究公司Gartner公布的最新数据显示,第三季度在全球5大智能厂商中,中国厂商占据三席,分别为华为、小米和联想,合计市场份额到达了15.5%,同比增长了4.1%。而排在前两位的苹果和三星的合计市场份额为37.1%,但同比下滑了7.1%。Gartner的数据显示,今年第三季度全球销量与上年持平,但智能的销量那么同比增长20.3%,到达了3.01亿部,而三星、苹果仍是全球智能的前两位,但随后排名那么发生变化,包括华为、小米、联想等三家中国外乡厂商的出货量进入全球前五。Gartner的报告表示,通过削减本钱并提供顶级的硬件配置,中国品牌处于很好的地位,他们满足了想要高端、但买不起苹果和三星产品的用户需求。业内人士表示,随着中国4G牌照的发放,中国外乡品牌在运营商的带动之下,其出货量仍将大幅提升,同时,今年以来,众多企业电商品牌陆续推出,电商渠道将成为中国外乡厂商出货的另一大渠道。中国智能市场格局悄然生变Gartner研究主管罗伯塔科扎〔RobertaCozza〕表示,“智能市场比以前任何时候都更加错综复杂了,因为所有厂商都加强了竞争。”确实,中国智能格局也在悄然发生变化。当前的中国市场格局到了一个拐点,新厂商的崛起对传统企业冲击过大,传统行业转型势在必行。首次进入全球前五位的小米公司备受关注,近日,小米公司更是宣布与家电巨头美的联手进军智能家居领域,业内认为此举或将为小米智能翻开一个全新的市场[4]。而此前,有传言称,中兴因小米侵犯专利而向其发律师函。华为荣耀总裁刘江峰近日表示,“现在出现了许多基于网络销售的品牌,所以我们需要一个新的品牌来应对挑战,我们的目标是三年内,首先要在中国市场实现销量第一,然后在世界市场排名进入前两位。”很显然,面对小米快速的开展势头,中兴等传统智能厂商有点“着急”了。但是,除了小米公司之外,很多企业也都“蠢蠢欲动”,希望能从庞大的智能市场分得一杯羹。众多企业纷纷涌入智能市场近日,有消息称曾在两年前折戟业务的360,将卷土重来。16日,据外媒报道,360公司宣布将与酷派结成战略合作,出资4.0905亿美元与酷派成立合资公司,360将在合资公司中持有45%的股权。消息虽然还未证实,但360董事长周鸿祎在其微博上表示“我要去南方做”。此外,中国经济网记者还了解到,在平板电脑领域小有名气的“蓝魔数码”宣布要进军领域,总经理万秋阳表示,进入市场不可能小打小闹,年销量100万台几乎是起步价。业内认为,此举意味着汽车厂商比亚迪准备借道进入智能市场。在此之前,另一家电子代工企业鸿海集团曾尝试过借道夏普进军品牌,最终折戟沉沙收场。摩托罗拉全球总裁兼首席运营官里克·奥斯特洛近日在首次接受中国媒体采访时透露,摩托罗拉将借助联想资源回归中国市场,且把小米看成对手。摩托罗拉作为联想全资子公司,将独立运作,保存品牌,以后联想旗下的产品主要针对3000元以下的市场,摩托罗拉那么是3000元以上的市场。最近摩托罗拉动作频繁,有消息显示有多宽高端产品即将发布。近日,凭借ZenFone异军突起的华硕也宣布,全面进军4G智能市场,投身火爆的4G争夺战中。此外,以下载起家的迅雷和以家电为主的长虹等企业也都宣布进入了智能领域。不过,业内均认为,过去几年,行业的风头转换太快,摩托罗拉、黑莓、诺基亚等巨头的衰落,都只用了一两年时间,虽然目前市场价格战很剧烈,但还存在相当大的利润空间,中国将进入智能开展的黄金期。在中兴、华为等老品牌和小米新兴品牌的压力下,哪个企业能够胜出关键还在创新和质量,只有迎合群众消费需求,才能创下奇迹。而对于企业来说,专利也是一个不得不提前准备的战略[5]。1.2课题意义科技的开展日新月异,而的功能也越来越完善,从以前单纯的打开展到了发短信、听歌、听播送、聊QQ、上网冲浪等,的功能已经成为很多人关注的焦点。在所有的功能中,音乐播放器算是大家比拟关注的局部了。目前不少人在购置的时候都会关心的音乐播放能力,播放器操作是否简便、功能是否完善、界面是否友好等等,这些都是人们评价一款音乐播放器好坏的标准。如果一款音乐播放器够让用户感到操作简便、功能完善、性能良好,那么一定会受到大家的欢送。和传统的音乐播放器相比,播放音乐更加的容易携带,其他方面都不输与传统的音乐播放器,所以开发一款具有良好性能的音乐播发软件是具有良好市场和应用前景的。几乎市场上所有的都拥有一个自带的音乐播放软件,在音乐播放器中用户可以根据自己的习惯或者爱好来设置音乐的播放。一款音乐软件不可能面面俱到,针对不同的用户的不同需求,开发者们开发了各种各样的音乐播放软件,来满足不同用户的不同要求[6]。不同平台的所支持的音乐播放软件也是各不相同的,现如今主流的平台就是Android平台,所以本课题就致力于开发一款基于Android平台的音乐播放器,来满足用户的需求。2安卓开发2.1安卓简介2.1.1安卓介绍Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。Android是基于Linux开放性内核的操作系统,是Google公司在2007年11月5日公布的操作系统。Android早期由原名为"Android"的公司开发,之后谷歌在2005年收购了"Android.Inc",继续对Android系统开发运营,它采用了软件堆层〔softwarestack,又名软件叠层〕的架构,主要分为三局部。底层Linux内核只提供根本功能,其他的应用软件那么由各公司自行开发,局部程序以Java编写[7]。Android操作系统已经成为全球最受欢送的智能平台。现在,Android系统不但应用于智能,也在平板电脑市场急速扩张,在智能MP4方面也有较大开展。采用Android系统主要厂商包括台湾的HTC,(第一台谷歌的G1由HTC生产代工〕美国摩托罗拉,SE等,中国大陆厂商如:魅族〔M9〕,华为、中兴、联想、蓝魔等。2.1.2安卓平台优势〔1〕开放性Android平台最显著的特性就是他的开放性,Android平台允许任何移动终端厂商参加到Android联盟中来。他的开放性吸引了许许多多的开发者,随着用户和应用的日益丰富,Android平台也迅速的由一个新生的平台走向成熟[8]。开发性对于Android的开展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,最大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的。〔2〕丰富的硬件这一点还是与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。功能上的差异和特色,却不会影响到数据同步、甚至软件的兼容,如同从诺基亚Symbian风格一下改用苹果iPhone,同时还可将Symbian中优秀的软件带到iPhone上使用、联系人等资料更是可以方便地转移[9]。〔3〕方便开发Android平台提供应第三方开发商一个十分宽泛、自由的环境,不会受到各种条条框框的阻扰,可想而知,会有多少新颖别致的软件会诞生[10]。但也有其两面性,血腥、暴力、情色方面的程序和游戏如何控制正是留给Android难题之一。〔4〕Google应用在互联网的Google已经走过10年度历史,从搜索巨人到全面的互联网渗透,Google效劳如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带,而Android平台将无缝结合这些优秀的Google效劳。2.2搭建安卓开发环境任何事物要运行,都要有它的环境,Android也有它的环境才能够运行,下面介绍Android的开发环境配置[11]。搭建开发环境需要的软件有:操作系统:Windows软件包:AndroidSDK(SoftwareDevelopmentkitJavaDevelopmentkit)、ADT(AndroidDeveloopmentTool)IDE环境:EclipseIDE+ADTEclipse2.3以上JDK,安装步骤如下:第一步:安装JDK图2.1安装JDK第二步:配置JDK环境变量,三个变量JAVA_HOME、PATH、CLASSPATH图2.2配置JDK环境变量第三步:安装AndroidSDK:首先要下载SDK选择相应的系统进行安装。图2.3下载SDK第四步:下载你所需要的安卓版本图2.4下载安卓版本第五步:配置AVDManage图2.5配置AVDManage第六步:测试配置是否成功启动eclipse,左侧PackageExplorer右击鼠标->NewProject->选择Android中的AndroidSampleProject项->Next->Next->任选一个实例(JetBoy)。然后,在左侧PackageExplorer中测试软件包上右击鼠标->RunAs->AndroidApplication[12]。2.3Android模拟器中sd卡的创立和文件的上传2.3.1创立SD卡在Android模拟器中,初始时没有sdcard的,为了存放音乐文件,需要自己创立sdcard,我们先来看看如何创立sdcard以及文件上传。通过Android的Tools来创立sd卡并导入进来:〔1〕翻开dos,windows+R键翻开。转换到你的sdk安装包的tools目录下,如我的目录如下:E:\android-sdk-windows\tools〔2〕创立sd卡。在命令行中输入:mksdcard512ME:\androidsdcard\sdcard.img〔这个1024M就是我们要创立的SD卡的大小,还是根据自己的需要来输入,最后面的那个E:\androidsdcard\sdcard.img就是所设置的SD存放路径,这里也可以根据我们自己的需要改变路径的,但要注意路径中不能有空格出现〕[13]。在Eclipse里面创立模拟器,并以该SD开来创立,创立完成之后,启动该模拟器。可以在AndroidSDKandAVDManager里面指定模拟器并启动。同样翻开Eclipse的DDMS- File—Explorer查看sd卡是否安装成功。向sd卡里面上传文件及异常解决右边两个小按钮就是传输文件的按钮了,用它来实现文件的传入和传出了,向左的表示把里的文件导出,向右的表示把文件导入到里面去。这里和容易出现异常。异常如下:异常一:Failedtopushselection:Invalidargument出现此异常,多半是文件所在的目录里面有中文或者文件的名字是中文导致的。建议修改一下试试。还有就是观察自己的操作权限是不是不够,如果是,d—rwxr—x那就是可以的。如果,sd卡是在eclipse里面系统自动创立的,试着重启一下IDE[15]。异常二:Failedtopushtheitem〔s〕出现这个异常是因为传输超时造成的。可以修改:〔1〕翻开windows—Preference—android—DDMS〔2〕把ADBconnectiontineout项的超时时间改大点。3系统需求分析3.1需求分析功能需求本工程的目的是开发一款音乐播放器,能够播放音乐文件。具有歌曲列表功能,同时能够对歌曲进行一些简单的操作,如:播放、暂停、上一首、下一首、随机播放、列表循环、单曲循环等。界面简洁明了,操作简单方便,给人良好的视觉享受[16]。根本功能图如下:图3.1播放器根本功能图在播放器正在运行时,用户单击“播放”按钮,播放器将播放选中的播放列表中的音乐,并同时显示当前进度;当歌曲播放音乐时,用户单击“暂停”按钮,播放器将进入暂停状态;播放器正在播放时,用户点击“上一首”或者“下一首”按钮,播放器将播放上一首或下一首歌曲[17]。播放时,用户在播放界面中可以选择自己喜欢的播放模式,如:单曲循环、顺序播放、随机播放、全部循环。3.1.2系统流程图图3.2音乐播放器系统流程图3.2系统界面需求播放器界面要求布局合理,简约,颜色舒适,控制按钮友好,能让用户一眼就能看出各个按钮的作用及操作方法。能实现要求的功能,但又不重复。要考虑到不同屏幕大小可能不一样,应尽量兼容大多数屏幕尺寸,使之显示无障碍[18]。3.3系统性能需求根据Android系统要求无响应时间为5秒,所以就有如下性能要求:当要求歌曲播放时,程序响应时间最长不能超过5秒;当要求歌曲暂停时,程序响应时间最长不能超过5秒;当要求歌曲上/下一首时,程序响应时间最长不能超过5秒;界面切换响应时间最长不能超过3秒[19]。过长的响应时间会造成用户体验感的降低,严重影响软件在用户心中的评价,不利于软件的销售。3.4运行环境需求本音乐播放器支持Android2.3及以上版本的,Android2.3以下的系统不保证其运行结果。本音乐软件是在windows7系统下,Eclipse3.5ADT0.95开发环境开发的[20]。4详细设计4.1扫描功能设计在音乐播放器刚刚完成安装时,播放列表是空白一片的,此时需要扫描SD卡中的歌曲信息,将其添加到播放列表中。扫描界面如下列图4.1所示:图4.1扫描界面Android中使用ContentProvider来支持不同应用程序的数据共享,为了方便其他应用程序对sdcard中的数据进行操作,sdcard也提供了ContentProvider接口。NTENT_URI,为了使播放列表显示所有音乐文件的信息,这里需要查询sdcard里的音频文件,并把查询到的信息保存在Cursor中,具体代码如下:<pre>Cursor
c
=
this.getContentResolver().</pre>
<pre>query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,</pre>
new
String[]{MediaStore.Video.Media.TITLE,
//音乐名
MediaStore.Audio.Media.DURATION,
//音乐的总时间
MediaStore.Audio.Media.ARTIST,
//艺术家
MediaStore.Audio.Media._ID,
//id号
MediaStore.Audio.Media.DISPLAY_NAME,
//音乐文件名
MediaStore.Audio.Media.DATA//音乐文件的路径
},
null,//查询条件,相当于sql中的where语句
null,
//查询条件中使用到的数据
null);//查询结果的排序方式
4.2主界面设计在Android中每一个可视化的界面,都有其唯一的布局配置文件。在该配置文件中包含了界面的布局方式以及所有的资源文件,如文字、图片、背景色等。Android软件程序在运行时,通过调用相应的代码来对配置文件进行读取、切换等操作,从而展现不同的可视化结果。主界面是一个Activity,Android工程在每个Activity启动时都会执行Oncreate()方法,对界面进行初始化〔如下列图4.2所示〕。代码如下所示:PublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.play_rack);}图4.2主界面4.2.1播放列表的实现在Android中有一个ListView视图,该视图拥有BaseAdpater属性,可以从上到下或者从左到右显示。系统默认每行只显示一个TextView,本音乐播放器定义了新的方式,通过定义一个MusicAdapter类来继承BaseAdapter,在通过算法对这个适配器进行扩展,使其能在每一个ListView中显示歌曲名、歌手信息以及播放时间。BaseAdapter类是一个抽象类,通过实现其中的抽象方法getView()来返回一个View〔视图〕。该View显示在Activity就成了我们所看到的播放列表。在ListView中有一个监听器newonItemClickListener(){@OverridepublicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2,longarg3){}},该方法可以监听鼠标的点击事件,通过ListView.getItemAtPositon(intposition)我们可以得到鼠标点击到的是哪一行,然后通过Intent将数据传入到其它的Activity。为了将数据传到ListView中,需要定义三个数组:private
int[]
_ids;//存放音乐文件的id数组
private
String[]
_titles;//存放音乐文件的标题数组
private
String[]
_path;
//存放音乐文件的路径
_ids保存了所有音乐文件的_ID,用来确定到底要播放哪一首歌曲,_titles存放音乐名,用来显示在播放界面,而_path存放音乐文件的路径〔删除文件时会用到〕。接下来再定义一个变量,用来定位选择的是哪一首音乐:private
int
pos;
接下来将音乐文件的信息存放在相应的数组中:c.moveToFirst();
_ids
=
new
int[c.getCount()];
_titles
=
new
String[c.getCount()];
_path
=
new
String[c.getCount()];
for(int
i=0;i<c.getCount();i++){
_ids[i]
=
c.getInt(3);
_titles[i]
=
c.getString(0);
_path[i]
=
c.getString(5).substring(4);
c.moveToNext();
}
接下来把Cursor中的信息显示到listview中:MusicListAdapter
adapter
=
new
MusicListAdapter(this,
c);
listview.setAdapter(adapter);
在主界面中,点击歌曲右下角的按钮,会弹出一个操作界面〔如下列图4.3所示〕,在界面中用户可以点击查看歌曲详情来查看歌曲的详细信息〔如下列图4.4所示〕,同时在界面中用户也可以通过鼠标或手指点击来对歌曲进行删除操作。删除有两种模式:从列表中删除和从文件中删除。图4.3歌曲操作图4.4歌曲详细信息4.2.2删除功能的实现在扫描时我们使用了系统提供的ContentProvider来查询sdcard中的多媒体文件,同样我们可以使用这个ContentProvider来进行删除操作:private
void
deleteMusic(int
position){
this.getContentResolver().delete(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
MediaStore.Audio.Media._ID
+
"="
+
_ids[position],
null);
}
其中“多媒体文件的ID”可以从_ids数组中取。这样,我们就删除了系统多媒体数据库中的相应记录,而并没有删除SD卡中的文件,也就是从列表中删除歌曲,这个时候如果再次扫描SD卡,就会发现刚刚从播放列表中删除的歌曲将会会再次出现。在上一张中我们从多媒体数据库中读出来一项很重要的信MediaStore.Audio.Media.DATA并且取得里面的字串并存放在了_path数组中,最终的数据格式为:/SDCARD/[子文件夹名]文件名,有了这个路径,我们就可以实现从文件中删除歌曲:private
void
deleteMusicFile(int
position){
File
file
=
new
File(_path[position]);
file.delete();
}
4.3侧滑菜单设计在主菜单中点击按钮,进入侧滑菜单〔如下列图4.5所示〕。在侧滑菜单中可以进行相应的操作,如:扫描歌曲、翻开我的最爱歌曲列表、退出播放器等。图4.5侧滑菜单界面如果用户在侧滑菜单栏中点击全部歌曲按钮,那么将会跳转到主界面中,如果用户点击我的最爱按钮,那么将进入我的最爱歌曲菜单。布局代码如下:<LinearLayoutxmlns:android="://schemas.android/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/sliding_bg"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="50.0dip"android:background="@drawable/sliding_top_bg"android:gravity="center_vertical"android:orientation="horizontal"><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10.0dip"android:background="@drawable/sliding_top_img"android:contentDescription="@string/app_name"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10.0dip"android:text="@string/xml_activity_main_sliding_top_text"android:textColor="@color/white"android:textSize="19.0sp"/></LinearLayout><Viewandroid:layout_width="match_parent"android:layout_height="2.0dip"android:background="@drawable/view_shadow"/><ListViewandroid:id="@+id/activity_main_sliding_list"android:layout_width="match_parent"android:layout_height="match_parent"android:cacheColorHint="@color/transparent"android:divider="@drawable/sliding_item_list_divider"android:dividerHeight="1.0dip"android:listSelector="@drawable/list_selector"android:scrollbarThumbVertical="@drawable/scrollbar_thumb"/></LinearLayout>4.4播放设计在播放时可以看到播放、暂停、上一首、下一首等按钮,这些按钮都是水平放置的〔如下列图4.6所示〕,我们采用了线性布局LinearLayout,将这些按钮的属性依次放置在LinearLayout中,使用setOrientation(horizontal)方法将其置为水平。图4.6水平按钮播放原理Android源程序已经为我们封装了一个MediaPlayer接口类。该接口在执行前需要一个数据源,通过如下四个步骤:第一步:MediaPlayer.reset();复位操作,为以后的媒体准备播放做准备。第二步:传入歌曲数据源,这里也是一个数据源:MediaPlayer.setDataSource(Stringpath);参数需要一个路径,该接口类在收到路径后将其转化为数据源。第三步:准备播放数据源,调用MediaPlayer.prepare();第四步:MediaPlayer.start();播放数据源,该数据源播放后,不再于程序有关,需要用MediaPlayer.Stop()方法让其停止或MediaPlayer.Start();让其启动;歌曲数据源的获得:数据源的获得,需要我们提供应接口类一个歌曲存放路径,而这个路径已经被事先放到数据库里了,我们只需要进行数据库进行操作。将里面的路径取出。这里将调用PlayRackActivity的一个方法query();方法getContentResolver是包android.content.ContextWrapper里面的方法,它会自动的调用ContentProvider中的关联数据库,我们需用这个方法就可以操作数据库。数据库操作需要一个Uri。Uri类似一个网络连接的Url。Uri是数据库唯一的标识,不同的Uri可以操作不同的数据库表。在查询数据库时需要传入一个当前播放的歌曲名字,通过歌曲名字来查询歌曲的路径。具体代码如下:播放:publicvoidplay(){//开始播放的时候为顺序播放repeat_none();Intentintent=newIntent();intent.setAction("com.wwj.media.MUSIC_SERVICE");intent.putExtra("url",url);intent.putExtra("listPosition",listPosition);intent.putExtra("MSG",flag);startService(intent);}上一首:publicvoidprevious_music(){playBtn.setBackgroundResource(R.drawable.play_selector);listPosition=listPosition-1;if(listPosition>=0){Mp3Infomp3Info=mp3Infos.get(listPosition);//上一首MP3musicTitle.setText(mp3Info.getTitle());musicArtist.setText(mp3Info.getArtist());url=mp3Info.getUrl();Intentintent=newIntent();intent.setAction("com.wwj.media.MUSIC_SERVICE");intent.putExtra("url",mp3Info.getUrl());intent.putExtra("listPosition",listPosition);intent.putExtra("MSG",AppConstant.PlayerMsg.PRIVIOUS_MSG);startService(intent);}else{Toast.makeText(PlayerActivity.this,"没有上一首了”Toast.LENGTH_SHORT).show();}}下一首:publicvoidnext_music(){playBtn.setBackgroundResource(R.drawable.play_selector);listPosition=listPosition+1;if(listPosition<=mp3Infos.size()-1){Mp3Infomp3Info=mp3Infos.get(listPosition);url=mp3Info.getUrl();musicTitle.setText(mp3Info.getTitle());musicArtist.setText(mp3Info.getArtist());Intentintent=newIntent();intent.setAction("com.wwj.media.MUSIC_SERVICE");intent.putExtra("url",mp3Info.getUrl());intent.putExtra("listPosition",listPosition);intent.putExtra("MSG",AppConstant.PlayerMsg.NEXT_MSG);startService(intent);}else{Toast.makeText(PlayerActivity.this,"没有下一首了",Toast.LENGTH_SHORT).show();}}播放模式设计播放模式模块的主要技术实现为随机播放和循环播放,随机播放的实现方法其实就是获取当前播放列表的大小,通musicDatasList列表的大小来获取随机数,播放产生的随机数相对应列表中的歌曲就得以实现了;循环播放其实就是当播放完列表最后一个的歌曲,直接播放列表第一个歌曲。代码如下:随机播放:publicvoidshuffleMusic(){Intentintent=newIntent(CTL_ACTION);intent.putExtra("control",4);sendBroadcast(intent);}publicvoidaudioTrackChange(intprogress){Intentintent=newIntent();intent.setAction("com.wwj.media.MUSIC_SERVICE");intent.putExtra("url",url);intent.putExtra("listPosition",listPosition);if(isPause){intent.putExtra("MSG",AppConstant.PlayerMsg.PAUSE_MSG);}else{intent.putExtra("MSG",AppConstant.PlayerMsg.PROGRESS_CHANGE);}intent.putExtra("progress",progress);startService(intent);}单曲循环:publicvoidrepeat_one(){Intentintent=newIntent(CTL_ACTION);intent.putExtra("control",1);sendBroadcast(intent);}全部循环:publicvoidrepeat_all(){Intentintent=newIntent(CTL_ACTION);intent.putExtra("control",2);sendBroadcast(intent);}顺序播放:publicvoidrepeat_none(){Intentintent=newIntent(CTL_ACTION);intent.putExtra("control",3);sendBroadcast(intent);}5播放器测试5.1测试方法本音乐播放器主要是使用了黑盒测试的测试方法,通过由测试人员自己亲自使用,观察音乐播放器在运行过程中是否实现了相应的功能,以及在测试过程中是否出现了新的问题。然后根据测试后所产生的一系列的问题,由本组负责编码人员对播放器进行改良,然后在进行测试,就这样重复的进行这样的工作,直到音乐播放器的运行与预想时的状况根本一致时,才算通过测试。5.2测试用例序号测试目标测试步骤预期结果实际结果1播放器能否正常启动在上点开APP能正常启动启动成功2能否扫描歌曲选择扫描歌曲能扫描歌曲扫描成功3能否正常播放歌曲随机选择一首歌曲能正常播放播放成功4歌曲能否上下切换点击切换按键能切换歌曲切换成功5歌曲能否快进/退滑动进度条能快进/退实验成功表5.1测试用例5.3测试结果5.2.1测试1对主界面进行测试,目的是为了测试音乐播放器是否能够正常启动。点击或模拟器中的播放器图标,看看播放器能否启动。测试后播放器成功启动,测试结果如下列图所示:图5.1主界面5.2.2测试2对歌曲扫描功能进行测试,验证音乐播放器能否扫描SD卡中的歌曲。点击扫描歌曲,测试能否扫描到SD卡中的歌曲信息。测试发现播放器能够扫描SD卡中的歌曲,测试结果如下列图所示:图5.2歌曲列表界面图5.3扫描界面5.2.3测试3对音乐播放器的播放功能进行测试,目的是为了检验音乐播放器能否正常播放歌曲。在播放菜单中任意选择一首歌,点击播放。测试发现歌曲能够正常播放。测试结果如下列图所示:图5.4播放界面5.2.4测试4对播放器的切换功能进行测试,目的是为了检测音乐播放器播放时能否进行上一首、下一首的歌曲切换。测试时正在播放的是英文歌曲Sickofit,点击上一首按钮后开始播放歌曲Rian,而点击下一首后开始播放大型音乐剧《诸子百家》,成功切换。测试结果如下列图所示:图5.5上一首图5.6下一首5.2.5测试5对播放器的快进功能进行测试,目的是检测播放器在播放歌曲时能否快进。如下列图,在播放时将进度条向前拖动,发现拖动后歌曲仍能正常播放。测试结果如下列图所示;图5.7正常播放图5.8快进6总结在此次毕业设计中,我遇到的困难很多,在解决它们的同时我又学到了很多,受益匪浅,特别是在如何分析、建立、开发和测试一个软件方面上。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- KTV装修补充协议
- 4S店展厅木地板安装协议
- 部编版四年级上册道德与法治期末测试卷(含答案) (四)
- 专利技术入股合同协议书范本2024年
- 2024年辽宁客运从业资格证考试模板
- 2024年水电工承包合同
- 2024年宜宾客运上岗证模拟考试
- 2024年客运从业资格证网上继续教育
- 2024年项目建设委托合同
- 2024年大庆道路客运输从业资格证到期换证考试
- 2023-2024学年苏州七年级上学期期中学业水平调研数学试卷(附答案详解)
- 弥勒旅游策划方案
- 自动扶梯安装和维修作业安全要求
- 体检中心分析报告
- 公务车驾驶员礼仪培训
- 中医诊断学中的妇科疾病与具体病例分析
- 2023年上海市中考英语试题及参考答案(word解析版)
- 《杰出的科学家》课件
- 危化品运输企业消防知识培训课件
- 运动前后的热身与放松活动
- 《大学生职业发展规划与就业指导》说课稿
评论
0/150
提交评论