资源描述
毕 业 论 文(设计)论文(设计)题目基于Android平台的音乐视频播放器摘 要Android是一种以Linux为基础的开放源码操作系统,它包括操作系统、用户界面和应用程序、移动电话所需的全部软件,而且不存在任何以往阻碍移动产业的专有权障碍,Android主要使用于便携设备,网络中各种接口为广大用户、开发者提供了更优的开发、使用环境。本论文的音乐视频播放器采用了Android开源系统技术,利用Java语言和Eclipse编辑工具编写。同时给出了详细的系统设计过程、部分界面图及主要功能运行流程图,该音乐播放器部分集播放、暂停、上一首、下一首、歌词显示、歌手照片等功能于一体,视频播放器方面集播放、暂停、快进、快退于一体,性能良好,在Android系统中能独立运行。该播放器还拥有对手机中多媒体文件的自动扫描功能、歌曲播放模式设置。本播放器只限于应用层程序的探讨,主要考虑运行效率及用户体验,不包含对底层多媒体文件解析的研究。关键词:Android;开源系统;linux;音乐播放;视频播放Abstract目 录ABSTRACTIII第一章 绪论11.1 课题的来源11.2 课题的研究目的及意义11.3 课题主要研究的问题21.4 相关技术介绍与应用21.41 MVC设计思想运用于Android开发21.42 Android简介21.43 Android基本框架(Android Architecture)31.44 Android四大组件5第二章 需求分析72.1可行性分析72.1.1 经济可行性72.1.2 技术可行性72.1.3 操作可行性72.2 软件功能分析72.3 目标系统逻辑模型82.3.1 系统运行环境82.3.2 播放器的基本控制需求82.3.3 播放清单列表管理需求102.3.4 播放友好性需求122.4 系统性能需求122.5 运行环境需求13第三章 概要设计143.1 设计策略143.2 系统结构设计143.2.1 软件总体结构143.2.2 系统模块划分153.2.3 程序流程图153.3 数据库及字段属性设计(以音乐播放器为例)163.3.1 数据库结构163.3.2数据库连接183.3.4数据库更新18第四章 系统详细设计与实现194.1 前台功能模块分析194.1.1音乐相关界面设计194.1.2视频播放相关界面设计224.2 后台数据库交互功能模块分析244.2.1数据库连接244.2.2数据库操作244.3 多媒体文件播放模块分析254.3.1音频文件播放:254.3.2视频文件播放:274.4系统时序图284.5系统特点29第五章 测试过程305.1术语和缩写词305.2测试环境305.3测试结果315.4播放器功能测试31结 论33参考文献34致 谢35附 录3644第一章 绪论1.1 课题的来源Android是一种以Linux为基础的开放源码操作系统,它包括操作系统、用户界面和应用程序、移动电话所需的全部软件,而且不存在任何以往阻碍移动产业的专有权障碍,Google通过和运营商、设备制造商、开发商和其他有关各方组成申城次的合作伙伴关系,Google与手机联盟一起开发了Android,其中包括中国移动、中国联通、HTC,摩托罗拉、高通、T-Mobile、索尼爱立信等三十多家企业。希望借助建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。作为谷歌企业战略的重要组成部分,Android将进一步推进“随时随地为每个人提供信息”这一企业目标的实现。全球为数众多的移动电话用户正使用基于Android的各种的移动设备,谷歌的目标是让移动通讯不依赖于设备甚至平台。出于这个目的,Android将补充。现今社会生活紧张,而听音乐、看电影是其中最好的舒缓压力的方式之一,本项目的目的是开发一个可以播放主流音乐文件格式、基本视频格式的播放器,实现的主要功能是播放Mp3,Wav多种格式的音乐文件,并且能够控制播放3gp格式电影,两种播放模式分别实现暂停,停止,上一曲,下一曲,播放列表和歌曲循环模式,界面简明,操作简单。 1.2 课题的研究目的及意义通过研究了各种市场上流行的手机播放器,了解它们各自的插件及编码方式,还有各的播放特别格式文件,分析各种编码的优缺点以及各种播放器本身存在的缺陷和特点,编写出功能实用,使用方便快捷的播放器。目前已经实现的功能有能播放常见音频文件的功能,如MP3、WAV、3GP等,拥有播放菜单,能选择播放清单,具备一般播放器的功能,如快进,快退等。音乐播放模式也比较完善,有单曲,顺序,循环,随机播放等模式。本项目是一款基于Android手机平台的音乐视频播放器,使Android手机拥有个性的多媒体播放器,使手机显得更生动灵活化,与人们更为接近,让手机主人随时随地处于音乐视频的旋律之中。使人们的生活更加多样化。也使设计者更加熟练Android的技术和其它在市场上的特点1.3 课题主要研究的问题目前在Android手机、平板电脑中,所使用的多媒体播放工具大多是音乐视频相分离,对于手机用户来说不得不安装两种应用程序,浪费手持设备的资源并影响。因此有必要开发为Android用户提供支持多种格式并支持音频视频播放的软件,因此有以下几个方面需要深入研究:1、 从理论的角度判断开发基于Android平台的音乐视频播放器是否可行?2、 从实践上,如何提高界面操作的正确性和友好性,如何分析程序逻辑的正确性?3、 当sd卡中包含大量视频、音频文件时,如何提高检索效率?4、 用户数据与Android数据库信息的交互如何解决?5、 如何提高播放器在系统中的资源利用率?6、 如何减少甚至删除软件自身数据库而是用系统数据库提高效率?1.4 相关技术介绍与应用本次毕业设计中运用了目前主流的Android设计技术,使用传统MVC开发模式。1.41 MVC设计思想运用于Android开发该设计模式是“Model-View-Controller”的缩写,中文翻译为“模型-视图-控制器”。它由这三个部分组成Event、Controller、Model或View。Event(事件)导致Controller改变Model或View,或者同时改变两者。只要Controller改变了Models的数据或者属性,所有依赖的View都会自动更新。类似的,只要Controller改变了View,View会从潜在的Model中获取数据来刷新自己。而在Android软件开发中,MVC设计思想依然可以使用并且在很大程度上提高代码编写效率以及执行效率,Xml前台页面以及资源文件即为View,Activity即为Controller,工具类即为Model。1.42 Android简介Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。Android是基于Linux内核的软件平台和操作系统,早期由Google开发(在华注册商标名为“安致”),后由开放手机联盟(Open Handset Alliance)开发。它采用了软件堆层(software stack,又名以软件叠层)的架构,主要分为三部分。低层以Linux内核工作为基础,只提供基本功能;其他的应用软件则由各公司自行开发,以Java作为编写程序的一部分。另外,为了推广此技术,Google和其它几十个手机公司建立了开放手机联盟。Android在未公开之前常被传闻为Google电话或gPhone。大多传闻认为Google开发的是自己的手机电话产品,而不是一套软件平台。到了2010年1月,Google开始发表自家品牌手机电话的Nexus One。目前最新SDK版本为Android 4.0.3。1.43 Android基本框架(Android Architecture)图 2.1 Android Architecture(1) ApplicationsApplication Android会同一个核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是用JAVA编写的。(2) Application FrameWork 开发者完全可以访问核心应用程序所使用的API框架。该应用程序架构用来简化组件软件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。该应用程序重用机制使得组建可以被用户替换。所有的应用程序都由一系列的服务和系统组成,包括: 可扩展的视图(Views )可以用来建应用程序,包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons),甚至包括一个可嵌入的web浏览器内容管理器(Content Providers )使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据。资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和分层文件(layout files )。通知管理器(Notification Manager)使得应用程序可以在状态栏中显示客户通知信息。活动类管理器(Activity Manager)用来管理应用程序生命周期并提供常用的导航回退功能。(3) Libraries库Android 包括一个被 Android 系统中各种不同组件所使用的 C/C+ 库集。该库通过 Android 应用程序框架为开发者提供服务。以下是一些主要的核心库:系统 C 库- 一个从 BSD 继承来的标准 C 系统函数库( libc ),专门为基于 embedded linux 的设备定制。 媒体库- 基于 PacketVideo OpenCORE;该库支持录放,并且可以录制许多流行的音频视频格式,还有静态印像文件包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG。 Surface Manager - 对显示子系统的管理,并且为多个应用程序提供2D和3D图层的无缝融合。 LibWebCore - 一个最新的web浏览器引擎用来支持Android浏览器和一个可嵌入的web视图。 SGL - 一个内置的2D图形引擎 3D libraries - 基于OpenGL ES 1.0 APIs实现;该库可以使用硬件3D加速(如果可用)或者使用高度优化的3D软加速。 FreeType - 位图(bitmap)和向量(vector)字体显示。 SQLite 一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。(4) Android RuntimeAndroid 包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik是针对于同时高效地运行多个VMs来实现的。Dalvik虚拟机执行.dex的Dalvik可执行文件,该格式文件针对最小内存使用做了优化。该虚拟机是基于寄存器的,所有的类都经由JAVA汇编器编译,然后通过SDK中的dx工具转化成.dex格式由虚拟机执行。Dalvik虚拟机依赖于linux的一些功能,比如线程机制和底层内存管理机制。(5) Linux内核Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理,网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件堆栈之间的硬件抽象层。未来发展老牌智能手机软件平台制造商Symbian发言人则表示:Google的android只不过是另一个linux,symbian对其它软件与其形成的竞争并不感到担心。除了北美之外,Symbian在其它地区智能手机市场都占有大部分市场份额。与iPhone相似,Android采用WebKit浏览器引擎,具备触摸屏、高级图形显示和上网功能,用户能够在手机上查看电子邮件、搜索网址和观看视频节目等,比iPhone等其他手机更强调搜索功能,界面更强大,可以说是一种融入全部Web应用的单一平台。但其最震撼人心之处在于Android手机系统的开放性和服务免费。Android是一个对第三方软件完全开放的平台,开发者在为其开发程序时拥有更大的自由度,突破了iPhone等只能添加为数不多的固定软件的枷锁;同时与Windows Mobile、Symbian等厂商不同,Android操作系统免费向开发人员提供,这样可节省近三成成本。Android项目目前正在从手机运营商、手机厂商、开发者和消费者那里获得大力支持。谷歌移动平台主管安迪鲁宾(Andy Rubin)表示,与软件开发合作伙伴的密切接触正在进行中。从去年11月开始,谷歌开始向服务提供商、芯片厂商和手机销售商提供Android平台,并组建“开放手机联盟”,其成员超过30家。市场前景Google手机于08年10月22日正式上市,与运营商捆绑的合约价为179美元(约合人民币1200元),现有的T-Mobile用户可以通过网络订购。在10月22日发布当天,将有22个国家和地区可以买到谷歌手机。在11月,将增至27个国家和地区。1.44 Android四大组件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配置文件注册,通过元素声明才能使用.Service有自己的生命周期,我们可以调用startService()启动一个Service或者bindService()方法来绑定一个存在的Service (3) Broadcast Receiver 简介Broadcast Receiver 顾名思义广播接收器,它和事件处理机制类似,只不过事件处理机制是程序组件级别的(例如,某个按钮的单击事件),而广播事件处理机制是系统级别的。到目前为止我们可以使用Intent来启动一个程序组件,我们还可以通过使用sendBroadcast()方法来发起一个系统级别的事件广播来传递消息。我们可以在你的应用程序中实现Broadcast Receiver来监听和响应这些广播的Intent (4) ContentProvider简介Content Provider 用来保存和检索数据,并且使应用程序之间相互访问数据成为可能。它是跨应用程序共享数据的唯一方法。Android 为常用的数据类型(如:音视频、图片和联系方式等)提供了大量的Content Provider。它们被定义在android.provider包下面。通过这样定义好的ContentProvider 我们可以方便的进行数据操作。当然我们必须拥有适当的权限。我们也可以自己来定ContentProvider共享我们的数据,方便用户的访问。第二章 需求分析在任何软件的开发过程中,需求分析都是十分重要的环节。对于Android开发来说也是如此,实践表明,需求分析工作所做的程度,在很大程度上决定了软件的成败。系统分析的任务是:通过问题识别、可行性分析、详细调查、系统化分析、最终完成新系统的逻辑方案设计,或称逻辑模型设计。逻辑方案解决“做什么”问题,是需求分析的任务。下面将就音乐视频播放器是否可行来进行分析。2.1可行性分析可行性分析的任务是明确开发应用项目的必要性和可行性。必要性来自实现开发任务的迫切性,而可行性则取决于实现应用系统的资源和条件。这项工作建立在前面初步调查的基础上。2.1.1 经济可行性由于本次设计中所采用的开发工具均为开源产品,无费用需求;如软件不发布则需要申请Android市场签名权限20美金。所以本次开发不需要任何经费支出。2.1.2 技术可行性对于Android操作系统来说,拥有自身完善的API,通过深入学习和研究,Android操作系统在多媒体文件播放方面有自身完善的数据库,现行很多播放器采用自身去检索SD卡的方式,而在本软件的设想中,尽量减少软件自身体积,调用系统数据库,从Android API中可知是可行的,对于文件播放与多媒体文件支持方面,Android API也是可以做到的,所以从技术的角度分析,整合音乐、视频播放于一身是可行的。2.1.3 操作可行性本软件的操作界面要做到简洁、友好、功能全面,保证了用户操作的人性化。对各类用户的错误操作或异常情况应有提示或自动消除能力。2.2 软件功能分析通过研究了各种市场上流行的手机播放器,了解它们各自的插件及编码方式,还有各的播放特别格式文件,分析各种编码的优缺点以及各种播放器本身存在的缺陷和特点,编写出功能实用,使用方便快捷的播放器。目前已经需要的功能有能播放常见音频文件的功能,如MP3、WAV、3GP等,拥有播放菜单,能选择播放清单,具备一般播放器的功能,如快进,快退等。音乐播放模式也比较完善,有单曲,顺序,循环,随机播放等模式。2.3 目标系统逻辑模型逻辑模型是新系统开发中要采用的模型和信息处理方法。逻辑方案是系统分析阶段的最终成果,也是今后进行系统设计和实施的依据。2.3.1 系统运行环境开发环境:Eclipse 3.7+ADT 17.0.0运行环境:Android1.6- Android 2.2W2JJW-4KYDP-2YMKW-FX36H-QYVD82.3.2 播放器的基本控制需求cc图2.1 播放器基本控制图需求用例表:用例名称:播放参与者:用户目标:使得用户可以播放在播放列表中选中的歌曲前置条件:播放器正在运行基本事件流:1.用户单击“播放”按钮或单击列表中的某首歌、视频 2.歌曲或视频被播放用例名称:暂停参与者:用户目标:使得用户可以暂停正在播放的歌曲或视频前置条件:歌曲或视频正在播放且未暂停基本事件流:1.用户单击“暂停”按钮 2.播放器将暂停当前的歌曲用例名称:快进/快退参与者:用户目标:使得用户快进视频前置条件:视频正在播放或暂停基本事件流:1.用户单击快进或快退 2.视频将快进或快退用例名称:上一首/下一首参与者:用户目标:使得用户可以听上一首或下一首歌曲前置条件:歌曲正在播放或暂停基本事件流:1.用户单击“上一首或下一首”按钮 2.播放器将播放上一首或下一首歌曲用例名称:列表更新参与者:用户目标:列表及时更新前置条件:程序在运行基本事件流:1.用户单击“menu”中“更新列表”,或者列表中某条目被变更 2.播放器音乐列表或视频列表被更新2.3.3 播放清单列表管理需求当用户选中列表中某一项歌曲,就有的需求:图2.2 播放器清单用例名称:播放参与者:用户目标:使得程序播放选中的歌曲前置条件:程序运行在播放菜单选项中基本事件流:1.用户单击“播放”按钮 2.播放器进入播放状态用例名称:删除参与者:用户目标:使选中的歌曲被移除前置条件:程序运行在列表页面基本事件流:1.长按列表中某一条目2.用户单击“移除”按钮3.播放器移除选中歌曲/全部移除歌曲2.3.4 播放友好性需求图2.3 播放器设定用例名称:音乐播放模式参与者:用户目标:使得程序进入播放模式设定状态前置条件:程序运行在播放器设定界面中基本事件流:1.用户单击“顺序、随机、单曲”按钮 2.播放器进入选中模式播放状态2.4 系统性能需求根据Android手机系统要求无响应时间为5秒,所以就有如下性能要求:(1) 当要求歌曲播放时,程序响应时间最长不能超过5秒(2) 当要求歌曲暂停时,程序响应时间最长不能超过5秒(3) 当要求歌曲停止时,程序响应时间最长不能超过5秒(4) 当要求歌曲上/下一首时,程序响应时间最长不能超过5秒(5) 当要求进行清单列表时,程序响应时间最长不能超过5秒2.5 运行环境需求操作系统:Android手机基于Linux操作系统支持环境:Android 1.5 2.2版本开发环境:Eclipse 3.7 ADT 17.0.0 第三章 概要设计3.1 设计策略 遵循软件软件工程原理及方法,采用如下设计策略。第一,模块化策略。系统分两大模块:音乐播放模块、视频播放模块和控制模块。界面分为:列表页面、播放页面,因而为了保证系统整体结构和数据安全,也提高了模块间的独立性,减少藕合程度,必须进行有效地系统分割。本系统将使用MVC思想编程,分离控制模块。使制模块得复用,数据库方面使用系统Media数据库中内容,尽量减少自身数据量,减少软件体积。3.2 系统结构设计在完成对系统的需求分析后,就可以有针对性的进行设计了。在本章中,主要针对该软件的模块划分以及前、后台功能模块介绍,得出前、后台功能结构图;由前、后台功能结构图,得出本系统的整体流程图。在数据库设计中,详细介绍了如何调用并操作。3.2.1 软件总体结构软件功能分为两大功能:音乐播放功能、视频播放功能,音乐播放功能。需要实现的功能有能播放常见音频文件的功能,如MP3、WAV、3GP等,拥有播放菜单,能选择播放清单,具备一般播放器的功能,如快进,快退等。音乐播放模式包括单曲循环,顺序播放,随机播放等模式。3.2.2 系统模块划分图3.1软件功能哥结构图功能描述如下:(1) 播放/暂停:通过播放按键实现暂停或播放歌曲。(2) 上一首/下一首:通过上一首、下一首按键实现歌曲切换。(3) 歌词:当一首歌曲正在播放时,自动寻找该歌曲的歌词文件并解析,实时更新于播放界面。(4) 歌手图片:当一首歌曲正在播放时,自动寻找该歌曲的歌手图片,实时更新于播放界面。(5) 音乐列表:软件开启式第一个页面。(6) 快进/快退:播放视频时快进或快退15秒(7) 播放模式:播放模式为一首歌曲播放结束后按照单曲循环或顺序播放或随机播放的方式播放西一首。(8) 更新列表:主动更新音乐或视频列表(9) 列表管理:删除歌曲3.2.3 程序流程图综合以上的模块划分以及各个模块的功能分析,将本软件的整体流程图描述如下:图5-8系统流程图由系统流程图可以看出,本软件一播放列表为主入口,在播放列表中可以对歌曲、视频进行删、改,当用户点击该页的menu时可以选择更新列表、跳至播放页面的功能,当用户单击列表中某一条目式,本软件自动清空目前正在播放队列里的歌曲并播放用户当前选中的歌曲或视频,歌曲播放时同步更新歌词,在歌曲播放页面可以选择歌曲的播放模式。在试音、音乐的播放页面中可以对当前播放的多媒体文件进行播放。再返回时,如果从视频播放页面返回播放列表页面时停止视频播放,如果从音乐播放页面返回播放列表时歌曲转为后台播放。当从播放列表页返回时提示用户是否退出,点击确定则结束程序3.3 数据库及字段属性设计(以音乐播放器为例)3.3.1 数据库结构数据结构组织和数据库文件设计要根据不同用途,使用要求等,来决定数据的整体组织形式等一系列问题。数据库,顾名思义,是存放数据的仓库。只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的。数据库中的数据按一定数据模型组织、描述和存储,具有较小的重复度、较高的数据独立性和易扩展性,并且可以被在一定范围内的各种用户共享。在涉及数据库的软件开发中,需要根据有待解决的问题性质、规模,以及所采用的前端程序创建工具等,做出合适的数据库类型选择。file_table 主要是保存歌曲名字、类型、路径等,字段说明:Id 歌曲id号 fileName 歌曲名字 filePath 歌曲路径 sort 歌曲类型(表3.1、图3.1.1)Android自带一个MediaStore封闭类 专门来存储媒体信息,通过Uri EXTERNAL_CONTENT_URI 来访问SDcard中的歌曲详细信息。存放媒体信息如TITLE(标题)、ARTIST(艺术家)、ALBUM(专辑)、SIZE(大小 )(表3.2、图3.1.2)表3.1属性数据类型允许空主键_IdINTEGERNot nullPrimary keyfileNameTEXTNot nullfilePathTEXTsortINTEGER表3.2属性数据类型允许空主键_IDINTEGERNot nullPrimary keyTITLETEXTNot nullARTISTTEXTALBUMTEXTSIZELONG图3.1 歌曲列表图3.2 歌曲详细3.3.2数据库连接Android中自带SQLite数据库,这是一个十分小型的数据库,这样正适合Android这种移动平台使用。Android数据库存储的位置在data/data/databases/目录下 Android是利用ContentProvider作为内容提供商,SQLiteOpenHelper数据库帮助类来进行对数据库的创建和操作。通过Context.getContentResolver()方法直接对数据库进行操作。程序中数据库类为DBHelper extends SQLiteOpenHelper(继承关系),内容提供类DBProvider extends ContentProvider(继承关系)Android自带一个MediaStore封闭类 专门来存储媒体信息,通过Uri EXTERNAL_CONTENT_URI 来访问,获得SDcard中的歌曲详细信息。3.3.4数据库更新当数据库需更新时,比如添加歌曲或者删除歌曲之后,Android系统并不会主动更新数据库只有程序重启或手机重启时Android会更新Media数据库,于是当进行了数据库操作时就需要注册广播接收器通知系统更新数据库这样既可在进行相关文件增删改查时同步更新数据库。第四章 系统详细设计与实现本软件的设计时,已将划分为多个模块,并将它们按照一定的原则组装起来,每个模块完成一定的功能。详细设计是软件设计的第二阶段,主要是实现每个模块具体执行的功能、详细算法。详细设计的完成为编码奠定了基础,编码是在详细设计的基础上进行的,它是将详细设计得到的处理过程的描述转换为基于某种计算机语言的程序。本章我们将对软件的总体规划和设计进行介绍,同时对难点穿插一些代码。另外,对于本章我们将以模块为单位来展开4.1 前台功能模块分析4.1.1音乐相关界面设计音乐视频播放器的界面要给用户第一体验印象的界面,需要使用户有兴趣使用,在参考Android市场上多款播放器后设计为TabHost作为音乐和视频的切换入口,使用略带梦幻和渐变的背景图片给用户传达放松、呼吸的感觉。TabHost转载两个Activity分别为音乐和视频播放列表。列表均采用自定义的列表布局。综合考虑,本系统登录首页采用上述设计模式进行设计和实现。如下图:图4-1播放器主界面音乐播放列表的自定义样式代码如下: color/background_color color/defaults 1px false drawable/listview_background android:color/transparent 0dip 0dip 3dip 音乐播放界面的实现考虑的问题就比较多了,诸如:布局方式、按键触发动画效果、透明效果、歌词显示变换方式等,最终由Android开发已不推荐使用的绝对布局转为LinearLayout嵌套而成,各种按键素材均为反解市场上多款成熟播放器的.apk文件反解得到,并自定义seekbar样式,Android自带seekbar样式为:图4-2 原始seek样式自定义样式后seek变为:图4-3 自定义seek样式SeekBar样式代码如下: Android的每一个可视化界面,都有其的唯一的布局配置文件,该文件里面有各种布局方式,和各种资源文件如图像,文字,颜色的引用,程序在运行时,可以通过代码对各配置文件进行读取。这样就可以形成不同的可视化界面和炫丽的效果。播放器主界面是一个Activity,Android工程在每个activity启动的时候会首先执行Oncreate()方法,如下代码:public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);this.requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.musicplayer);最终,音乐正在播放页面设计如图:图4-4音乐播放页面首页4.1.2视频播放相关界面设计上述播放器主界面TabHost装载两个Activity分别为音乐和视频播放列表。列表均采用自定义的列表布局。其中视频播放列表如下图:图4-5视频播放列表页因为在音乐播放页面的介绍时介绍了样式代码,这里介绍实现列表的前台xml文件内容:图4-6视频正在播放操作界面电影播放页面的实现列表的前台xml文件内容: 4.2 后台数据库交互功能模块分析4.2.1数据库连接Android中自带SQLite数据库,这是一个十分小型的数据库,这样正适合Android这种移动平台使用。Android数据库存储的位置在data/data/databases/目录下 Android是利用ContentProvider作为内容提供商,SQLiteOpenHelper数据库帮助类来进行对数据库的创建和操作。通过Context.getContentResolver()方法直接对数据库进行操作。程序中数据库类为DBHelper extends SQLiteOpenHelper(继承关系),内容提供类DBProvider extends ContentProvider(继承关系)Android自带一个MediaStore封闭类 专门来存储媒体信息,通过Uri EXTERNAL_CONTENT_URI 来访问,获得SDcard中的歌曲详细信息。Cursor mAudioCursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, / 查询条件 null, / 条件的对应?的参数 MediaStore.Audio.AudioColumns.TITLE/ 排序方式);Cursor VudioCursor = getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, null, null, / 查询条件null, / 条件的对应?的参数MediaStore.Video.VideoColumns.TITLE/ 排序方式);4.2.2数据库操作当数据库需更新时,比如添加歌曲或者删除歌曲之后,Android系统并不会主动更新数据库只有程序重启或手机重启时Android会更新Media数据库,于是当进行了数据库操作时就需要通知系统更新数据库方法如下:private void scanSdCard() IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MEDIA_SCANNER_STARTED);intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);intentFilter.addDataScheme(file);scanReceiver = new ScanSdFilesReceiver();registerReceiver(scanReceiver, intentFilter);sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,Uri.parse(file:/+ Environment.getExternalStorageDirectory().getAbsolutePath();并注册广播接收器:private class ScanSdFilesReceiver extends BroadcastReceiver public void onReceive(Context context, Intent intent) String action = intent.getAction();if (Intent.ACTION_MEDIA_SCANNER_STARTED.equals(action) / 当系统开始扫描sd卡时,为了用户体验,可以加上一个等待框System.out.println(+-+-+-+);if (Intent.ACTION_MEDIA_SCANNER_FINISHED.equals(action) / 当系统扫描完毕时,停止显示等待框,并重新查询ContentProvidermovieListData.clear();/ 获取歌曲getVideoSD();/ 刷新列表refreashmovielist();myDialog.dismiss();这样既可在进行相关文件增删改查时同步更新数据库。4.3 多媒体文件播放模块分析4.3.1音频文件播放:MediaPlayer是Android封装好的可以直接用来管理多媒体文件的工具类,可以使用直接new的方式:MediaPlayer mp = new MediaPlayer(); MediaPlayer要播放的文件主要包括3个来源:a. 用户在应用中事先自带的resource资源例如:MediaPlayer.create(this, R.raw.test);b. 存SD卡或其他文件路径下的媒体文件例如:mp.setDataSource(/sdcard/test.mp3);c. 网络上的媒体文件例如:mp.setDataSource(对播放器的主要控制方法:Android通过控制播放器的状态的方式来控制媒体文件的播放,其中:prepare()和prepareAsync() 提供了同步和异步两种方式设置播放器进入prepare状态,需要注意的是start()是真正启动文件播放的方法,pause()和stop()比较简单,起到暂停和停止播放的作用,seekTo()是定位方法,可以让播放器从指定的位置开始播放,需要注意的是该方法是个异步方法,也就是说该方法返回时并不意味着定位完成,尤其是播放的网络文件,真正定位完成时会触发OnSeekComplete.onSeekComplete(),如果需要是可以调用setOnSeekCompleteListener(OnSeekCompleteListener)设置监听器来处理的。release()可以释放播放器占用的资源,一旦确定不再使用播放器时应当尽早调用它释放资源。reset()可以使播放器从Error状态中恢复过来,重新会到Idle状态。在本软件中把音乐文件播放的相关操作整合到一个类中整理成方法已被调用,代码如下:public static void start(String AUDIO_PATH) if (mediaPlayer.isPlaying() playbackPosotion = mediaPlayer.getCurrentPosition();mediaPlayer.pause();MusicPlayerActivity.startButton.setImageResource(R.drawable.appwidget_icon_play_normal); else mediaPlayer.seekTo(playbackPosotion);mediaPlayer.start();MusicPlayerActivity.startButton.setImageResource(R.drawable.appwidget_icon_pause_normal);public static void playAudio(String url) try mediaPlayer.setDataSource(url);mediaPlayer.prepare();mediaPlayer.start(); catch (IllegalArgumentException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IllegalStateException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();public static void killMediaplayer() if (mediaPlayer != null) mediaPlayer.reset();4.3.2视频文件播放:视频播放比音频播放要复杂一些,除了音频之外,还需要考虑一个视觉组件。为了解决这一问题,Android提供了一个专门的视图控制器 android
展开阅读全文