nadroid平台开发的一款较具个性媒体音乐播放器-大学毕设论文_第1页
nadroid平台开发的一款较具个性媒体音乐播放器-大学毕设论文_第2页
nadroid平台开发的一款较具个性媒体音乐播放器-大学毕设论文_第3页
nadroid平台开发的一款较具个性媒体音乐播放器-大学毕设论文_第4页
nadroid平台开发的一款较具个性媒体音乐播放器-大学毕设论文_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科毕业设计说明书(论文)第35页共36页1引言1.1项目背景随着科技的进步,人们对手机功能的要求也越来越高,不仅需要方便携带,更需要娱乐消遣。手机操作系统也不断改进,而今当下主要有Windowsmobile,symbian,以及谷歌的Android操作系统,其中占有开放源代码优势的Android系统有最大的发展前景。而本文的音乐播放器就是基于谷歌Android手机平台的播放器。Android:是谷歌于2007年公布的开放式源代码手机系统,它的开放性就优于其它封闭式的手机系统,因此,任何人都可能根据自己的喜好将手机系统中的所有功能重新编写。这使得越来越多的人关注这个操作系统。本次作品音乐播放器就是基于Android平台的。从最早的所谓的“大哥大”发展到现在的商务PDA手机,智能手机,音乐手机等等,功能也从单纯的打电话发展到了发短信,听音乐,上网,甚至游戏显而易见,手机和我们的生活联系愈来愈紧密,手机的功能也越来越成为很多人关注的焦点。相信在不远的将来,手机会比电脑的用户更多!目前手机的音乐播放器功能已经是大家比较关注的一个部分了,作为一个音乐爱好者,在自己准备买手机的时候,我也会比较注重这部分,当然也会有许多像我一样的消费者,这也足以看出目前大家对音乐播放器功能的重视,所以一款性能好的手机音乐播放器软件一定会受到追捧。一款专业的音乐播放软件是手机中必不可少的要素,几乎市场上所有的手机都拥有一个自带的音乐播放软件,来满足广大用户的需求,所以网上出现了各种各样的手机音乐播放软件,以满足用户的不同需求。不同手机平台的手机,所支持的音乐播放软件也是各不相同,而现在最流行的手机平台就是google的Android手机平台,所以本课题就致力于开发一款基于Android手机平台的音乐播放器,来满足用户的使用需求。此设计是针对当前市场上比较受Android系统手机用户关注的音乐播放器功能的实现,使其拥有上一曲,下一曲,快进,快退,显示歌词等功能较全面的音乐播放器。更好的符合大众品味,使之界面更人性化。1.2编写目的随着社会的不断进步,人们所面对的社会压力也愈来愈大,而音乐就是舒缓情绪缓解压力的一种方式,而此设计的目的就是是针对当前市场上比较受Android系统手机用户关注的音乐播放器功能的实现,它可以让你随时随地的让你享受到音乐,舒缓压力。它是一款拥有上一曲,下一曲,快进,快退,显示歌词等功能的音乐播放器,操作简单方便,更贴近大众化。本设计是在当下很受欢迎的Android平台开发的一款较具个性媒体音乐播放器,它使用灵活,与人们的生活更加接近,是人么的生活更加丰富多彩。2Android项目介绍2.1Android简介Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的以Linux为基础的开放源码操作系统,主要使用于便携设备。目前尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由AndyRubin开发,最初主要支持手机。2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上。Android的主要竞争对手是苹果公司的iOS以及RIM的BlackberryOS。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。2012年2月数据,Android占据全球智能手机操作系统市场52.5%的份额,中国市场占有率为68.4%。Android的系统架构和其它操作系统一样,采用了分层的架构。从架构图看,Android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。Android是以Linux为核心的手机操作平台,作为一款开放式的操作系统,随着Android的快速发展,如今已允许开发者使用多种编程语言来开发Android应用程序,而不再是以前只能使用Java开发Android应用程序的单一局面,因而受到众多开发者的欢迎,成为真正意义上的开放式操作系统。在Android中,开发者可以使用Java作为编程语言来开发应用程序,也可以通过NDK使用C/C++作为编程语言来开发应用程序,也可使用SL4A来使用其他各种脚本语言进行编程(如:python、lua、tcl、php等等),还有其他诸如:Qt(qtforAndroid)、Mono(monoforAndroid)等一些著名编程框架也开始支持Android编程,甚至通过MonoDroid,开发者还可以使用C#作为编程语言来开发应用程序。另外,谷歌还在2009年特别发布了针对初学者的AndroidSimple语言,该语言类似Basic语言。而在网页编程语言方面,JavaScript,ajax,HTML5,jquery、sencha、dojo、mobl、PhoneGap等等都已经支持Android开发。而在Android系统底层方面,Android使用C/C++作为开发语言。目前最新SDK版本为Android4.0。2.1.1Android特性Android系统有如下的几大特性:·应用程序框架支持组件的重用与替换·Dalvik虚拟机专门为移动设备做了优化·内部集成浏览器该浏览器基于开源的WebKit引擎·优化的图形库包括2D和3D图形库,3D图形库基于OpenGLES·SQLite用作结构化的数据存储·多媒体支持包括常见的音频、视频和静态印象文件格式,如MPEG4,H.264,MP3,AAC,AMR,JPG,PNG,GIF)·GSM电话(依赖硬件)·蓝牙Bluetooth,EDGE,3G,andWiFi(依赖于硬件)·照相机,GPS,指南针,和加速度计(依赖于硬件)·丰富的开发环境包括设备模拟器,调试工具,内存及性能分析图表,和Eclipse集成开发环境插件。2.1.2Android基本框架(AndroidArchitecture) 图2.1AndroidArchitecture(1)ApplicationsApplicationAndroid会同一个核心应用程序包一起发布,该应用程序包包括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)AndroidRuntimeAndroid包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik是针对于同时高效地运行多个VMs来实现的。Dalvik虚拟机执行.dex的Dalvik可执行文件,该格式文件针对最小内存使用做了优化。该虚拟机是基于寄存器的,所有的类都经由JAVA汇编器编译,然后通过SDK中的dx工具转化成.dex格式由虚拟机执行。Dalvik虚拟机依赖于linux的一些功能,比如线程机制和底层内存管理机制。(5)Linuxkernel(Linux内核)Android的核心系统服务依赖于Linux2.6内核,如安全性,内存管理,进程管理,网络协议栈和驱动模型。Linux内核也同时作为硬件和软件堆栈之间的硬件抽象层。linux内核基础为linux平台,linux为C语言编写的内核,基于此内核又衍生出了具体的Redhatlinux、opensuselinux等具体的操作系统,一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux。由于Linux使用C编写而成,因此可以直接对计算机的底层硬件进行操作。Linux具有良好的可移植性,而且以linux为内核的GUI+CLI操作系统具有良好的安全性,因此很多的网络公司大多采用以linux操作内核的网络终端操作系统。相对于windowsserver系列linux的网络终端操作起来效率较高,相比于linux的前身Unix,Linux操作系统不仅优化了操作界面,和操作的简易性,更是提高效率一个优秀的操作系统内核。如果Linux内核的可移植性和效率还不够好,Linux还提供了其他一些特性,它们无法划分到上面的分类中。作为一个生产操作系统和开源软件,Linux是测试新协议及其增强的良好平台。Linux支持大量网络协议,包括典型的TCP/IP,以及高速网络的扩展(大于1GigabitEthernet[GbE]和10GbE)。Linux也可以支持诸如流控制传输协议(SCTP)之类的协议,它提供了很多比TCP更高级的特性(是传输层协议的接替者)。Linux还是一个动态内核,支持动态添加或删除软件组件。被称为动态可加载内核模块,它们可以在引导时根据需要(当前特定设备需要这个模块)或在任何时候由用户插入。Linux最新的一个增强是可以用作其他操作系统的操作系统(称为系统管理程序)。最近,对内核进行了修改,称为基于内核的虚拟机(KVM)。这个修改为用户空间启用了一个新的接口,它可以允许其他操作系统在启用了KVM的内核之上运行。除了运行Linux的其他实例之外,Microsoft®Windows®也可以进行虚拟化。惟一的限制是底层处理器必须支持新的虚拟化指令。2.1.3Android项目介绍在Android系统中,为我们提供了四大基本组件:Activity(活动),Service(服务),BroadcastReceiver(广播),ContentProvider(内容提供者),每个组件是一个视图,但是有些是可见的,有些是不可见的视图,像Activity,ContentProvider是可见的视图,Service和BroadcastReceiver是不可见的,它们只在系统的后台运行。各组件之间要进行切换需要一个意图或企图Intent类,通过启动StartIntent()方法来使各组件进行跳转。下面分别介绍四大组件:(1)Activity在Android系统中Activity提供可视化的用户界面,一个Android应用通常由多个Activity组成。多个Activity组成了Activity栈(Stack),当前活动的Activity处于栈顶。Activity有自己的生命周期,由Android系统来控制。(2)Service顾名思义Service就是运行在后台的一种服务程序,一般很少和用户交互,因此没有可视化界面定义一个Service类比较简单,只要继承Service类,实现其生命周期中的方法就可以了。一个定义好的Service必须在AndroidManifest.xml配置文件注册,通过<service>元素声明才能使用.Service有自己的生命周期,我们可以调用startService()启动一个Service或者bindService()方法来绑定一个存在的Service。(3)BroadcastReceiverBroadcastReceiver顾名思义广播接收器,它和事件处理机制类似,只不过事件处理机制是程序组件级别的(例如,某个按钮的单击事件),而广播事件处理机制是系统级别的。到目前为止我们可以使用Intent来启动一个程序组件,我们还可以通过使用sendBroadcast()方法来发起一个系统级别的事件广播来传递消息。我们可以在你的应用程序中实现BroadcastReceiver来监听和响应这些广播的Intent。(4)ContentProviderContentProvider用来保存和检索数据,并且使应用程序之间相互访问数据成为可能。它是跨应用程序共享数据的唯一方法。Android为常用的数据类型(如:音视频、图片和联系方式等)提供了大量的ContentProvider。它们被定义在Avider包下面。通过这样定义好的ContentProvider我们可以方便的进行数据操作。当然我们必须拥有适当的权限。我们也可以自己来定ContentProvider共享我们的数据,方便用户的访问。一个Android基本应用程序的实现不仅需要组件,也需要开发者选择其应用程序的布局方式,而Android拥有五大布局方式:LinearLayout(线性布局)FrameLayout(帧布局)TableLayout(表格布局)AbsoluteLayout(绝对布局)RelativeLayout(相对布局)。五种布局方式可以相互嵌套,Android各种漂亮的界面都是通过嵌套布局而实现的。Android的线程,以及线程之间通信的中介:Handler类。Android配置文件:AndroidManifest.Xml及res资源文件中各种属性布局方式引用的资源等。Android系统将插件ADT集成到了Eclipse工具上,因此,一个Android程序启动后,系统会启动一个模拟器(Emulator)(图2.2),该模拟器是一款手机板的样式,拥有手机硬件的基本操作。图2.2Android模拟器2.1.4Android应用程序构成Android应用程序基本有以下几个构成:A、src源代码目录:src目录中包含了一个Android应用程序中所需的全部程序代码文件。B、gen目录:gen目录下面的R.java文件是ADT自动产生的,R.java中定义了一个R类,它包含了与用户界面、图像、字符串等各种资源与相应的编号id。C、Res资源目录:定义了drawable:用于存放.png/.jpg等图片文件,通过resource.getdrawable(id)获得资源。Layout:描述应用程序的用户界面布局格式为.xml。Values:参数目录包含了所有使用了.xml格式的参数描述文件。D、Androidmanifest.xml:它是系统的控制文件,它告诉系统如何处理你所创建的所有顶层组件(尤其是Activity、service、intentReceiver以及ContentProvider)。具体图如下图:图2.3Android应用程序构成2.2Android数据存储方式在播放器正常运行时,由于各界面存在相互跳转,为了避免数据在界面跳转的过程中丢失,我们需要将一些数据进行临时存储或者永久存储。Android作为一种手机操作系统,提供了如下几种存取数据的方式:Preference(配置)、File(文件)、SQLite数据和网络。另外,在Android中各个应用程序组件之间是相互独立的,彼此的数据不能共享。为了实现数据的共享,Android提供了ContentProvider组件来实现应用程序之间数据的共享。2.2.1SharedPreferencesPreferencePreference提供了一种轻量级的数据存取方法,一般数据比较少,一些简单的配置信息。它以“键-值”(是一个Map)对的方式,将数据保存在一个XML配置文件中使用到的接口:Android.content.SharedPreferences提供了保存数据的方法android.content.SharedPreferences.Editor提供了获得数据的方法下面以播放器中的播放模式存取为例:(1).xml配置文件的读取我们仍以播放模式读取为例:当需要用到播放模式的确定时,我们将读取.Xml文件,同样用共享文件类SharedPreferences通过用方法getSharedPreferences("SET_MSG",MODE_WORLD_READABLE),并且是只读方式获得.Xml的文件内容。SharedPreferences的对象调用方法getString("sigle_Play",null),方法返回一个String类型的值,即是我们以前存储进去的String值。此方法当该标记不存在时会默认返回一个null值。获得成功后我们就可以运用当前的值再对程序进行操作了。(2).xml配置文件的存储类SharedPreferences。它有一个方法getSharedPreferences(参数1,参数2),参数1为写进时的标记,便于在从其中读取出来时的标记,参数2为读取模式,有只写模式(MODE_WORLD_WRITEABLE)和只读模式(MODE_WORLD_READABLE),在写之前将其置入编辑状态,用静态方法SharedPreferences.Editoreditor=sp.edit();然后对象editor可以存入一个HashMap<key,values>类型的键值,即putString(KEY,VALUES),这样,我们可以将List中的对象转化成一样长的字符中放进配置文件中。当写入成功时,Android系统会自动在目录data/data/工程包名/shared_prefs/目录下生成一个配置文件2.2.2File存储方式我们可以将一些数据直接以文件的形式保存在设备中。例如,一些文本文件、PDF文件、音视频文件和图片等。Android提供了文件读写的方法:方法Context.openFileInput()获得标准Java文件输入流(FileInputStream)Context.openFileOutput()获得标准Java文件输出流(FileOutputStream)Resources.openRawResource(R.raw.myDataFile)方法返回InputStream。2.2.3SQLiteDatabase数据库SQLite是一个嵌入式数据库引擎,针对内存等资源有限的设备(如手机、PDA、MP3)提供的一种高效的数据库引擎SQLite数据库不像其它的数据库(如:Oracle),它没有服务器进程。所有的内容包含在同一个单文件中。该文件是跨平台的可以自由拷贝。基于其自身的先天优势,SQLite在嵌入式领域得到了广泛应用SQLiteDatabase类 SQLiteDatabase代表一个数据库对象,提供了操作数据库的一些方法常用方法(图2.4)方法名称方法描述OpenOrCreateDatabase(Stringpath,SQLiteDatabase.CursorFactoryfactory)打开或创建数据库Insert(Stringtable,StringnullColumnHack,ContentValuesvalues)添加一条记录Delete(Stringtable,Stringwhereclause,String[]whereArgs)删除一条记录Query(Stringtable,String[]columns,Stringselection,String[]selectArgs,StringgroupBy,Stringhaving,StringorderBy)查询记录Update(Stringtable,contentValuesvalues,Stringwhereclause,String[]whereArgs)修改记录execSQL(Stringsql)执行一条SQL语句Close()关闭数据库图2.4数据库的常用方法SQLiteOpenHelper类SQLiteOpenHelper是SQLiteDatabase的一个帮助类,用来管理数据库的创建和版本更新。一般的用法是定义一个类继承之,并实现其两个抽象方法onCreate(SQLiteDatabasedb)和onUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion)两个抽象方法来创建和更新数据库常用方法(如图2.5)图2.5创建和更新数据库常用方法方法名称方法描述SQLiteOpenHelper(Contextcontext,Stringname,SQLiteDatabase.CursorFactoryfactory,intversion)构造一个方法,一般是传递一个要创建的数据库名称name参数onCreate(SQLiteDatabasedb)创建数据库时调用onUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion)版本更新时调用getReadableDatabase()创建或打开一个只读数据库getWritableDatabase()创建或打开一个读写数据库Android的三种数据存储方式则让我们可以轻松方便的进行程序编写和数据的访问,更不会让不该消失的数据消失,这对我们进行程序书写有很大帮助。2.3搭建Android开发环境任何事物要运行,都要有它的环境,Android也有它的环境才能够运行,下面介绍Android的开发环境配置。搭建开发环境需要的软件:操作系统:WindowsXP、windows7或Linux软件包:AndroidSDK(SoftwareDevelopmentkitJavaDevelopmentkit)、ADT(AndroidDeveloopmentTool)IDE环境:EclipseIDE+ADTEclipse3.3以上JDK:JavaRuntimeEnvironment虚拟机、(JDK)JavaDevelopmentkit安装步骤如下:第一步:安装Java虚拟机sun-java6-jdk版本,设置环境变量步骤如下:我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量:JAVA_HOME值为:D:\ProgramFiles\Java\jdk1.6.0_18(你安装JDK的目录)CLASSPATH值为:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\bin;Path:在最前端追加%JAVA_HOME%\bin;安装完成之后,可以在检查JDK是否安装成功。打开cmd窗口,输入java–version查看JDK的版本信息。出现类似下面的画面表示安装成功了:图2.6验证JDK安装是否成功第二步:安装Eclipse8.6工具官网/downloads/选择版本进行安装。 第三步:安装AndroidSDK:首先要下载SDK,可以在以下网址下载Http:///sdk,选择相应的系统进行安装,下载完成后解压到任意路径。运行SDKSetup.exe,点击AvailablePackages。如果没有出现可安装的包,请点击Settings,选中Misc中的"Forcehttps://..."这项,再点击AvailablePackages。选择希望安装的SDK及其文档或者其它包,点击InstallationSelected、AcceptAll、InstallAccepted,开始下载安装所选包。在用户变量中新建PATH值为:AndroidSDK中的tools绝对路径: 图2.7设置AndroidSDK的环境变量“确定”后,重新启动计算机。重启计算机以后,进入cmd命令窗口,检查SDK是不是安装成功。运行Android–h如果有类似以下的输出,表明安装成功:图2.8验证AndroidSDK是否安装成功 第四步:安装AndroidADT插件运行Eclipse,选择help->installnewsoftware选择add,将会弹出一个框,如图2.9: 图2.9弹出框点击ok点击OK,选择要安装的软件,点击next,然后选择接受协议,直到安装成功,重启Eclipse软件,设置AndroidSDKHome,Window->refrence如图2.10:图2.10reference在SDKlocation中输入SDKTools路径:D:\java\android-sdk-windows点击OK,这样Android环境就已经搭建成功了。第五步:创建AVD为使Android应用程序可以在模拟器上运行,必须创建AVD。1、在Eclipse中。选择Windows>AndroidSDKandAVDManager2、点击左侧面板的VirtualDevices,再右侧点击New3、填入Name,选择Target的API,SDCard大小任意,Skin随便选,Hardware目前保持默认值4、点击CreateAVD即可完成创建AVD注意:如果你点击左侧面板的VirtualDevices,再右侧点击New,而target下拉列表没有可选项时,这时候你:点击左侧面板的AvailablePackages,在右侧勾选/android/repository/repository.xml,如下图所示: 图2.13AndroidSDKandAVDManager然后点击InstallSelected按钮,接下来就是按提示做就行了。要做这两步,原因是在前面AndroidSDK安装中没有安装一些必要的可用包(AvailablePackages)。3需求分析3.1功能分析根据项目的目标,我们可以获得项目系统的基本需求,以下从不同角度来描述系统的需求,并且使用用例图来描述,系统的功能需求,我们根据以下几部分来概括,即播放器的基本控制需要,播放清单列表管理需求,和播放器扩展卡需求。以下分别描述:3.1.1播放器的基本控制需求用户用户播放暂停Menu歌词显示下一首上一首刷新库退出设置模式单曲随机循环图3.1播放器基本控制图播放:用户可以播放在播放列表中选中想要播放的歌曲,单击播放按钮,播放器即播放所选歌曲。暂停:在播放器正在播放过程的界面当中,用户可以点击暂停按钮即可暂停当前正在播放的歌曲。上一首/下一首:若用户想听下一首或上一首歌曲,即可点击上一首或下一首按钮,歌曲将自动播放当前正在播放歌曲的前一首或下一首歌曲。Menu:用户可以点击右边操作Menu按钮,即会在播放界面弹出“刷新库”“退出”按钮。3.1.2播放清单列表播放清单列表播放清单列表全部音乐最常播放最近播放图3.2播放清单列表图全部音乐:存有手机SDcard内所有播放歌曲,只需点击其中一首,即可播放。最常播放:内存有最近用户所常常播放的歌曲。最近播放:记录用户前次操作时所播放的歌曲。3.1.3播放器扩展卡需求用户用户文件浏览器/systemSDcard返回根目录.mp3.wav图3.3扩展卡SDcard:程序运行时,用户可以找到“SDcard”选项,单击,即可进入SDcard目录下,即存有所有歌曲清单。3.2系统功能需求分析与流程图3.2.1系统功能结构图Android手机音乐播放器Android手机音乐播放器播放列表播放界面菜单Menu全部音乐最常播放最近播放刷新库退出播放模式单曲循环随机播放播放暂停上一曲下一曲快进快退图3.4系统功能图播放列表:播放列表菜单,内存有全部音乐,最常播放以及最近播放。单击所选歌曲即可进入播放界面。播放界面:播放界面中包括播放、暂停、上一曲、下一曲等便捷按钮,也可以点击进度条任意位置以调节歌曲播放进度,即快进快退的功能。菜单Menu:Menu内包括刷新库、退出按钮和设置模式按钮,当用户在播放器内增加歌曲时,只需点击刷新库即可将歌曲录入其中,设置播放模式是随用户喜欢,可设置单曲循环,随机播放,以及循环播放。3.2.2音乐播放器的系统流程图单击设置N单击设置N程序启动菜单列表曲目选择歌曲播放曲目Y菜单选项设置模式单曲、循环、随机播放YN程序结束单击退出图3.5系统流程图用户可以根据以上系统流程图对程序进行播放器的基本操作,即可简单了解播放器的用法,其操作简单,使用方便,更加贴近人们生活。3.3系统界面需求为了满足用户日益提高的要求,首先播放器的系统界面设计布局一定要给用户留下良好的印象,所以在构思播放器的排版时,画面不但需要清晰合理,而且还要画面舒服,使用户在享受音乐的同时,还可以在欣赏音乐播放器界面,让用户保持良好的心情。最终播放器界面可见下图:图3.6播放器界面图播放总界面可如上图,最顶端一栏显示播放器名称“蓝色天堂”,紧接其下则是三个ImageButton构成的正在播放、播放列表、和歌词显示三个按钮。中间则是显示歌曲名称、专辑图片、歌词显示,再者就是播放进度条的摆放位置。播放进度条下则是显示上一曲、暂停/播放、下一曲按钮。在Android虚拟器上点击Menu按钮则会出现刷新库、退出、设置模式等按钮以满足用户更多的需求,使其更具人气,更加人性化。3.4运行环境操作系统:Android手机基于Linux操作系统支持环境:Android1.5-2.2版本开发环境:Eclipse8.6ADT0.9.94播放器功能详细设计4.1音乐播放器界面实现4.1.1播放器主界面图4.1播放器主界面(左面为上一曲按钮、中间为播放暂停按钮、右面则是下一曲按钮)在播放器的主界面的设计中,由“TextView”、“ImageButton”、“SeekBar”“ImageView”等等控件共同组成。而Android中的每个可见界面都是一个Activity,每添加一个Activity就需要在res/AndroidMainfest.xml中进行配置。<activityandroid:name=".TabActivity"android:label="@string/app_name">一个Activity就是一个类,且这个类继承Activity,都需复写一个OnCreate方法,代码如下:publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main);}该方法主要执行界面的初始化操作,Activity有个设置布局的方法:Context.setContentView(layoutResID),参数为资源ID,该Id在工程目录res/layout下,主界面布局文件名为mainpage。界面布局文件文件名为mainpage.xml,代码结构见附录A。切换标签的设计描述。4.1.2播放界面的音轨的实现播放器的音轨是利用Android系统内自带的SeekBar组件来实现的。在配置文件mainpage.xml中,SeekBar的代码如下:图4.2播放进度条<SeekBarandroid:layout_height="wrap_content" android:layout_width="match_parent"android:paddingRight="25dip" android:paddingLeft="25dip"android:maxHeight="8px"android:minHeight="8px" android:thumb="@drawable/focus"//android:progressDrawable="@drawable/seekbar_style"//SeekBar条的风格style。 android:layout_below="@+id/lrc"android:layout_alignParentLeft="true" android:id="@+id/seekbar"></SeekBar>//SeekBar是歌曲播放进度条的控件。上面代码中有参数android:thumb="@drawable/focus"为音轨游标的图片资源,定义其高宽等属性,还有位置,即在显示歌词的TextView下方。SeekBar条的风格style,引用了drawable中的seekbar_style.xml文件,seekbar_style.xml是自定义的配置文件,代码见附录B。该段代码定义了控件SeekBar的倾斜度,进度条两端的圆半径,以及它背景色从灰色到蓝色,也定义了进度条从开始到中间到结束的颜色。从以上定义生成图上所示的进度条。4.1.3播放器的播放暂停等功能实现功能如下图:图4.3基本功能按钮控件在布局文件中详细代码如下:<ImageButtonandroid:id="@+id/play"android:layout_height="wrap_content" android:layout_width="wrap_content"android:background="@drawable/play" android:layout_alignTop="@+id/backward"android:layout_toRightOf="@+id/backward" android:layout_marginLeft="24dp"></ImageButton> <ImageButtonandroid:layout_height="wrap_content" android:layout_width="wrap_content"android:background="@drawable/forward" android:id="@+id/forward"android:layout_alignBottom="@+id/play" android:layout_toRightOf="@+id/play"android:layout_marginLeft="25dp"></ImageButton> <ImageButtonandroid:layout_height="wrap_content" android:background="@drawable/backward"android:layout_width="wrap_content" android:id="@+id/backward"android:layout_alignParentBottom="true" android:layout_alignParentLeft="true"android:layout_marginLeft="63dp"></ImageButton>该控件是按水平排放,需要采用线性布局即Linearlayout。在Androidmanifest.xml内先定义一个service类,只要继承Service类,实现其生命周期中的方法就可以了。所以,实现暂停播放,上/下一首的功能,则利用Intent启动Service,即StartService(Intent)方法实现程序的响应,在drawable.xml布局文件中,定义的ImageButton命名的“play”“pause”等,在R.java中的drawable类中都会自动生成一个id,所以在程序中就可以直接调用,定义play(),pause(),lastone(),nextone()方法,再利用Intent.SetAction()方法来启动service来响应程序动作,以实现以上动作。代码如下:privatevoidplay(){ flag=STATE_PLAY; play.setBackgroundResource(R.drawable.pause); Intentintent=newIntent(); intent.setAction("com.becky.media.MUSIC_SERVICE"); intent.putExtra("op",MUSIC_PLAY); startService(intent); }播放器上一首和下一首、播放暂停的实现描述。4.2音乐列表的实现全部音乐列表如下图所示:图4.4音乐列表布局关系代码如下:<?xmlversion="1.0"encoding="utf-8"?><LinearLayout> <TextView/><TextView/> </LinearLayout> <TextView/></TextView> <ListView></ListView></LinearLayout>listView显示歌曲名字列表,其特点是一个有BaseAdapter的属性,从下到下,或从左到右的以显示方式。我们定义一个类MusiclistAdapter继承了BaseAdapter,然后通过算法对这个适配器进行扩展,扩展成为第一行能显示一张图片和一个歌曲名字。由于BaseAdapter是一个抽象类,我们需要实现里面的抽象方法getView()。该方法返回一个View,即视图。视图可以显示在Activity上,所以就可以看到我们想要的歌曲列表界面。每一个listView都会有个监听器,当鼠标点击就会触发事件,执行动作,跳转到另一个Activity,即播放界面。4.3菜单界面功能实现图4.5菜单界面同样该界面采用线性布局LinearLayout,用到listView,TextView,imageButton等控件来实现上图界面结构。publicclassTab_ListextendsActivity{ privateListViewlistview=null; protectedvoidonCreate(BundlesavedInstanceState){ //TODOAuto-generatedmethodstub super.onCreate(savedInstanceState); String[]strs={"全部音乐","最近播放列表","最经常播放列表"};} 通过ListView.setAdapter()方法将这些参数设置到界面中去,可以看到与界面显示效果相同!listview.setAdapter(adapter); listview.setOnItemClickListener(newOnItemClickListener(){}为ListView设置监听器,对用户点击列表内一项的动作进行响应。即可进入另一个Activity,即播放列表。4.4设置模式功能实现4.4.1界面实现图4.6设置模式该界面是当用户选择设置模式时,程序就会从一个Activity跳转到另一个Activity,这个Activity和歌曲列表类似,也是一个ListView,它是独立于界面的一个视图,该对话框中放置了一个布局文件。同样也有一个监听器,当鼠标点击就会触发事件,执行动作,跳转到另一个Activity。4.4.2歌词显示实现本播放器以歌词格式.Lrc的文件。存放于扩展卡SDcard目录下,里面亦存放着音频文件,而SDcard则在Fileexplorer/mnt目录下,我们可在其中增加删除文件等操作。如下图:图4.7SDcard目录图结论通过本次毕业设计,我从中学习到了很多的东西。凡事都有从量变到质变的过程,明白了只有一定量的积累,才能有质的飞跃!因此也对很多东西有了新的认识和见解,从认识问题到分析思考问题,最后是解决问题,一切都是那么有规律可循,我渐渐从开发中找到了技巧。初步对一个系统的架构设计有了一定了解,特别对开发的模式有了更深的认识,对专业技能的运用更熟练。在开发程序初期的分析调查时,发现现代人们对手机功能的要求越来越高,不但要有基本的联系功能,更要有娱乐功能。随着社会的进步,人们面对的社会压力也越来越大,因此更希望自己在休息时间能够得到放松,舒缓情绪,释放压力。从而对手机功能有了很大的要求,而音乐是令人放松心情的一种有效渠道,从而,我开始对该程序的界面以及功能做了详细的设计,根据现代市场上最受欢迎的一种手机操作系统也就是Android操作系统。开发中,只是安装了Android运行环境就花费了接近三小时。在开发起初,我并不熟悉Android开发概念和过程,通过此次的对Android手机平台的音乐播放器软件的开发,使我对Android音乐播放器系统的整体设计有一个深入的了解,对整个流程也会有一个清晰的认识。开发Android音乐播放器,不但需要注重音乐播放器的主界面、播放列表、菜单、播放设置等功能的设计,还要注重到界面的设计是否舒适等细节。此次的音乐播放器系统实现了播放器的基本功能:播放,暂停、上/下一首、歌词显示、播放模式等功能。运用的系统平台是现今最热门的Android系统,它是一个开源的基于Linux系统的手机平台。利用JAVA语言和ECLIPSE编辑工具对播放器进行编写。是以Java语言编写+SQLite数据库支持+SharePreference配置文件的组合方式进行数据管理。实现了音乐播放器的系统编程。总之,经过自学了几个月的Android系统技术知识的学习和对音乐播放器的构思与设计,使我对Android系统有了一定的了解,让我对Android系统上的开发流程和开发模式有了深入的了解,从以往的未曾接触过的开发环境,到现在的熟悉了解Android的开发过程,感觉是一种很奇妙的心情。虽然这次的Android手机音乐播放器功能还不够完善,但基本实现了一般音乐播放器的一些功能,但这促使我今后更加努力学习Android开发知识。致谢 在此程序完成以及论文书写过程中,其实,遇到了很多问题。比如说在做程序时,刚刚接触到Android时,自己几乎是一无所知,在中软培训时期,老师教了一些,才对这个系统环境有了一定的了解,但要真正做出一个像样的程序几乎不可能,所以,在开始入门的过程中就遇到了很多的困难。在那期间,有几位同学帮助了我许多,告诉我应该怎样学习,告诉我该下载那些资料去学习,应该掌握哪些知识点等等。而我自己也在看视频学习,真的很谢谢他在做毕业设计期间对我的支持与帮助,即使在百忙之中。我还要感谢我的毕业设计导师谢玲老师对我的支持和建议,让我能顺利的完成本次论文。当我不知对论文如何开始下手时,老师给了我很多的建议,不但帮我们梳理程序逻辑,还会在检查程序过程中,提出缺少哪些功能,并要求我们加以完善,也在我们上交论文后会仔细挑出我们应注意的地方,指出我们错误的地方等等。在此毕业设计论文完成过程中,不但增强了我的独立思考的能力,也让我感受到人与人之间的相处的模式,人是一种群居动物,没有人能够脱离群体,独立生活,只有大家相互帮助,这个社会才会更具热情。真心感谢每一位帮助过我的老师和同学,无论是在此次的毕业设计过程中,还是在论文书写过程中,或是在过去的四年大学生活中,真真的谢谢你们!参考文献[1]杨丰盛.ANDROID应用开发揭秘[M].北京:机械工业出版社.2010.[2]王世江,盖索林.GoogleAndroid开发入门指南[M].北京:人民邮电出版社,2009.[3]王世江,余志龙,郑明杰等.GoogleAndroidSDK开发范例大全[M].北京:人民邮电出版社,2010.[4]MarkL.Murphy,李雪飞,吴明晖.Android开发入门教程[M].北京:人民邮电出版社,2010.[5]郭宏志.Android应用开发详解[M].北京:电子工业出版社,2010.[6]EdBurnette,田俊静.Android基础教程[M].北京:人民邮电出版社,2011.[7]张云亮.Android开发应用实战详解[M].北京:中国铁道出版社,2011.[8]靳岩,姚尚朗.Android开发入门与实战[M].北京:人民邮电出版社,2009.[9]E2ECloud工作室.深入浅出GoogleAndroid[M].北京:人民邮电出版社,2009.[10]郝玉龙.Android程序设计基础[M].北京:北京交通大学出版社,2011.[11]朱桂英.Android开发应用从入门到精通[M].北京:中国铁道出版社,2011.[12]耿祥义,张越平.JAVA2实用教程[M].北京:清华大学出版社,2006.[13]BruceEckel.Java编程思想[M].北京:机械工业出版社,2007.[14]常建功.JavaWeb典型模块与项目实战大全[M].北京:清华大学出版社,2011.[15]余志龙.GoogleAndroidSDK开发范例大全[M].北京:人民邮电出版社,2009.附录A4.1.1界面布局文件文件名为mainpage.xml,代码结构为:<?xmlversion="1.0"encoding="utf-8"?><RelativeLayout//播放主界面主要采用相对布局android:id="@+id/relativeLayout1" android:layout_width="fill_parent"android:layout_height="fill_parent" xmlns:android="/apk/res/android"> <TextViewandroid:layout_height="wrap_content"android:id="@+id/name" android:layout_width="match_parent"android:gravity="center" android:textSize="25dip"android:te

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论