android多功能音乐播放器设计.docx
- 文档编号:30637054
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:37
- 大小:1,018.36KB
android多功能音乐播放器设计.docx
《android多功能音乐播放器设计.docx》由会员分享,可在线阅读,更多相关《android多功能音乐播放器设计.docx(37页珍藏版)》请在冰豆网上搜索。
android多功能音乐播放器设计
毕业论文
设计(论文)题目:
Android多功能音乐播放器设计
学位论文原创性声明
本人郑重声明:
所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:
日期:
年月日
学位论文版权使用授权书
本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:
日期:
年月日
导师签名:
日期:
年月日
Android多功能音乐播放器设计
摘要
随着Android平台的兴起,移动音乐已成为很多手机用户休闲时的主要爱好之一,因此一款免费的,界面简洁,性能优异的音乐播放器将会得到广大音乐爱好者的支持。
本文首先介绍了Android系统的架构和特点,然后在分析需求的基础上,详细论述利用Eclipse开发平台、AndroidSDK、AndroidADT设计出音乐播放器的具体方法。
该播放器支持播放本地及网络音乐、搜索、下载,并且能自动匹配歌词和专辑图片,具有一定实用性。
关键词:
Android;音乐播放器;下载
AndroidMediaPlayer
Abstract
WiththeriseoftheAndroidplatform,mobilemusichasbecomeoneofthemainhobbyofleisuretimealotofmobilephoneusers,thereforeafree,simpleinterface,excellentmusicplayerwillgetthesupportofthemajorityofmusiclovers.
ThispaperfirstintroducesthearchitectureandfeaturesoftheAndroidsystem,andthenonthebasisoftheanalysisofdemandisdiscussedindetailusingtheEclipsedevelopmentplatform,theAndroidSDK,AndroidADTtodesignaspecificmethodofthemusicplayer.Theplayersupportsplaybackoflocalandonlinemusicsearch,downloadandcanautomaticallymatchthelyricsandalbumart,withacertainpracticality.
Keywords:
Android;MediaPlayer;Download
1绪论
1.1课题开发的背景及意义
近年来,移动通信和互联网成为当今世界发展最快、市场潜力最大、前景最诱人的两大业务,它们的增长速度是任何预测家未曾预料到的。
迄今,全球移动用户已超过15亿,互联网用户也已逾7亿。
中国移动通信用户总数超过3.6亿,互联网用户总数则超过1亿。
目前,移动互联网正逐渐渗透到人们生活、工作的各个领域,短信、下载、移动音乐、手机游戏、视频应用、手机支付、位置服务等丰富多彩的移动互联网应用迅猛发展,正在深刻改变信息时代的社会生活。
移动音乐在日常生活中有着非常重要的作用,用手机收听音乐,已经是很多手机用户闲暇时的主要爱好之一,拥有一款功能强大的手机音乐播放器也是很多爱好听音乐的手机用户的追求,因此一款能够提供极佳的音质音效、支持随时随地播放、搜索、下载歌曲,并且能自动匹配歌词和专辑图片的音乐播放器将会得到广大音乐爱好者的支持。
1.2研究现状
随着移动互联网的发展,近年来智能手机的发展也更加迅速,市场上出现了多种手机操作系统,其中主流的操作系统有Symbian、WindowsPhone、Android、ios、黑莓等,其中具有开放源代码优势的Android操作系统有着巨大的发展前景。
由于谷歌Android系统开放,因此我们完全能够在手机上拥有一款个性化的音乐播放器。
Google的Android系统是一种以Linux为基础的开放源码操作系统,主要使用于便携设备。
Android操作系统最初由AndyRubin开发,最初主要支持手机。
2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上。
Android的主要竞争对手是苹果公司的iOS以及RIM的BlackberryOS。
2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。
2011年11月数据,Android占据全球智能手机操作系统市场52.5%的份额,中国市场占有率为58%。
现如今,就安卓平台而言,很多播放器一味追求外观花哨,功能庞大,对用户的手机资源造成了很多资源浪费,比如CPU,内存等占用率过高,在用户需要多任务操作时,受到了不小的影响,带来了许多不便,而对于大多数普通用户,许多功能用不上,形同虚设。
针对以上各种弊端,开发一款功能全面,界面简洁,性能优异的音频播放器软件一定会受到用户欢迎。
2Android介绍
2.1什么是android?
Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。
Android是基于Linux内核的软件平台和操作系统,早期由Google开发(在华注册商标名为“安致”),后由开放手机联盟(OpenHandsetAlliance)开发。
它采用了软件堆层(softwarestack,又名以软件叠层)的架构,主要分为三部分。
低层以Linux内核工作为基础,只提供基本功能;其他的应用软件则由各公司自行开发,以Java作为编写程序的一部分。
2.2Android基本框架(AndroidArchitecture)
图2.1AndroidArchitecture
1.Applications
ApplicationAndroid会同一个核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。
所有的应用程序都是用JAVA编写的。
2.ApplicationFrameWork
开发者完全可以访问核心应用程序所使用的API框架。
该应用程序架构用来简化组件软件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。
该应用程序重用机制使得组建可以被用户替换。
所有的应用程序都由一系列的服务和系统组成,包括:
·可扩展的视图(Views)可以用来建应用程序,包括列表(lists),网格(grids),文本框(textboxes),按钮(buttons),甚至包括一个可嵌入的web浏览器
·内容管理器(ContentProviders)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据。
·资源管理器(ResourceManager)提供非代码资源的访问,如本地字符串,图形,和分层文件(layoutfiles)。
·通知管理器(NotificationManager)使得应用程序可以在状态栏中显示客户通知信息。
·活动类管理器(ActivityManager)用来管理应用程序生命周期并提供常用的导航回退功能。
3.Libraries库
Android包括一个被Android系统中各种不同组件所使用的C/C++库集。
该库通过Android应用程序框架为开发者提供服务。
以下是一些主要的核心库:
系统C库一个从BSD继承来的标准C系统函数库(libc),专门为基于embeddedlinux的设备定制。
媒体库-基于PacketVideoOpenCORE;该库支持录放,并且可以录制许多流行的音频视频格式,还有静态映像文件包括MPEG4,H.264,MP3,AAC,AMR,JPG,PNG。
SurfaceManager-对显示子系统的管理,并且为多个应用程序提供2D和3D图层的无缝融合。
LibWebCore-一个最新的web浏览器引擎用来支持Android浏览器和一个可嵌入的web视图。
SGL-一个内置的2D图形引擎3Dlibraries-基于OpenGLES1.0APIs实现;该库可以使用硬件3D加速(如果可用)或者使用高度优化的3D软加速。
FreeType-位图(bitmap)和向量(vector)字体显示。
SQLite一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。
4.AndroidRuntime
Android包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。
每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。
Dalvik是针对于同时高效地运行多个VM来实现的。
Dalvik虚拟机执行.dex的Dalvik可执行文件,该格式文件针对最小内存使用做了优化。
该虚拟机是基于寄存器的,所有的类都经由JAVA汇编器编译,然后通过SDK中的dx工具转化成.dex格式由虚拟机执行。
Dalvik虚拟机依赖于linux的一些功能,比如线程机制和底层内存管理机制。
5.Linux内核
Android的核心系统服务依赖于Linux2.6内核,如安全性,内存管理,进程管理,网络协议栈和驱动模型。
Linux内核也同时作为硬件和软件堆栈之间的硬件抽象层。
与iPhone相似,Android采用WebKit浏览器引擎,具备触摸屏、高级图形显示和上网功能,用户能够在手机上查看电子邮件、搜索网址和观看视频节目等,比iPhone等其他手机更强调搜索功能,界面更强大,可以说是一种融入全部Web应用的单一平台。
2.3系统的四大组件
在Android系统中,为我们提供了四大基本组件,每个组件是一个视图,但是有些是可见的,有些是不可见的视图,像Activity,ContentProvider是可见的视图,Service和BroadcastReceiver是不可见的,它们只在系统的后台运行。
下面分别介绍四大组件:
1.Activity简介
在Android系统中Activity提供可视化的用户界面,一个Android应用通常由多个Activity组成。
多个Activity组成了Activity栈(Stack),当前活动的Activity处于栈顶。
Activity有自己的生命周期,由Android系统来控制。
2.Service简介
顾名思义Service就是运行在后台的一种服务程序,一般很少和用户交互,因此没有可视化界面定义一个Service类比较简单,只要继承Service类,实现其生命周期中的方法就可以了。
一个定义好的Service必须在AndroidManifest.xml配置文件注册,通过
3.BroadcastReceiver简介
BroadcastReceiver顾名思义广播接收器,它和事件处理机制类似,只不过事件处理机制是程序组件级别的(例如,某个按钮的单击事件),而广播事件处理机制是系统级别的。
到目前为止我们可以使用Intent来启动一个程序组件,我们还可以通过使用sendBroadcast()方法来发起一个系统级别的事件广播来传递消息。
我们可以在你的应用程序中实现BroadcastReceiver来监听和响应这些广播的Intent
4.ContentProvider简介
ContentProvider用来保存和检索数据,并且使应用程序之间相互访问数据成为可能。
它是跨应用程序共享数据的唯一方法。
Android为常用的数据类型(如:
音视频、图片和联系方式等)提供了大量的ContentProvider。
它们被定义在android.provider包下面。
通过这样定义好的ContentProvider我们可以方便的进行数据操作。
当然我们必须拥有适当的权限。
我们也可以自己来定ContentProvider共享我们的数据,方便用户的访问
2.4Android特性
Android系统有如下的几大特性:
·应用程序框架支持组件的重用与替换
·Dalvik虚拟机专门为移动设备做了优化
·内部集成浏览器该浏览器基于开源的WebKit引擎
·优化的图形库包括2D和3D图形库,3D图形库基于OpenGLES
·SQLite用作结构化的数据存储
·多媒体支持包括常见的音频、视频和静态印象文件格式(如MPEG4,H.264,MP3,AAC,AMR,JPG,PNG,GIF)
·GSM电话(依赖于硬件)
·蓝牙Bluetooth,EDGE,3G,andWiFi(依赖于硬件)
·照相机,GPS,指南针,和加速度计(依赖于硬件)
·丰富的开发环境包括设备模拟器,调试工具,内存及性能分析图表,和Eclipse集成开发环境插件
3系统需求分析
3.1功能需求
根据项目的目标,我们可获得项目系统的基本需求,以下从不同角度来描述系统的需求,并且使用例图来描述,系统的功能需求,我们分成四部分来概括,即播放器的基本控制需要,播放列表管理需求,播放器友好性需求和播放器扩展卡需求。
以下分别描述:
图3.1音乐播放器基本控制图
3.1.1播放器的基本控制需求
表3.1播放器的基本控制需求表
用例名称:
播放
参与者:
用户
目标:
使得用户可以播放在播放列表中选中的歌曲
前置条件:
播放器正在运行
基本事件流:
1.用户单击“播放”按钮
2.播放器将播放列表中的当前的歌曲
用例名称:
暂停
参与者:
用户
目标:
使得用户可以暂停正在播放的歌曲
前置条件:
歌曲正在播放且未停止和暂停
基本事件流:
1.用户单击“暂停”按钮
2.播放器将暂停当前的歌曲
用例名称:
停止
参与者:
用户
目标:
使得用户可以停止正在播放的歌曲
前置条件:
歌曲正在播放或暂停
基本事件流:
1.用户单击“停止”按钮
2.播放器将停止当前播放的歌曲
用例名称:
上一首/下一首
参与者:
用户
目标:
使得用户可以听上一首或下一首歌曲
前置条件:
歌曲正在播放或暂停
基本事件流:
1.用户单击“上一首或下一首”按钮
2.播放器将播放上一首或下一首歌曲
用例名称:
播放清单
参与者:
用户
目标:
使得用户可以进入播放清单
前置条件:
程序在运行
基本事件流:
1.用户单击“清单”按钮
2.播放器进入清单列表
3.1.2播放清单列表管理需求
当用户选中列表中某一项歌曲,就有的需求:
图3.2选中列表中某歌曲时需求图
表3.2播放器的基本控制需求表
用例名称:
播放
参与者:
用户
目标:
使得程序播放选中的歌曲
前置条件:
程序运行在播放菜单选项中
基本事件流:
1.用户单击“播放”按钮
2.播放器进入播放状态
用例名称:
添加至播放列表
参与者:
用户
目标:
将歌曲添加到歌曲列表
前置条件:
程序运行在文件浏览界面
基本事件流:
1.用户单击“增加”按钮
2.播放器进入手机扩展SD卡
用例名称:
删除
参与者:
用户
目标:
使选中的歌曲被删除
前置条件:
程序运行在播放菜单选项中
基本事件流:
1.用户单击“删除”按钮
2.播放器移除选中歌曲
3.1.3播放友好性需求
图3.3播放友好需求图
表3.3播放友好需求表
用例名称:
播放模式
参与者:
用户
目标:
使得程序进入播放模式设定状态
前置条件:
程序运行在播放器设定界面中
基本事件流:
1.用户单击“顺序、随机、单曲”按钮
2.播放器进入选中模式播放状态
用例名称:
歌词显示
参与者:
用户
目标:
使得程序进入播放器歌词设置状态
前置条件:
程序运行在播设定界面
基本事件流:
1.用户单击“歌词开关按钮”按钮
2.播放器显示或关闭歌词
3.1.4功能需求(时序图)分析
图3.4音乐播放器的时序图分析如(图)
3.2系统结构图和流程图
1.音乐播放器的系统流程图(图3.5)
图3.5音乐播放器系统流程图
2.系统功能表(表3.4)和系统功能结构图(图3.6)
表3.4播放器功能表
功能类别
子功能
子功能
播放列表
播放列表菜单
退出播放
从扩展卡寻找歌曲
歌曲菜单
播放->进入播放界面
删除->数据库同步更新
重命名->数据库同步更新
向上、下移动->数据库同步更新
播放界面
播放
播放歌曲->线程启动->时间更新
暂停
暂停歌曲->线程暂停->时间暂停
停止
停止歌曲->线程停止->时间停止
上一首
播放列表索引变化->寻找上一ID歌曲
下一首
播放列表索引变化->寻找下一ID歌曲
播放界面菜单
返回到播放列表
返回到主菜单
从扩展卡寻找歌曲
退出播放器
隐藏播放界面
主菜单
退出程序
程序退出
进入播放列表
显示播放列表
图3.6系统功能结构图
3.3系统界面需求
播放器界面要求布局合理,颜色舒适,控制按钮友好。
(图3.7)
图3.7播放器界面
3.4系统性能需求
即使所写代码能够通过世界上所有的性能测试,此时该应用仍然有可能使用户陷入狂暴状态。
例如缺乏响应性、反应慢、某些情况会卡、处理输入的时间非常长的应用就会使用户体验大打折扣。
在Android中,系统通过弹出一个“应用无响应(ANR)”对话框给用户,来对抗一段时间没有相应的应用。
用户可以在这个对话框中,选择强制关闭还是等待。
但是用户不会喜欢在用你的应用的时候总是看到这个对话框。
所以,在你的应用中设计响应性是很重要的,系统就不会弹出ANR给用户。
一般来说,当应用对用户输入没有相应的时候,系统弹出ANR。
例如,如果一个应用阻塞在某些输入输出操作(例如频繁地网络请求),应用的主线程就不会继续响应用户的输入事件。
过了一段时间后,系统会认为这个应用已经废了,于是就弹出一个ANR来让用户选择是否强制关闭应用。
在这种情况下,建立一个子线程来完成工作是常用的修复手段。
这样,主线程(响应UI事件的循环)就会一直运行,系统就不会认为你的代码死了。
一般来说,线程是属于类级别,所以,你可以认为响应性是一个类级别的问题。
因此根据Android手机系统要求无响应时间为5秒,所以就有如下性能要求:
1.当要求歌曲播放时,程序响应时间最长不能超过5秒
2.当要求歌曲暂停时,程序响应时间最长不能超过5秒
3.当要求歌曲停止时,程序响应时间最长不能超过5秒
4.当要求歌曲上/下一首时,程序响应时间最长不能超过5秒
5.当要求进行清单列表时,程序响应时间最长不能超过5秒
下面谈谈如何达到性能需求,即如何避免ANR、如何增加响应性:
3.4.1如何避免ANR
通过上面给出的ANR的定义,为什么Android应用会无响应,以及如何使你的应用避免这个。
一般来说,Android应用会整个运行在一个线程(主线程)里。
这意味着,在主线程,任何需要很长时间完成的动作,由于导致了你的应用没机会处理输入事件或者广播的Intent,都会触发ANR对话框。
因此,任何在主线程工作的方法,都应该只做最少的事情。
Activity的关键生命周期方法,例如onCreate()和onResume()里,更要做尽可能少的事。
潜在的耗时运算,例如网络或数据库操作,或者进行类似缩放位图这样的大量的数学运算,都应该在子线程做。
(对于数据库操作,可以通过一个异步方法,而不必放进另一个线程)。
这并不意味着你的主线程应该阻塞住等着子线程,无论是通过Thread.wait()还是Thread.sleep()。
你的主线程应该提供一个Handler来给子线程结束后返回结果。
如此设计的应用,可以让主线程对输入保持小于5秒的响应速度,从而避免ANR对话框。
如果其它的线程涉及展示UI,应该遵循同样的实践。
对IntentReceiver的执行时间显示,暗示了它应该做的事情,是后台小规模的工作,类似保存设置或者注册Notification一类。
所以,跟在主线程的方法一样,应用应该避免在BroadcastReceiver中进行潜在的耗时操作或运算。
除了在子线程中处理大量密集任务(因为BroadcastReceiver生命周期是很短的)。
当一个潜在的耗时操作需要返回一个广播Intent时,此时应用应该启动一个 Service。
另外,应该避免从一个IntentReceiver里启动Activity,这将会跳出一个新的界面,并把用户正在做的工作打断。
如果应用收到广播Intent之后需要展示给用户什么的话,它应该使用 NotificationManager。
3.4.2增强响应性
一般来说,100到200毫秒是用户感到“卡”的门槛。
下面是避免ANR以及加快应用响应额外的方法。
如果应用需要等着后台工作的结果(本应用中网络访问较频繁),此时应在前台展示出它的进度。
(可以使用ProgressBar或ProgressDialog)来实现,
如果你的应用初始化耗时很长,考虑使用一个SplashScreen或者尽快进入主界面然后再异步地慢慢填充。
在这两种情况,你应该提供给用户一个进度条之类的东西,表明你的应用还没死。
3.5运行环境需求
支持环境:
AndroidSDK1.5以上
4Android音乐播放器系统设计
4.1音乐播放器界面功能实现
音乐播放器界面用了TableHost组织5个Activity,每个Activity则用了Android5大布局(LinearLayout(线性布局)、FrameLayout(框架布局)、TableLayout(表格布局)、AbsoluteLayout(绝对位置布局)、RelativeLayout(相对位置布局))跟常用组件结合。
下面是5个主要界面的运行效果图。
图4.1本地歌曲界面
图4.2在线音乐界面
图4.3播放界面
图4.4搜索界面
图4.5更多界面
4.2本地音乐及网络音乐播放功能实现
本设计中播放音乐的功能主要是用到了AndroidSDK中的MediaPlayer类来实现播放音乐的功能。
首先要做的是MediaPlayer对象的初始化。
由于初始化可以由于种种原因不能成功(如文件无法读取等),需要把它放在try块中,并记录可能出现的异常,根据异常做出相应的处理。
MediaPlayer对象在使用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- android 多功能 音乐 播放 设计