软件工程毕业设计-基于android的音乐播放器的设计与实现.doc
河北农业大学本科毕业论文题 目: 基于Android的音乐播放器的设计与实现 摘 要当今社会的生活节奏越来越快,随着移动硬件设备越来越先进,人们对移动设备的要求也越来越高,从以前的追求技术到现在的追求视觉效果,因此,也逐步提高了对系统的要求。本文主要是对Android系统上一的款音乐播放器应用程序的设计与实现进行讨论。Android平台是Google公司推出的一个手机平台,它是一个开源的系统,它底层是基于Linux的操作系统,本论文以Android开发平台为基础,首先介绍了安卓平台的发展以及当前国内外的发展现状。然后对安卓技术做了一个详细介绍 ,之后对基于Android平台的音乐播放器做了一个详细的需求分析,在需求分析后详细论述了音乐播放器的详细设计。根据Android开发平台自身的结构特点,把音乐播放器的开发分为两个部分来进行分析和设计,一部分是窗口的设计,住要是定义窗口的属性和关联窗口的处理函数;另一部分是功能的实现,主要是结合Android平台提供的资源和对音乐播放器的功能分析最终实现定义的功能。关键词:安卓;开源系统;音乐播放器AbstractThe pace of life todays society ,with more advanced hardware mobile devices for mobile devices ,people more and more is also high ,the requirements from the previous pursuit to pursuit the visual technology,therefore,also gradually improve the system requirements ,the paper mainly is to take on music player from system design and realization of the application is discussed. Android platform is Googles latest launch of mobile platform ,the system is an open source ,it is based on Linux systems using the Linux kernel .This article takes the Android development ,as well as the current domestic and foreign development present situation .After the discussion of rational above ,this article introduces the main technology of Android ,makes a detailed demand analysis to Music player ,then this article gives a detailed software design of Music player .Based on the Android developing platforms feature .I divide the Music players development into two parts to analyze and design .One part is the window design ,mainly defines the window attribute and the connected window processing function ;Another part is function realization ,mainly unifies the resources which Android platform provides and function analysis to Music player to accomplish the function which we defined. Keywords: Android; Open source system; music player目 录1 绪论11.1 项目目的及意义11.2 对国内外现状的研究11.3 论文组织结构22 安卓工程技术介绍32.1 android介绍32.1.1 Android Features特性32.1.2 Android基本框架32.2 安卓应用程序开发的核心技术52.2.1 Android应用程序开发语言52.2.2 Android应用程序组件53 系统需求分析73.1 软件目标73.2 软件可行性研究73.2.1 经济上的可行性73.2.2 技术上的可行性73.2.3 操作上的可行性73.3 功能需求73.3.1 用例图及用例描述83.3.2 音乐播放器的时序图93.3.3 音乐播放器的流程图103.4 软件规格说明103.5 运行环境114 系统设计124.1 界面设计124.2 功能设计124.2.1 音乐列表设计124.2.2 音乐播放设计134.2.3 音乐播放模式设计144.2.4 歌词设计145 系统实现155.1 音乐播放列表155.1.1 音乐列表界面155.1.2 获取手机中歌曲文件信息155.1.3 在列表显示界面中显示音乐165.2 音乐播放和播放的service实现185.2.1 音乐播放界面185.2.2 实现service后台音乐播放195.3 音乐播放模式设置235.3.1 播放模式设置界面235.3.2 进行播放模式选择245.4 歌词处理和显示255.4.1 歌词显示模块255.4.2 歌词解析模块266 总结29参考文献30致 谢311 绪论1.1 项目目的及意义现今生活节凑快,生活紧张,在日常休息之余,欣赏音乐是最好的舒缓压力的方式之一。本项目的目的就是开发一个可以对主流音乐文件格式有很好的支持的音乐播放器。随着计算机的广泛运用,手机市场的迅速发展,各种音频视频资源也在网上广为流传,这些资源看似平常,但已经渐渐成为人们生活中必不可少的一部分了。于是各种手机播放器也紧跟着发展起来,但是很多播放器一味追求外观花哨,功能庞大,对用户的手机造成了很多资源浪费,比如CPU,内存等的占用率过高,在用户需要多任务操作时,受到了不小的影响,带来了许多不便,而对于大多数普通用户,许多功能用不上,形同虚设。针对以上各种弊端,编写一个简洁,占用资源少,并能够很好播放本地音乐的播放器势在必行。研究各种市场上流行的手机播放器,了解它们各自的插件及编码方式,分析各种编码的优缺点以及各种播放器本身存在的缺陷和特点,编写出功能实用,使用方便快捷的播放器。目前已经实现播放音乐文件的功能。拥有播放菜单,能选择播放清单,具备一般播放器的功能。播放模式也比较完善,有单曲,顺序,循环,随机播放等模式,给用户一种轻松的体验。1.2 对国内外现状的研究目前手机的音乐播放功能已经是大家比较关注的一个部分了,不少人在购买手机的时候都会关心手机的音乐播放的能力,这也足以看出目前大家对音乐播放功能的重视,所以一款性能良好的手机音乐播放器软件一定会受到欢迎。和传统的音乐播放器相比,手机播放音乐更加的容易携带,其他方面也都不输于传统音乐播放器所。 一款专业的音乐播放软件是手机中必不可少的要素,几乎市场上所有的手机都拥有一个自带的音乐播放软件,通过软件可以对音乐欣赏中一些必要的元素进行人性化的设置,同时在操作的时候也能得到一定的便利,但是不能满足用户的所有要求,所以就出现了各种各样的手机音乐播放软件,来满足不同用户的不同要求。不同手机平台的手机,所支持的音乐播放软件也是各不相同,而现在最流行的手机平台就是Google的android手机平台。 随着科技的快速发展,数码电子设备基本上都含有MP3播放的功能。媒体播放器的发展有两个趋势。首先,支持多样化格式,如常见的音频格式WMA格式、MP3格式、MIDI格式等。这些格式如何能够完美的播放,是现如今研究的一个主流方向。其次一个必要的趋势就是播放器的可扩展性,现如今音乐播放器的功能越来越多,用户体验越来越好,如何能让播放器的功能比现有的更加完备,也是占领用户群的一个因素。由于Android基于Linux内核并且具有开源、免费的特性,为播放性能的提升提供了更加便利的条件。Android平台的开放性,可以不仅推动了技术创新(包括平台本身),也有利于降低开发成本,制造商定制具有特点的产品也很容易。因此,它有一个大的市场潜力。Android平台是完全开放的平台,智能手机里的各种应用软件也越来越完备,在Android平台设计和开发一款音乐播放器可以摆脱不够智能音乐播放器的因素,并且具有很广阔的前景。1.3 论文组织结构本文主要研究内容有以下几个方面:第一章 绪论。主要是对项目的背景和意义进行简要描述。第二章 安卓工程及技术介绍。对安卓及安卓技术相关等方面进行介绍。第三章 需求分析。对整个系统的可行性,功能需求和运行环境做出描述。第四章 系统设计。对系统界面设计和功能设计做出描述。第五章 系统实现。对系统的实现国能做出描述,包括界面和代码实现等。第六章 总结。简要介绍程序的功能,自己的收获和一些不足。2 安卓工程技术介绍2.1 android介绍Android是基于Linux内核的软件平台和操作系统,早期由Google开发(在华注册商标名为“安致”),后由开放手机联盟(Open Handset Alliance)开发。它采用了软件堆层(software stack,又名以软件叠层)的架构,主要分为三部分。低层以Linux内核工作为基础,只提供基本功能,其他的应用软件则由各公司自行开发,以Java作为编写程序的一部分。另外,为了推广此技术,Google和其他几十个手机公司建立开发手机联盟。Android在未公开之前常被传闻为Google电话或gPhone。大多传闻认为Google开发的是自己的手机电话产品,而不是一套软件平台。到了2010年1月,Google开始发表自家品牌手机电话的Nexus One,截止到现在最新的手机型号为Nexus 5。2.1.1 Android Features特性安卓系统有如下几大特性:1.应用程序框架 支持组建的重用与替换。2.Dalvik 虚拟机 专门为移动设备做了优化。3.内部集成浏览器 该浏览器基于开源的WebKit引擎。4.优化的图形库 包括2D和3D图形库,3D图形库基于OpenGl ES。5.SQLite 用作结构化的数据存储。6.多媒体支持 包括常见的音频、视频和静态印象文件格式(如MPEG4,H.264,MP3,AAC,AMR,JPG,PNG,GIF)。7.GSM电话 (依赖于硬件)。8.蓝牙Bluetooth,EDGE,3G,安定WIFI(依赖于硬件)。9.照相机,GPS,指南针,和加速度计(依赖于硬件)。10.丰富的开发环境 包括设备模拟器,调试工具,内存及性能分析图表,和Eclipse集成开发环境插件。2.1.2 Android基本框架Android基本框架如图2.1所示。图2.1 安卓基本框架其软件层次结构自上而下分为以下几个层次:(1)应用程序(application)Application Android会同一核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是用JAVA编写的。(2)应用程序框架(application framework)开发者完全可以访问核心应用程序所使用的API框架。该应用程序架构用来简化组件软件的重用;任何一个应用程序都可以发布它的功能块并且任何其他的应用程序都可以使用其所发布的功能块(不过的遵循框架的安全性限制)。该应用程序重用机制使得组件可以被用户替换。所有的应用程序都由一系列的服务和系统组成,包括:a.可扩展的视图(Views)可以用来建应用程序,包括列表(Lists),网格(grids),文本框,按钮,甚至可以嵌入一个web浏览器。b.内容管理器(Content Providers)使得应用程序可以访问另一个应用程序的数据,或者共享自己的数据。c.资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和分层文件(Layout Files)。d.通知管理器(Notification Manager)使得应用程序可以在状态栏中显示客户通知信息。e.活动类管理器(Activity Manager)用来管理应用程序的生命周期并提供常见的导航回退功能。(3)各种库和安卓运行环境Android包括一个被Android系统中各种不同组件所使用的C/C+库集。该库通过Android应用程序框架为开发者提供服务。Android包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik是针对于同时高效地运行多个VMS来实现的。Dalvik虚拟机执行.dex的Dalvik可执行文件,该格式文件针对最小内存使用做了优化。该虚拟机是基于寄存器的,所有的类都经由JAVA汇编器编译,然后通过SDK中的dx工具转化成.dex格式由虚拟机执行。Dalvik虚拟机依赖于linux的一些功能,比如线程机制和底层内存管理机制。(4)操作系统层Android的核心系统服务依赖于Linux2.6内核,如安全性,内存管理,进程管理,网络协议和驱动模型。Linux内核也同时作为硬件和软件堆栈之间的硬件抽象层。2.2 安卓应用程序开发的核心技术2.2.1 Android应用程序开发语言JAVA是Android上的主流开发语言,各种支持也最完善。Android发布的API和SDK也都主要是面向JAVA开发人员的。我的播放器实例也是用JAVA开发的。2.2.2 Android应用程序组件Android 应用程序最大的一个特点就是每个应用都由若干组件构成。而且各个应用程序的组件还可以相互调用(需要在代码中设置相应权限)。例如假设我们需要编写一个内嵌于网页的程序,那么我们无需亲自编写浏览器,而是可以直接调用系统自带的Chrome Lite浏览器组件。又如假设我们编写了两个应用程序,其中一个程序中有列表显示图标的组件,那么我们在另一个应用程序中就可以使用该组件,而不需要在编写该功能。也就是说,不同于我们平常编写的程序,Android的应用程序不是单一入口,而是可以从代码的不同位置启动。这就要依靠组件来实现。Android应用程序的组件有以下四种:(1) Activity一个Activity实际上表现出来的就是一个程序的界面。这个界面可能有许多不同的形式,比如有列表形式,有文字形式,有图像格子等形式。一个应用程序也可能有不止一个Activity。比如一耳光短消息的程序,需要有列表显示所有消息的Activity,还至少需要一个编辑短信的Activity,还可能需要设置、菜单等界面。每个Activity都有一个默认的窗口用于绘制界面,一般情况下,它是充满全屏的,但是我们可以通过程序控制它,使其小于屏幕大小,也可以控制其浮动于其他窗口之上(如Android中的Toast信息)。Activity中显示出来的内容其实是由view堆叠形成的,view是由View基类派生出来的各种形式的界面元素,如ListView,GridView等等,通过组合这些view,就形成了一个可见的Activity。我们可以用Activity.setContentView()方法来设置一个Activity中所要显示的view。(2)ServicesService是一种没有界面的组件,同我们平常在Windows或Linux系统中所理解的“服务”一样,Android上的service也是运行在后台的,运行时间可以从系统启动到系统关闭为止。对于许多应用程序来说,service组件式至关重要的。以下载管理器为例,用户肯定希望能够在切换到其他程序时仍然在后台继续下载,这就需要用到service完成下载工作。而显示下载进度、已下载文件等信息则由Activity完成,同时我们还希望控制下载过程,如停止、继续等,这就需要Activity与service之间进行通信。Android允许activity连接到或者绑定到service上,这样就可以让用户在界面上控制后台service的行为。(3)Broadcast ReceiversBroadcast意为广播消息,Android系统自身会发出许多广播消息,如电量不足,用户修改了全局设置等,各个应用程序也以向整个系统广播消息,如文件下载。Broadcast receiver则是程序中专门用来接收广播消息的组件,它没有界面显示,只负责监听、接收广播消息,然后根据程序逻辑,启动其他组件去处理广播消息。它可以启动一个Activity来同用户交互,也可以使用NotificationManager向用户发出通知。NitificationManager的 通知形式有许多种,不如说振动、响铃、闪LED灯,还可以在Android界面的消息栏处显示信息。(4) Content ProvidersContent provider是一种为其它应用程序提供数据的组件。这些数据可以保存在文件中,也可以保存在SQLite数据库中,还可以以其他任何有效的方式保存。ContentProvider类为我们提供了一系列保存数据的方法供我们调用,可以很方便地存储数据。其它应用程序在需要使用这些数据时,可以用ContentResolver对象,使用其中的方法。ContentResolver可以与任何contentprovider交互,获取其中的数据。只需要某个组件,Android就会尽力保证它的可用;如果该组件还没有启动,就启动它,如果该组件所属的应用程序还没拥有一个进程,则为它启动一个进程,如果系统资源不足以容纳一个新的进程,则将后台的某个进程杀死为新进程腾出资源。3 系统需求分析软件需求分析工作是软件生存期中重要的一步,也是决定性的一步。软件需求分析是一个不断认识和逐步细化的过程,该过程将软件计划阶段所确定的软件范围逐步细化到可详细定义的程度。需求分析还是软件开发的基础,假定在该阶段发现一个错误,解决它需要用一小时的时间,到设计、编程、测试和维护阶段解决,则要花几倍甚至更多的时间。因此对于复杂系统而言,首先要进行需求分析。开发人员应该对用户的要求及现实环境进行调查和了解。3.1 软件目标本系统属于用户常用的音乐播放器。可以方便用户平时对音乐文件进行播放的操作。本系统应达到以下目标: (1)软件采用人机交互的方式,界面美观友好,操作灵活、富有个性化。(2)能够对当前播放音乐进行了解和控制。(3)系统应最大限度地实现易维护性和易操作性。3.2 软件可行性研究3.2.1 经济上的可行性Android基于Linux内核且具有开源、免费的特性,正式由于Android拥有这一特性。它不仅推动了技术创新(包括平台本身),也有利于降低开发成本。同时所需的软件系统、硬件平台等都是易于获得的,且不需要android平台的机器,用模拟器即可实现开发研究,开发成本低,容易实现,从经济角度来看,该系统可行。3.2.2 技术上的可行性技术可行性要考虑现有的技术条件时候能够顺利完成开发工作,软硬件配置时候满足开发的需求。本软件用的是java开发语言,调试相对简单,当前的计算机硬件配置也完全能满足开发的需求。因此在技术上绝对可行的。软件方面,相关的开发软件,可以方便的从网上下载,易于获得,且可以满足系统需求。3.2.3 操作上的可行性该课题是利用自己的计算机,且使用Android模拟器,并且在本地上安装JDK、Android跟Eclipse作为软件的开发平台,使开发出来的系统有友好的用户界面,操作简单,因此在操作上是可行的。3.3 功能需求3.3.1 用例图及用例描述功能需求定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足了用户的业务需求。用户需求文档描述了用户使用产品必须要完成的任务。针对音乐播放器分别对音乐播放功能进行详细的调研和分析,总结出用户需求信息,其用例图如图3.1所示。图3.1 音乐播放器用例图音乐播放器用例描述如下:(1) 用例名称:播放 参与者:用户 目标:使得用户可以播放在播放列表中选中的歌曲 前置条件:播放器正在运行 基本事件流:1.用户单击音乐列表中的一项 2.播放器将播放用户所选中的歌曲(2) 用例名称:暂停 参与者:用户 目标:使得用户可以暂停正在播放的歌曲 前置条件:播放器正在运行 基本事件流:1.用户单击“暂停”按钮 2.播放器将暂停当前播放的歌曲(3) 用例名称:上一首/下一首 参与者:用户 目标:使得用户可以听上一首或下一首歌曲 前置条件:歌曲正在播放或暂停 基本事件流:1.用户单击“上一首或下一首”按钮 2.播放器将播放上一首或下一首歌曲(4) 用例名称:播放列表 参与者:用户 目标:使得用户可以进入播放清单 前置条件:程序正在运行 基本事件流:1.用户由播放歌曲界面返回至清单界面 2.播放器进入播放列表(5) 用例名称:歌词显示 参与者:用户 目标:实现歌曲播放与歌词同步 前置条件:歌词文件存在、程序运行在播放界面 基本事件流:1.显示歌词3.3.2 音乐播放器的时序图播放器对象之间的交互情况如图3.2所示。图3.2 音乐播放器的时序图3.3.3 音乐播放器的流程图音乐播放器工作流程图如图3.3所示。图3.3 音乐播放器工作流程图3.4 软件规格说明随着手机的功能的不断增加,音乐播放功能已经是时下各大手机厂商手机方案中的标配了。总结设计思路和对市场的调研,对音乐播放器作出以下详细的定义:(1)播放音乐文件(2)播放音乐文件时实现暂停,播放。(3)播放音乐文件时支持前一首或后一首音乐文件与当前音乐文件的切换。(4)播放文件时支持进度条显示并显示已播放时间。(5)可以设置播放模式。(6)显示手机上音乐文件列表。(7)支持歌词文件同步。3.5 运行环境操作系统:Android手机基于Linux操作系统。支持环境:Android 2.3-4.2版本。开发环境:Eclipse SDK Version:4.2.2。4 系统设计4.1 界面设计系统的界面设计要求界面统一,有统一的主题,且界面风格简单,具有良好的用户友好性。增加按钮而在界面上不显突兀。在音乐播放时,通过歌曲信息的获取得到歌手信息,再从本地搜索歌手写真,将音乐播放界面设置为歌手图片。4.2 功能设计功能设计主要任务是能从手机本地自动搜索音乐文件,并在列表中显示出来,点击音乐列表项后实现音乐的后台播放。4.2.1 音乐列表设计通过在XML文件中增加listview控件,达到显示音乐文件列表的目的。在每一项中显示歌曲的名字和歌曲时长。同时在屏幕的最下方增加一个textview用来显示当前正在播放的音乐,当前无音乐播放时,将此控件设置为不可见,音乐正在播放时,若列表界面重新被激活,则显示正在播放的歌曲的名称,并且用imageview来标注播放状态(暂停/播放)。点击手机上的返回键,播放器会后台运行,歌曲播放不影响用户使用其他应用。当用户想彻底退出播放器时,点击播放列表右上的退出按钮,点击确定后退出音乐播放器。列表设计界面如图4.1所示。图4.1 播放列表设计界面4.2.2 音乐播放设计音乐播放时,在音乐播放界面,通过SeekBar控件来动态显示音乐的播放进度。同时,因为音乐播放主要应用于后台,不影响用户去使用其他的应用,所以在音乐播放的设计时使用了android服务service。实现播放界面activity与播放实现service之间的实时通信,应用Broadcast Receivers,通过action进行消息信息的传递。同时,音乐播放时,可以实现对音乐播放的简单控制:暂停/播放,上一曲/下一曲,通过对service发送不同的消息,service对不同的消息进行不同的处理,利用MediaPlayer已有的方法实现对音乐播放的控制。对音乐文件的控制方法有:setdataresource():设置要播放歌曲文件的路径。prepare():准备播放状态。start():真正启动音乐文件播放的方法。pause():暂停音乐播放。stop():停止音乐播放。seekTo():定位方法,可以让播放器从指定的位置开始播放音乐。release():可以释放播放器占用的资源,一旦确定不再使用播放器时应当尽早调用它释放资源。在用户点击信息按钮,进入软件信息界面。点击播放模式按钮,进入设置音乐播放模式界面。点击返回,回到音乐列表界面。音乐播放界面的设计如图4.2所示。图4.2 音乐播放设计界面4.2.3 音乐播放模式设计在当前歌曲播放完成时,MediaPlayer的setOnCompletionListener监听方法可以实现根据用户选择的播放模式自动找到下一首要播放歌曲的ID号,从而进行播放。在本音乐播放器的设计中,有5种音乐播放模式:顺序播放、单曲播放、随机播放、单曲循环、列表循环播放。音乐模式activity中,用一个静态变量model来表示当前所选择的音乐播放模式,当监听控件状态发生变化时,改变model的值。点击返回按钮回到音乐播放界面。4.2.4 歌词设计在音乐播放列表界面的XML文件中,加载一个自定的view控件,此控件用来显示歌词信息。音乐播放时会自动搜索此歌曲的LRC歌词文件,若文件存在,则对歌词文件进行解析,每一句话对应一个LrcContent对象,while循环,一次读取一行并存入list数组中。当歌曲进行播放时,通过对时间的查找,找到处于当前播放位置的那一句歌词。将整个歌词绘制到view上,同时对当前的歌词进行字体大小和颜色的变化,使之突出显示。5 系统实现5.1 音乐播放列表5.1.1 音乐列表界面在当前无音乐播放时,只是显示音乐文件的列表,若音乐正在播放中,再次回到音乐列表界面时会显示正在播放的音乐,点击会进入音乐播放界面,增加了与用户的互动性,使交互性更加友好。在无音乐播放时和正在播放时的音乐列表界面如图5.1所示。图5.1 音乐列表在有无音乐播放时显示界面5.1.2 获取手机中歌曲文件信息Android系统提供了MediaScanner,MediaProvider,MediaStore等接口,并且提供了一套数据库表格,通过Content Provider的方式提供给用户。当手机开机或者有SD卡插拔等事件发生时,系统将会自动扫描SD卡和手机内存上的媒体文件,如audio,video,图片等,将相应的信息放到定义好的数据库表格中,MediaStore中定义了一系列的数据表格,通过ContentResolver提供的查询接口,我们可以得到各种需要的信息。歌曲的名称 :MediaStore.Audio.Media.TITL。歌曲的歌手名: MediaStore.Audio.Media.ARTIST。歌曲文件的全路径 :MediaStore.Audio.Media.DATA。歌曲的总播放时长 :MediaStore.Audio.Media.DURATION。用while循环将音乐文件对象存入list数组中。读取信息的关键代码:ContentResolver cr = getApplication().getContentResolver();Cursor cursor = cr.query(MediaStore.Audio.Meida.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER).if(cursor.moveToFirst() do Music m = new Music(); String title = /获取歌曲的名字 cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE); String name = /获取歌曲作者的名字 cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST); int length = /获取歌曲的长度(长度为ms) cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION); String Url = /获取歌曲的路径 cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA); m.setTitle(title); m.setName(name); m.setLength(length); m.setUrl(url); lists.add(m); while (cursor.moveToNext();5.1.3 在列表显示界面中显示音乐页面布局XML文件具体如下:<RelativeLayout xmlns:android=" android:layout_width="match_parent" android:layout_height="match_parent" android:background="drawable/background" > <ListView/listView来显示本地音乐 android:id="+id/listView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" > </ListView> <LinearLayout/用来显示正在播放的音乐 android:id="+id/isruning" android:layout_width="fill_parent" android:layout_height="40dp" android:layout_alignParentBottom="true" android:layout_centerHorizontal="false" android:background="drawable/isplayingback" android:gravity="center_horizontal" > <ImageView android:id="+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:background="drawable/play2" /> <TextView android:id="+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="听音乐" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout></RelativeLayout>通过重写BaseAdapter中的方法,将文件的信息通过ListView控件显示出来。public class MusicListAdapter extends BaseAdapterprivate Context context;private List<Music> listMusic;/Music对象数组public MusicListAdapter(Context context,List<Music> listMusic)this.context=context;this.listMusic=listMusic;public void setListItem(List<Music> listMusic)this.listMusic=listMusic;public int getCount() return listMusic.size();public Object getItem(int position) return listMusic.get(position);public long getItemId(int position) return position;public View getView(int position, View convertView, ViewGroup parent) if(convertView=null)convertView=LayoutInflater.from(context).inflate(R.lay