基于Android系统的MIDI音乐播放器的设计与实现毕业论文.doc
内蒙古科技大学本科生毕业设计说明书(毕业论文)题 目:基于Android系统的MIDI音乐播放器的设计与实现 摘 要随着3G时代的来临,3G、Android、iPhone、Google、苹果、手机软件、移动开发等词越来越充斥于耳。随着3G网络的大规模建设和智能手机的迅速普及,移动互联网时代已经微笑着迎面而来。自1983年世界第一款商用手机发布到现在,只经过了仅仅不到30年的时间,全球手机用户已达23亿之多。消费者对手机产品在商务和娱乐方面的要求越来越高,让手机日益成为便携式的商务或娱乐终端。在硬件的推动下,用户对手机软件的功能需求也越来越高。Android系统也在不断更新以满足需求,因此手机多媒体技术的开发也就不可避免称为热点。Android:Google公司于2007年公布的开放式源代码手机系统,它的开放性优于其它封闭式的手机系统,任何人都可能根据自己的喜好将手机系统中的所有功能重新编写。这使得越来越多的人关注这个操作系统。本设计为一款基于Android 2.2 操作系统及以上版本的音乐播放器,以Java作为基础编程语言,采用Android系统提供的标准数据库SQLite进行操作。本设计的实现,囊括了Android大部分编程技术,用其友好的用户界面,实现了对音乐控制的基本功能:播放、暂停、上/下首切换、歌词同步显示和各种播放模式的控制(单曲、循环、随机和顺序播放),也实现了对歌曲列表的搜索、添加和删除等功能。关键词:Android;Google;音乐播放器;Java;移动互联网AbstractWith the coming of the era of 3G, some words can be heard more and more frequently, such as 3G, Android, iPhone, Google, Apple, Mobile phone software, Mobile development. As the 3G networks large-scale construction and the smart phones rapid popularization, mobile internet age has come with a smile. Since the issuance of the worlds first commercial mobile phone in 1983, the total number of global mobile phone users has been more than 2.3 billion in the past less than 30 years. Consumers demand more and more mobile phones performance in business and entertainment, which has made mobile phone the portable terminal for business and entertainment day by day. Being motivated by hardware, users needs on mobile phone softwares function goes increasingly high. Android system is updating to satisfy the needs. Therefore, the development of mobile multimedia technology has inevitably become the hot spot. Android is the open source mobile system published by Google in 2007. For the reason that its openness is superior to other closed mobile system, anyone can rewrite all functions in the mobile system as he or she like, which has made more and more people pay attention to this operating system. This design is a music player using Java as the basic programming language, which is based on Android 2.2 operating system and above version, and can be operated by the standard database SQLite that offered by Android system. Though this design is not big, it contents Androids most programming technology. Its favorable user interface can conduce to the realization of its basic function in music controlling (start, pause, switching between up and down music, lyrics synchronized display) and play mode controlling (single play, single cycle, random play and all cycle). Besides, it also realizes the function in song including search, add, delete and so on. Key words: Android; Google; music player; Java; mobile internet目 录摘 要IAbstractII第一章绪 论11.1 设计背景及意义11.2 Android国内外发展的状况1第二章 开发工具相关简介32.1 Android概述32.2 Android开发技术简介42.2.1 Android程序框架介绍42.2.2用户界面介绍52.2.3 Android四大组件简介62.2.4 Android数据库SQLite介绍72.3 Java语言介绍8第三章 系统分析103.1可行性分析103.1.1操作可行性103.1.2经济可行性103.1.3技术可行性103.2设计目标113.3功能需求分析123.3.1播放控制模块分析123.3.2歌曲列表模块分析133.3.2播放模式模块分析143.4性能需求分析15第四章 总体设计164.1数据库设计164.2基本流程设计174.2.1 整体流程设计174.2.2 播放控制流程设计174.2.3 歌曲列表流程设计184.2.4 播放模式流程设计19第五章 详细设计205.1 MIDI播放器UI设计205.1.1 歌曲列表界面设计215.1.2 播放控制界面设计235.2 播放器初始化实现255.3 歌曲列表模块实现275.3.1 数据库创建和连接实现275.3.2 歌曲列表搜索、添加和删除实现295.4 播放控制和模式模块实现325.4.1 基本控制功能实现325.4.2 UI同步显示实现345.4.3播放模式控制实现355.5 歌词同步显示实现375.6 菜单功能实现42第六章 系统测试446.1 测试引言446.1.1测试目的446.1.2测试信息446.2 测试内容456.2.1初始化测试456.2.2歌曲列表测试456.2.3播放控制测试466.2.4歌词同步显示测试466.2.5搜索、添加和删除测试47总 结48参考文献49致 谢50第一章 绪论随着Android手机的普及,Android应用的需求势必会越来越大,消费者对手机产品在商务和娱乐方面的要求越来越高,让手机日益成为便携式的娱乐终端。其中媒体播放器也扮演着重要的角色,本设计的完成可以让人们在忙碌的工作之余,只需一部Android手机,尽情的欣赏音乐,缓解压力。 1.1 设计背景及意义现今社会生活紧张,而欣赏音乐是其中最好的舒缓压力的方式之一,本项目的目的是开发一个可以播放主流音乐文件格式的播放器,本设计实现主要功能是播放Mp3格式的音乐文件,并且能够控制播放、暂停、停止、上一曲、下一曲、音量调节、视觉外观、播放列表的搜索、添加和删除操作等多种播放控制功能,界面简明,操作简单。 本项目是一款基于Android手机平台的音乐播放器,使Android手机拥有个性的多媒体播放器,使手机显得更生动灵活化,与人们更为接近,让手机主人随时随地处于音乐视频的旋律之中。使人们的生活更加多样化。也使设计者更加熟练Android的技术和其它在市场上的特点。1.2 Android国内外发展的状况国外Android市场正在如日中天的扩展,据市场调研机构NPDGroup最近发布的一份报告称,今年第一季度基于Android操作系统的智能手机在美国智能手机总销量中所占比例达到28%,首度超越苹果iPhone,苹果iPhone约为21%,相信在不久的将来会有更多的用户选择Android系统的手机或是无线终端设备。目前中国拥有世界上最大的手机用户群,再加上3G的推出对整个行业的巨大推动作用,全世界所有大中小型手机制造商几乎都在招聘Android工程师。然而每天有超过16万台的Android设备出货,一年后全球可能会有超过1亿台的Android设备,以后将有可能超越iPhone成为智能手机平台的旗舰。Android在中国的前景十分广阔,首先是有成熟的消费者,Android社区十分红火,这些社区为Android在中国的普及做了很好的推广作用。国内厂商和运营商也纷纷加入了Android阵营,包括中国移动、中国联通、中兴通讯、华为通讯、联想等大企业,同时不仅仅局限于手机,国内厂家也陆续推出了采用Android系统的MID产品,比较著名的包括由Rock chip和蓝魔推出的同时具备高清播放和智能系统的音悦汇W7和2010年推出的原道N5,我们可以预见Android也将会被广泛应用在国产智能上网设备上,将进一步扩大Android系统的应用范围。另一方面,由于国内政策的限制,导致Android的部分功能(如Android market)在国内无法正常使用,目前常用的解决方法是使用VPN服务来访问。第二章 开发工具相关简介2.1 Android概述Android一词本意是指“机器人”,当然现在大家都知道它是Google推出的开源手机操作系统。Android基于Linux平台,由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。它是一个由30多家科技公司和手机公司组成的“开放手机联盟”共同研发的,这将大大降低新型手机设备的研发成本。完全整合的全移动功能性产品成为“开放手机联盟”的最终目标。Android 平台是 Open Handset Alliance 的成果,Open Handset Alliance 组织由一群共同致力于构建更好的移动电话的公司组成。这个组织由 Google 领导,包括移动运营商、手持设备制造商、零部件制造商、软件解决方案和平台提供商以及市场营销公司。从软件开发的观点看,Android 正处在开源领域的中心位置。市场上第一款支持 Android 的手机是由 HTC 制造并由 T-Mobile 供应的 G1。这款设备从设想到推出花了大约一年的时间,惟一可用的软件开发工具是一些实行增量改进的 SDK 发行版。随着 G1 发行日的临近,Android 团队发布了 SDK V1.0,用于这个新平台的应用程序也浮出水面。为了鼓励创新,Google 举办了两届 “Android Developer Challenges”,为优胜的参赛作品提供数百万美金的奖励。G1 问世几个月之后,随后就发布了Android Market,它使用户可以浏览应用程序,并且可以将应用程序直接下载到他们的手机上。经过大约18 个月,一个新的移动平台进入公众领域。Android操作系统是Google最具杀伤力的武器之一。苹果以其天才的创新,使得iPhone在全球迅速拥有了数百万重视“粉丝”,而Android作为第一个完整、开放、免费的手机平台,使开发者在为其开发程序时拥有更大的自由。与Windows Mobile、Symbian等厂商不同的是,Android操作系统免费向开发人员提供,这样可节省近三成成本,得到了众多厂商与开发者的拥护。Android系统具有如下5个特点:Ø 开放性。Google与开放手机联盟合作开发了Android,Google通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,希望通过建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。Ø 应用程序无极限。Android上的应用程序可以通过标准API访问核心移动设备功能。通过互联网,应用程序可以声明它们的功能可供其他应用程序使用。Ø 应用程序是在平等的条件下创建的。移动设备上的应用程序可以被替换或扩展,即使是拨号程序或主屏幕这样的核心组件。Ø 应用程序可以轻松地嵌入网络。应用程序可以轻松地嵌入HTML、JavaScript和样式表,还可以通过Web View显示网络内容。Ø 应用程序可以并行运行。Android是一种完整的多任务环境,应用程序可以在其中并行运行。在后台运行时,应用程序可以生成通知以引起注意。随着Android平台的扩张,引发了Android人才荒,2010年移动开发人才需求20万,未来人才需求缺口将达百万。3G人才全球紧缺,实用人才培养已迫在眉睫。在国内三大运营商如火如荼的3G营销战持续升温,再加上3G的推出对整个行业的巨大推动作用,无疑将引爆3G手机开发工程师这个黄金职位。但符合条件的Android工程师屈指可数,在未来几年内,Android开发工程师将成为3G行业炙手可热的岗位之一。2.2 Android开发技术简介Android支持使用Java作为编程语言来开发应用程序,而Android的Java开发方面从接口到功能,都有层出不穷的变化。考虑到Java虚拟机的效率和资源占用,Google重新设计了Android的Java,以便能提高效率和减少资源占用,因而与J2ME等不同。本设计也是使用Java语言设计与实现的。2.2.1 Android程序框架介绍本节将介绍一下开发Android项目的项目目录结构,如图2.1所示,这是MIDI音乐播放器的项目目录结构。与一般的Java项目一样,src文件夹是项目的所有包及源文件(.java),res文件夹中则包含了项目中所有的资源,比如:程序图标(drawable)、布局文件(layout)、常量(values)等。Ø R.java是在建立项目时自动生成的,这个文件是只读模式,不能更改,R.java是定义该项目所有资源的索引文件。Ø AndroidManifest.xml文件则包含了该项目中所用的Activity、Service等组件,它是一个功能清单文件。图2.1MIDI音乐播放器目录结构2.2.2用户界面介绍Android平台提供的控件是非常完美的,控件的使用与网页的设计类似。Android的界面需要写在“res/layout”下面的布局文件,一般情况下,一个布局文件对应一个界面。设计Android的界面有点像写HTML代码,要先给Android定框架,然后再往里面添加控件。Android生成屏幕有三种方式:xml配置生成;通过用户界面接口生成;直接用代码生成。在一个Android应用中,用户界面是由View和ViewGroup对象构建的。View和ViewGroup都有很多种类,而它们都是View的子类。开发者可以对View和ViewGroup进行组合,来完成应用程序界面设计。1) View任何一个View对象都继承android.view.View类。它是一个存储屏幕上特定的一个矩形布局和内容属性的数据结构。作为一个基类,View类为Widget服务,Widget是一组用于绘制交互屏幕元素的完全实现子类。Widget处理自己的测距和绘图,所以可以快速地用它们去构建UI。可用到的Widget包括Text、EditText、Button、RadioButton和Checkbox等。2) ViewGroupViewGroup是一个android.view.Viewgroup类的对象。顾名思义,ViewGroup是一个特殊的View对象,它的功能是装载和管理一组下层的View和其他Viewroup,ViewGroup可以为UI增加结构,并且将复杂的屏幕元素构建成一个独立的实体。作为一个基类,ViewGroup为Layout(布局)服务,Layout则是一组提供屏幕界面通用类型的完全实现子类,一个Activity界面可以包含多个ViewGroup和View,,通过这样的组合可以实现更复杂、更完美、更满足开发者需要的界面。2.2.3 Android四大组件简介本节介绍Android非常重要的几个组件,Android有四大组件:Activity、Service、Broadcast Receiver、Content Provider。1) Activity在Android中使用频率最高,实质就是一个可视化界面;一般一个Android应用由多个Activity组成,多个Activity组成Activity栈(stack),当前活跃的Activity在栈顶Activity上面是一个Window对象,Window之上通常是一个布局容器对象(LinearLayout等),在上面是我们所要展示的各个组件(如按钮、文本框等)Activity有自己的生命周期,由Android系统来控制新建的Activity要在清单文件AndroidManifest.xml中注册。2) ServiceService顾名思义服务,它和事件处理机制类似,只不过事件处理机制是程序组件级别的(例如,某个按钮的单击事件),而服务理机制是系统级别的,这个组件是没有用户界面的。到目前为止可以使用Intent来启动一个程序组件,还可通过使用startService()方法来发起启动一个程序中的服务。同时在应用程序中实现Service来监听和响应这些服务的Intent。本应用MIDI播放器对歌曲的控制全都做在了Service里,后续会详细说明。3) Broadcast Receiver指广播接收器,广播事件处理机制是系统级别的系统中定义了很多标准的Broadcast Action来响应系统广播事件,如:ACTION_BOOT_COMPLETED(系统启动完成后出发),ACTION_BATTERY_CHANGED(电量低时出发)也可以自定义Broadcast Receiver接收广播事件注册广播接收器可以使用代码注册,也可在清单文件AndroidManifest.xml中注册。4) Content Provider用来保存和检索数据的,并且是应用程序之间相互访问数据成为可能,他是跨应用程序共享数据的唯一方法Android为常用的数据类型(如:视频、音频、图片)提供了大量的Content Provider,它们被放在android. provider下面,使用时要注意权限问题。2.2.4 Android数据库SQLite介绍SQLite第一个Alpha版本诞生于2000年5月,它是一款轻型数据库,它的设计目的是嵌入式的,而且目前已经在很多嵌入式产品中使用,它占用的资源非常少,在嵌入式设备中,可能只需要几百KB的内存就够了。也许这正是Android系统要采用SQLite数据库的原因之一。SQLite数据库是D.Richard Hipp用C语言编写的开源嵌入式数据库,支持的数据库大小是2TB,SQLite是一个开源的关系数据库,可以存储大量数据,并且可以很容易的进行增删改查。SQLite数据库不像其他的数据库(如Oracle),它没有服务器进程。所有的内容包含在同一个单个文件中。该文件是跨平台的,可以自由复制。基于其自身的先天优势,SQLite在嵌入式领域得到广泛应用。Android也没有重复发明“轮子”,而是直接是用了SQLite数据库。目前在 Android 系统中集成的是 SQLite3 版本,SQLite不支持静态数据类型,而是使用列关系。这意味着它的数据类型不具有表列属性,而具有数据本身的属性。当某个值插入数据库时,SQLite将检查它的类型。如果该类型与关联的列不匹配,则 SQLite 会尝试将该值转换成列类型。如果不能转换,则该值将作为其本身具有的类型存储。SQLite 支持NULL、INTEGER 、REAL 、TEXT 和BLOB 等数据类型。Android提供了创建和使用SQLite数据库的API。SQLiteDatabase代表一个数据库对象,提供了操作数据库的一些方法,另外还有一个SQLiteOpenHelper工具类提供了更简洁的功能。在Android的SDK目录下有sqlite3工具,我们可以利用它创建数据库、创建表和执行一些SQL语句。关于这个SQLiteOpenHelper类在后续章节中会详细讲到,它的出现能够更好地管理和维护数据库。2.3 Java语言介绍Java是一种简单的、跨平台的、面向对象的、分布式的、结实的、健壮的、安全的、结构的、中立的、可移植的、性能很优异的多线程的、动态的语言。当1995年SUN推出Java语言之后,全世界的目光都被这个神奇的语言所吸引。它最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak,以“Java”的名称正式发布。 Java 编程语言的风格十分接近C、C+语言。Java是一个纯的面向对象的程序设计语言,它继承了C+语言面向对象技术的核心,Java舍弃了C +语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java SE 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长度参数和自动装/拆箱等语言特性。Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(byte code),然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了Java 程序的运行效率。但在J2SE 1.4.2 发布后,Java 的执行速度有了大幅提升。与传统程序不同,Sun公司在推出Java 之际就将其作为一种开放的技术。全球数以万计的Java开发公司被要求所设计的Java 软件必须相互兼容。“Java语言靠群体的力量而非公司的力量”是 Sun 公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。Sun 公司对 Java 编程语言的解释是:Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。Java 平台是基于Java 语言的平台。这样的平台目前非常流行,因此微软公司推出了与之竞争的.NET平台以及模仿 Java 的C#语言。Android Google选择用Java语言作为它十分流行的Android移动操作系统的编程语言。这个选择在整个件研发人员的社区中引起了新的关注。Android程序编译过程比普通Java程序要多经过一个步骤,将JVM二进制码转换成 Dalvik二进制码。Google 已经可以利用Eclipse 为软件研发人员提供一个成熟的编写Android应用的开发环境。Android支持使用Java作为编程语言来开发应用程序,而Android的Java开发方面从接口到功能,都有层出不穷的变化。考虑到Java虚拟机的效率和资源占用,Google重新设计了Android的Java,以便能提高效率和减少资源占用。第三章 系统分析3.1可行性分析3.1.1操作可行性随着时代的发展,3G时代已经来临,人们对于手机的操作已经很熟练了,而对于Android手机,更是由于简单的操作,行云流水的触摸感觉,已经赢得了世人的青睐。对于本应用而言,操作方面不对存在障碍,简洁大方的用户界面设计,只需用户轻轻点击,即可完成所有的对音乐播放的控制等操作。3.1.2经济可行性本系统开发经费在经济上是可以接受的,现在电脑和手机已经普及,而手机更是人人都拥有,而Android手机更是主流手机,在市面上一般的Android系统手机的价钱都在千元左右,所示说价钱并不是很昂贵。其开发软件在目前来说全部都是免费的。所以本应用在经济上是可行的。3.1.3技术可行性Android作为第一个完整、开放、免费的手机平台,Android也为开发者提供了完整的API,使开发者在为其开发程序时拥有更大的自由。只要开发者有一个比较全面的Java基础,以及一些简单的XML技术,对软件的开发流程有一定的了解,在开发Android程序的时候一般是不会有太大的问题的。只需搭建Android开发必要的开发环境就可以了,本应用选择的开发工具Eclispe+JDK+Android插件ADT。所以开发者想进行Android开发,准备工作其实是很简单的。本应用选择Eclipse,配合Android开发插件ADT,只需运行一个Android Virtual Device(AVD),就可以进行开发和调试的工作,如图3.1所示,这是一个Android Virtual Device(AVD)。综上所述,本应用在技术上是可行的。图3.1Andoid模拟器(AVD)3.2设计目标现今社会生活紧张,而欣赏音乐是其中最好的舒缓压力的方式之一,本项目的目的是开发一个可以播放主流音乐文件格式的播放器,MIDI音乐播放器的实现的这主要功能是播放主流格式的音乐文件,并且能够控制播放、暂停、上一曲、下一曲、进度条控制,视觉外观,播放列表和歌曲列表的操作等多种播放控制功能,界面简明,操作简单。 本项目是一款基于Android手机平台的音乐播放器,使Android手机拥有个性的多媒体播放器,使手机显得更生动灵活化,与人们更为接近,让手机主人随时随地处于音乐视频的旋律之中,使人们的生活更加多样化。在国内三大运营商如火如荼的3G营销战持续升温,再加上3G的推出对整个行业的巨大推动作用,无疑将引爆3G手机开发工程师这个黄金职位。但符合条件的Android工程师屈指可数,在未来几年内,Android开发工程师将成为3G行业炙手可热的岗位之一。MIDI音乐播放器的另外一个设计目标就是让自己更加系统的去熟悉和学习Android开发技术的相关知识,为以后开发Android程序打下良好的基础。3.3功能需求分析根据播放器的实现目标,可获得播放器的基本需求,以下从不同角度来描述系统的需求,系统的功能需求,分成三部分来概括,即播放器的基本控制需求,播放列表管理需求和播放器友好性需求,如图3.2所示为应用功能需求结构图分析。 图3.2 MIDI播放器功能结构图3.3.1播放控制模块分析音乐播放器对于大家来说可以说是不陌生了,对于播放器的控制要求大家也是更加熟悉了。本应用对播放器的基本控制也全部得到了实现,例如:暂停、上一首、下一首和播放时间的同步显示等,如图3.3所示播放器的基本控制功能用例图分析。 图3.3播放器的基本控制功能用例图3.3.2歌曲列表模块分析MIDI音乐播放器设计两个歌曲列表,一个列表显示所有音乐,另外一个列表显示用户自己喜欢并且自己添加的音乐,如图3.4所示,应有的需求有:1) 添加音乐功能:用户可以添加自己喜欢的音乐于另外一个列表。2) 删除音乐功能:用户可以删除自己添加的歌曲。3) 搜索音乐功能:用户对两个列表中的歌曲进行搜索操作。4) 播放列表中的歌曲:用户浏览列表,并且可以播放选中的歌曲。图3.4歌曲列表模块用例图3.3.2播放模式模块分析MIDI音乐播放器播放模式模块应有的需求:循环播放、随机播放、顺序播放和单曲循环的开启与关闭,如图3.5所示。图3.5播放模式模块用例图3.4性能需求分析根据Android手机系统要求无响应时间为5秒,所以就有如下性能要求:Ø 当要求歌曲播放时,程序响应时间最长不能超过5秒。Ø 当要求歌曲暂停时,程序响应时间最长不能超过5秒。Ø 当要求添加或删除歌曲时,程序响应时间最长不能超过5秒。Ø 当要求歌曲上/下一首时,程序响应时间最长不能超过5秒。Ø 当要求进行列表切换时,程序响应时间最长不能超过5秒。第四章 总体设计4.1数据库设计MIDI音乐播放器使用的是Android系统内置的SQLite数据库,对于SQLite数据库的介绍详见2.2.4节。Android系统为开发者提供了一个MediaStore这个类,它是一个多媒体数据库,Android中多媒体信息都可以从这里提取。这个MediaStore包括了多媒体数据库的所有信息,包括音频,视频和图像等。存放媒体信息如TITLE(标题)、ARTIST(艺术家)、ALBUM(专辑封面)、SIZE(大小)和DATA(路径)等字段。MIDI音乐播放器数据库设计阶段,只需要两张表,第一张表存放所有的歌曲信息(即MediaStore类,只需通过Uri:EXTERNAL_CONTENT_URI来访问,就可以得到想要的歌曲信息字段,MIDI音乐播放器用到的字段有:_ID(歌曲ID)、TITLE(标题)、ARTIST(艺术家)、DATA(路径)、ALBUM(专辑封面)、DURATION(歌曲时间)和ALBUM_ID(专辑封面ID)。第二张表favourite存放于自己创建的MyMusic.db数据库中,用于存放用户自己添加歌曲的信息,如表4.1所示。表4.1我的音乐表(favourite)字段名称数据类型允许空说明_IdINTEGERNot null主键Music_idINTEGERNot null歌曲IDMusic_nameTEXTNot null歌曲名字Music_aristTEXT演唱者Music_pathTEXTNot null路径Music_ablumINTEGER专辑封面IDMusic_timeINTEGERNot null歌曲长度4.2基本流程设计4.2.1 整体流程设计 MIDI音乐播放器整体流程,如图4.2所示。图4.2MIDI音乐播放器系统流程图4.2.2 播放控制流程设计 播放控制模块是整个设计控制的核心部分,用户只需通过简单的触摸操作就可以实现对歌曲播放的控制,如图4.3所示。图4.3播放控制模块流程图4.2.3 歌曲列表流程设计 MIDI音乐播放器在初始化界面时,从系统数据库获得SD内所有音乐信息;从数据库Mymusic.db数据库获取用户添加的音乐的信息,将这些得到的信息构建到列表呈现给用户,如果这是用户第一次运行MIDI音乐播放器,程序将新建Mymusic.db数据库。扫描完歌曲文件后,扫描/SDCard/目录下的所有以.lrc为后缀的歌词文件并且存储文件名和文件的绝对路径。如果Mymusic.db数据库中有数据,就可以对Mymusic.db数据库进行查询、添加和删除操作,然后刷新列表信息,这一模块的流程如图4.4所示。图4.4歌曲列表操作流程图4.2.4 播放模式流程设计 播放模式控制即循环播放、随机播放、顺序播放和单曲循环,其中前三种播放模式采用循环切换的模式进行选择,单曲循环独立开来,进行开启或者关闭,如图4.5所示。图4.5播放模式流程图第五章 详细设计5.1 MIDI播放器UI设计对于Android来说,一个好的应用界面的必备条件是:内容清晰、指示明白、屏幕美观和有亲切感。UI通常包含图形和文字,应用界面的设计是对控件进行适当的取舍及功能的选择和处理的过程(对控件进行事件监听)。在MIDI播放器的设计过程中,也是对设计的方法进行反复的推敲、琢磨,才能使其达到完美的境界,MIDI播放器界面的整体风格为经典的黑白色调,界面设计更简洁,更大方。Android的界面写在“res/layout”下面的布局文件中,一般情况下,一个布局文件对应一个界面,如图5.1所示,这是MIDI播放器所有的布局文件。虽然Android生成屏幕的方有三种(第二章已介绍),但是一般使用xml文件配置生成,这里有必要说一下,其实Android界面的代码编写有点像HTML,添加框架,编写代码,生成控件。MIDI音乐播放器的每一个可视化界面,都有其的唯一的布局配置文件,该文件里面有各种布局方式:线性布局(Linear Layout)和相对布局(Relative Layout)等,通过各种资源文件如图像,文字,颜色的引用,和这几种布局的完美组合,这样就形成了MIDI播放器不同的可视化界面和绚烂的效果。下面我详细介绍播放器中的几个重要布局配置文件的设计和实现。图5.1MIDI播放器布局文件5.1.1 歌曲列表界面设计 在程序初始化后,呈现给用户的界面就是歌曲列表界面,如图5.2所示。图5.2歌曲列表界面歌曲列表界面实现了线性布局(Linear Layout)和相对布局(Relative Layout)的相互嵌套,歌曲信息通过ListView控件显示,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示,实现代码如下所示。<ListView android:id="+id/musiclist" android:layout_height="fill_parent"android:layout_width="fill_parent" android:layout_marginLeft="6dp"android: