版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于Android音乐播放器详细设计(完整资料)(可以直接使用,可编辑优秀版资料,欢迎下载)
项基于Android音乐播放器详细设计(完整资料)(可以直接使用,可编辑优秀版资料,欢迎下载)目详细设计3组:梁锦21209010417王燕21209010414李雪飞21209010415卫妙珠21209010419雷宁21209010418曹项飞21209010416目录TOC\o”1—3”\h\z\uHYPERLINK\l"_Toc327035878"1音乐播放器设计PAGEREF_Toc327035878\h181。1项目介绍PAGEREF_Toc327035879\h18HYPERLINK\l”_Toc327035880"1.1。1播放器的基本控制需求PAGEREF_Toc327035880\h181.1.2项目流程PAGEREF_Toc327035881\h191.1。3UI界面设计PAGEREF_Toc327035882\h20HYPERLINK\l"_Toc327035883”1.1.4项目程序结构PAGEREF_Toc327035883\h211。1。5项目Manifest.xml文件PAGEREF_Toc327035884\h221。2创建项目及具体结构分析PAGEREF_Toc327035885\h25HYPERLINK\l”_Toc327035886"1.2.1项目的创建PAGEREF_Toc327035886\h25encoding=”utf—8"?〉〈manifest> 〈application〉ﻩﻩ<activity〉 ﻩ〈intent-filter> ﻩﻩ <action/><category/> 〈intent—filter> ﻩ〈activity〉 <application〉ﻩ<user-sdk/><user-permission/〉〈/manifest〉Android系统有一个编码的规定,支持的编码是”utf-8",当程序中出现乱码是,我们须将其编码格式转化为"utf-8”.在AndroidManifest。xml中会在第一行声明一句:<?xmlversion=”1.0"encoding=”utf-8”?〉。它是该系统支持的版本和编码。在第二行定义了我们需要使用的架构,该架构来自xmlns:android=”http://schemas.android。com/apk/res/android”xmlns(XMLnamespace)是一个命名空间,它就像一条河的源头一样能让我们找到系统架构,每一个配置文件必须有这个xmlns,否则程序中的所使用的所有资源将无法找到。如下程序,在application元素我们定义android:icon="@drawable/icon"android:label="@string/app_name",android:icon是程序在手机中显示的图片,我们运用@drawable/icon表示了对res/drawable目录下的icon.png的引用。@string/app_name表示了对res/value目录下string。Xml中定义的app_name参数的引用。<applicationandroid:icon=”@drawable/music"android:label="@string/app_name"><activityandroid:label=”@string/app_name"android:name=”.MainActivity”〉〈intent-filter〉<actionandroid:name="androient。action.MAIN”/>〈categoryandroid:name=”android.intent.category。LAUNCHER”/><actionandroid:name="android.intent.action.CREATE_SHORTCUT"〉〈/action〉<actionandroid:name=”cn.com.karl.music。MainActivity"></action〉</intent—filter〉</activity〉这是系统确定的首先要启动的Activity是PlayRackActivity.在intent—filter选项中,有action和category等等属性,我们需要定义action的值为android.intent。action.MAIN,category的值为android。intent.category。LAUNCHER,它们是系统的值,程序在解析到这些常用后就可以确定首先要启动的Activity。当我们需要通过一个组件触发另一个组件时,我们将设定action和category的其它属性值,系统会根据我们设定的属性值去AndroidManifest。Xml的application中寻找标识,任何一个Activity的action和category是唯一,所以程序在任何时候都能唯一启动一个Activity,这样,不同的Activity之间的跳转就实现了。在AndroidManifest。Xml中有一个根结点〈uses-sdk>,它是我们需要定义的ADT版本,例如我们将其值设定为android:minSdkVersion="8",则表示此Android工程所用的版本为1.6,Android还有1。1、1.5、1.6、2.0、2.1这几个版本。如果我们需要对网络进行访问,比如打开一个网页,刚我还需要设置一个网络访问权限uses—permission,将其的值设置为android:name="android.permission.INTERNET,我们就可以访问网络了。当然uses—permission还有很多其它的权限,例如GPS定位权限,浏览器数据存取权限com.android.browser。permission。READ_HISTORY_BOOKMARKS等等。当程序的任何一个组件要用到时,都必须在AndroidManifest。Xml文件中声明.四大组件要使用前都需要声明,其声明方式如下:<service></service>〈provider></provider>〈activity></activity>〈receiver></receiver>其中声明provider时还需要声明其授权authorities。每个组件里面还有很多的属性,会根据程序的具体需要定义不同的属性.过滤器intent-filter有两种启动方式来启动界面:(1)显示方式显示方式是在代码中的直接启动组件,启动时会声明Intent,在它的构造方法Intent(组件1,组件2)中直接指定一个组件的名字,然后调用方法startIntent(intent)以启动指定的组件.(2)隐式方式隐式方式是通过过滤器来过滤完成的,启动的组件必须满足action和category的条件才能够启动该组件。这些属性是在AndroidManifest.Xml文件中声明的。两种启动方式都可以通过程序setAction(ACTION常量)和startActivity(intent)或配置文件两种方式来实现组件的跳转。1.2创建项目及具体结构分析本节着重分析项目结构中每一个功能的功能设计与创建方法。包括了项目的创建,界面的设计以及对项目结构的分析.1。2.1项目的创建可以使用Eclipse插件创建一个简单的Android程序。在创建新项目时需要注意输入以下信息:Projectname(项目名称):chengchengMusicPlayerBuildTarget(需要的版本):Android1.5Applicationname(应用名称):MusicPlayer1Packagename(包名):cn。com.karl.musicCreateActivity(Java项目名称):MusicPlayer在实际程序中,我们可以定义自己的名称。其中软件包名称尤为重要。系统中的每个应用程序都必须具有唯一的软件包名.因为在很多地方都会用到软件包名,所以一旦设定好软件包名就不要随意修改它。1.2。2界面设置配置文件setting.Xml布局结构如下:<?xmlversion="1.0"encoding="utf-8”?>ﻩ<LinearLayout> <RadioGroup>ﻩﻩ 〈RadioButton〉</RadioButton> ﻩﻩ<RadioButton></RadioButton> <RadioButton>〈/RadioButton> ﻩ〈/RadioGroup〉 </LinearLayout>〈ToggleButton/〉<AbsoluteLayout> <ImageButton/>ﻩ 〈ImageButton/>ﻩ</AbsoluteLayout>最外层的LinearLayout里面嵌套多层LineaLayout,子LinearLayout里面嵌套着单选按钮RatioGroup和开关按钮ToggleButton。RatioGroup里面嵌套着3个RatioButton,即界面上显示的(单曲循环、随机播放、顺序播放)。播放模式用的是一个组件RadioGroup,这个组件有单项选择的功能,里面有RadioButton项,多个RadioButton项只能同时选中一个,该播放器播放模式有单曲循环,随机播放,顺序播放等功能。MediaPlayer有一个监听器,它监听着歌曲是否正在播放或者是否播放完成,当歌曲播放完成时,会触发方法OnCompletionListener(),在该方法里面可以处理歌曲播放完成后的操作。RadioGroup可以进行单项选择操作。通过RadioButton。isChecked(),如果返回true,刚该项被选中。1.2.3结构分析(1)播放器的。Java文件.Java文件是本项目的主要功能实现程序。在cn.com.karl.music程序包中的以下文件:AlbumsActivity。java,ArtistActivity.java,ItemActivity.java,MainActivity.java,MusicActivity.java,MusicService.java,SongActivity.java其中,AlbumsActivity。java文件主要描述并定义了专辑的视图界面以及功能作用。ArtistActivity。java文件主要描述并定义了艺术家的视图界面以及功能作用。ItemActivity。java文件主要描述并定义了歌曲项目的视图界面以及功能作用。MainActivity.java定义并实现了记忆上一次运行该项目的动作,在下一次打开运行后继续该操作。MusicActivity.java文件主要描述并定义了音乐播放器主界面的视图界面以及功能作用。MusicService.java是音乐播放器在后台运行的程序.SongActivity。java文件主要描述并定义了最近播放歌曲的记忆功能。(2)播放器的图片资源播放器的图片资源主要在res文件夹中。当然也可以通过更换res中的图片来更换音乐播放器各个UI界面的背景或其他按钮图片。对于不同的界面,比如播放界面,歌曲列表界面,艺术家界面或者最近播放界面,都快可以设置不同的背景图片,这就使整个播放器在色调方面不显得那么单一了。1.3设计成果及分析在经过多次的程序调试及模拟器和真机测试后,本音乐播放器的设计成果及界面效果图会在本节中做概要介绍。1.3。1设计成果(1)音乐播放界面如下图5.1所示:(图5.1)(2)歌曲列表界面如下图5.2所示(图5。2)(3)艺术家界面如下图5。3所示(图5。3)上述便是在经过多次的程序调试及模拟器和真机测试后,本音乐播放器的设计成果及界面效果图.1.3.2问题及分析(1)模拟器占用内存问题在一开始对程序进行调试的时候,偶尔会遇到计算机提示:系统C盘空间不足之类的信息,这是由于Android模拟器每次运行时都会临时生成几个。tmp临时文件。一段时间后,其可能占用几GB的磁盘空间。所以,需要手工定期清理一下,清理目录为C:\DocumentsandSetting\Administrator\LocalSetting\Temp\AndroidEmulator文件夹下的内容。在遇见此内存问题时,清理此目录临时文件后,模拟器便能正常运行了。(2)程序问题在调试程序过程中,总是遇见Activity与Manifest之间通信有故障的相关问题,后经与老师同学讨论后,发现是AndroidManifest。xml文件中,漏了将MusicActivity定义入Manifest程序中。〈/activity>〈activityandroid:name=”.ArtistActivity">〈/activity>〈activityandroid:name="。SongsActivity"〉</activity〉<activityandroid:name=”。ItemActivity”></activity〉〈activityandroid:name="。AlbumsActivity"></activity><activityandroid:name=”。MusicActivity”〉</activity〉<serviceandroid:name="。MusicService"></service>〈/application>(3)歌曲名称及SD文件夹不能显示的问题ﻩ在运行程序后,有时歌曲名称,专辑,表演者等信息会出现乱码,预测估计是模拟器自带的字符串有错误。但由于时间问题,此问题到现在还未解决。另外,有时在运行程序的时候,会显示SD卡未能读取的错误,但时而又会正常工作,推测可能是模拟器稳定性问题。以上这两点问题都需要在之后慢慢的去琢磨推敲原因。6结论(1)通过对Android手机平台的音乐播放器软件的开发,使我对Android音乐播放器系统的整体设计有一个深入的了解,对整个流程也会有一个清晰的认识。开发Android音乐播放器,要抓住开发的核心部分,音乐播放器大体由播放主界面、播放列表、菜单、播放设置、文件浏览、歌曲搜索六大核心组成,只要掌握了这六部分的开发,音乐播放器就能初具规模。而其它的功能都是在这六个功能的基础上去补充添加的,但是这是功能的确是必不可少的功能,否则就不能算是音乐播放器了。(2)音乐播放器系统实现了播放器的基本功能:播放,暂停、停止、上/下一首、音量调节、文件浏览器、播放列表查询等功能.运用的系统平台是现今最热门的Android系统,是一个开源的基于Linux系统的手机平台。是以Java语言编写+SQLite数据库支持+SharePreference配置文件的组合方式进行数据管理.实现了音乐播放器的系统编程。(3)本次程序设计,对播放器的系统结构框架做了精心的构思与设计,采用主要开发工具是Eclipse1.5+Java语言的支持,AndroidDevelopmentTool的插件,和AndroidSDK2.2版本的全面结合,才使整个音乐播放器系统得以实现。(4)总之,经过几个月的Android系统技术知识的学习和对音乐播放器的构思与设计,使我对Android系统有了一定的了解,让我对Android系统上的开发流程和开发模式有了深入的了解,这对我以后的Android项目开发有很大的帮助。谢辞值此论文完成之际,衷心感谢我的导师金一鸣老师,在毕业设计的过程中给予我悉心的指导和帮助,他对待学识的严谨态度和作风让我感触颇深。感谢陈雯老师,作为我班的辅导员,在大学生活期间,给予同学们的帮助和教导。感谢2008届电子科学与技术的全体同学,和我一起度过了难忘的四年时光.感谢我的爸爸妈妈,将我培养成人,教育我,帮助我。最后,对审批此论文的老师表示深深地谢意。参考文献[1]雍俊海编著。Java程序设计习题集[M].北京:清华大学出版社,2006[2]JasminBlanchette,MarkSummerfield.C++GUIProgrammingwithJava.[M]Publisher:PrenticeHallPTR,January152004。15~25[3]朱福喜编著.Java语言习题与解析[M].北京:清华大学出版社,2006[4]赵文靖编著。Java程序设计基础与上机指导[M].北京:清华大学出版社,2006[5]吴其庆编著。Java程序设计实例教程[M].北京:冶金工业出版社,2006[6]王克宏著.Java技术教程(基础篇)[M].北京:高等教育出版社,2002。04[7]JavaEye论坛.http://www.javaeye.com/forums.2010—[8]TrolltechInc。AndroidReferenceDocumentation3.3。2.http:///title-cn.2004年[9]耿祥义,Java大学实用教程[M],北京:电子工业出版社,2005.3[10]杨丰盛主编.Android应用开发揭秘[M].西安:机械工业出版社,2010-01—25[11]eoe。Android开发社区.http://www。eoeandroid。com/.2010—[12]高焕堂编.Android应用框架原理与程式设计(第三版)[M].北京:清华大学出版社,2008-10—03[13]shaneCondor,LaurenDecry.Android移动应用开发从入门到精通[M].北京:人民邮电出版社,2010[14]G.N.Wassef.Lipoprotein(a)inandroidobesityandNIDDM:anewmemberin‘themetabolicsyndrome'[M].Biomedecine&Pharmacotherapy,Volume53,Issue10,December1999,Page462-465.[15]FedericoPerfetto,RobertoTarquini,GermaineComealissen,GiorgioMello,AlessioTempestini,PaolaGaudiano,FrancescoMancuso,FranzHalberg.Circadianphasedifferenceofleptininandroidversusgynoidobesity[M]。Peptides,Volume25,Issue8,Auguest2004,Page1297—1306.[16]NesrineAttia,NatalieFournier,BenoitVedie,MicheleCambillau,PhilippeBeaune,OlivierZiegler,AlainGrynbery,Jean-LouisPaul,BrunoGuerci[M]。ImpactofAndroidoverweightorobesityandinsulinresistanceonbasalandpostprandialSR-BIandABCA1-mediatedserumcholesteroleffluxcapacities.Atherosclerosis,Volume209,Issue1,January1st,2008.Pages95—103.[17]AlessandroDistefano,GianluigiMe,FrancesscoPace.Androidanti-forensicsthroughalocalparadigm[M]。DigitalInvestigation,Volume7,Supplement1,August2010,PagesS83—S94[18]余志龙编著.GoogleAndroidSDK开发范例大全[M].北京:人民邮电出版社,2009-[19]张孝祥著.java就业培训教程[M].北京:清华大学出版社,2007.[20]Ming-ChiaoChen,Jiann-LiangChen,Teng-Wen.Android/OSGi—basedvehicularnetworkmanagementsystem[M]。ComputerCommunications,Volume334,Issue2,February15th2011,Pages169-183[21]RetoMeier。Android高级编程[M].北京:清华大学出版社,2010。题目:基于Android平台的音乐播放器设计报告学生姓名:何双双学号:指导教师:邓江沙目录TOC\o"1-3"\h\uHYPERLINK\l_Toc17132第一章引言PAGEREF_Toc1713211。1项目背景PAGEREF_Toc76241HYPERLINK\l_Toc74631.2编写目的PAGEREF_Toc74631HYPERLINK\l_Toc11487第二章系统需求分析PAGEREF_Toc114872HYPERLINK\l_Toc233372。1功能需求(用例图分析)PAGEREF_Toc233372HYPERLINK\l_Toc253842.1.1播放器的用例图PAGEREF_Toc253842HYPERLINK\l_Toc207412.1.2用例分析PAGEREF_Toc207413第三章概要设计7943.1软件播放流程图PAGEREF_Toc2212643.2软件类图PAGEREF_Toc254705第四章详细设计PAGEREF_Toc712864。1MusicInfoController类PAGEREF_Toc2043964.1.1.类启动PAGEREF_Toc270406HYPERLINK\l_Toc215454.1.2.服务绑定activityPAGEREF_Toc215456HYPERLINK\l_Toc85354。2MusicInfoController类PAGEREF_Toc85356HYPERLINK\l_Toc138574.2.1获得播放文件列表PAGEREF_Toc138577HYPERLINK\l_Toc232184.3MusicList类PAGEREF_Toc2321874.3。1播放PAGEREF_Toc3183974。3.2暂停/播放PAGEREF_Toc1717HYPERLINK\l_Toc126724.3。3停止PAGEREF_Toc126728HYPERLINK\l_Toc145374。4MusicPlayerApp类PAGEREF_Toc145378HYPERLINK\l_Toc73644。4.1单例模式PAGEREF_Toc73648第五章系统实现PAGEREF_Toc28091105.1软件部署1231105.2启动软件PAGEREF_Toc2447810HYPERLINK\l_Toc300125.3播放界面PAGEREF_Toc3001211HYPERLINK\l_Toc28588第六章结论PAGEREF_Toc2858812HYPERLINK\l_Toc1582附录一:代码PAGEREF_Toc1582131.获取全部音频文件代码13HYPERLINK\l_Toc238062.绑定歌曲列表到listview控件PAGEREF_Toc23806133。软件初始化PAGEREF_Toc2679214HYPERLINK\l_Toc60674.音乐播放服务PAGEREF_Toc606715第一章引言1.1项目背景当今社会的生活节奏越来越快,人们对手机的要求也越来越高,由于手机市场发展迅速,使得手机操作系统也出现了不同各类,现在的市场上主要有三个手机操作系统,Windowsmobile,symbian,以及谷歌的Android操作系统,其中占有开放源代码优势的Android系统有最大的发展前景。那么能否在手机上拥有自己编写的个性音乐播放器呢?能的,谷歌Android系统就能做到.本文的音乐播放器就是基于谷歌Android手机平台的播放器.Android:是谷歌于2007年公布的开放式源代码手机系统,它的开放性就优于其它封闭式的手机系统,因此,任何人都可能根据自己的喜好将手机系统中的所有功能重新编写。这使得越来越多的人关注这个操作系统。本次作品音乐播放器就是基于Android平台的。1.2编写目的现今社会生活紧张,而欣赏音乐是其中最好的舒缓压力的方式之一,本项目的目的是开发一个可以播放主流音乐文件格式的播放器,本设计实现的主要功能是播放Mp3,Wav多种格式的音乐文件,并且能够控制播放,暂停,停止,播放列等基本播放控制功能,界面简明,操作简单。本项目是一款基于Android手机平台的音乐播放器,使Android手机拥有个性的多媒体播放器,使手机显得更生动灵活化,与人们更为接近,让手机主人随时随地处于音乐视频的旋律之中。使人们的生活更加多样化。也使设计者更加熟练Android的技术和其它在市场上的特点。第二章系统需求分析2.1功能需求(用例图分析)根据项目的目标,我们可获得项目系统的基本需求,以下从不同角度来描述系统的需求,并且使用用例图来描述,系统的功能需求,我们分成四部分来概括,即播放器的基本控制需要,播放列表管理需求,播放器友好性需求和播放器扩展卡需求。以下分别描述:2.1.1播放器的用例图假设安装了音乐播放器的用户是系统的主要设计对象,其拥有以下操作,启动软件、播放音乐、暂停播放、停止播放、退出软件,其用例图如下图2。1播放器基本用例图2.1.2用例分析用例名称:启动软件参与者:用户目标:使得用户启动软件并加载手机和sd卡上的音频文件到播放列表前置条件:无基本事件流:1.用户启动软件2.播放器将播放列表中的当前的歌曲用例名称:播放参与者:用户目标:使得用户可以播放在播放列表中选中的歌曲前置条件:播放器正在运行基本事件流:1。用户单击“播放”按钮2。播放器将播放列表中的当前的歌曲用例名称:暂停参与者:用户目标:使得用户可以暂停正在播放的歌曲前置条件:歌曲正在播放且未停止和暂停基本事件流:1.用户单击“暂停”按钮2.播放器将暂停当前的歌曲用例名称:停止参与者:用户目标:使得用户可以停止正在播放的歌曲前置条件:歌曲正在播放或暂停基本事件流:1。用户单击“停止”按钮2。播放器将停止当前播放的歌曲用例名称:推出参与者:用户目标:使得用户退出或者后台播放音乐前置条件:程序在运行基本事件流:1.用户按返回键2.播放器退出或者进入后台播放第三章概要设计3.1软件播放流程图Step1.启动软件后,软件自动检索手机和sd卡的音频文件,并组织显示成列表.Step2。点击列表的歌曲名字。Step3.播放音乐。Step4。点击暂停,音乐暂停Step5.点击播放转到step3Step6。点击停止停止播放音乐Step7。点击退出,若音乐处于播放状态,则音乐转向后台播放,界面退出。Step8.点击退户,若音乐处于暂停或者停止状态,直接退出。图3。1音乐播放器流程图3.2软件类图系统设计了4个类,分别是播放音乐的服务类MusicPlayerService;主要用于获取android系统中的音频文件,并提供访问接口的MusicInfoController类;继承于ListActivity,主要用于显示歌曲列表的MusicList类和程序的生存类MusicPlayerApp类。音乐播放器音乐播放器类MusicInfoController类MusicList类MusicPlayerApp类MusicPlayerService图3。2软件类图图3。2音乐播放器类图第四章详细设计4。1MusicInfoController类这个类继承于service,是播放音乐的服务类。播放音乐,暂停音乐,停止播放等操作都封装在这个类中。主要的执行动作有:4.1。1。类启动onCreate(){mMediaPlayer=newMediaPlayer();//分配一个播放对象mMediaPlayer.setOnPreparedListener(mPrepareListener);//绑定之前mMediaPlayer。setOnCompletionListener(mCompleteListener);//绑定之后}4.1。2。服务绑定activityMediaPlayer。OnCompletionListenermCompleteListener=newMediaPlayer。OnCompletionListener()//实例化一个绑定监听器的匿名类{publicvoidonCompletion(MediaPlayermp)//完成绑定后{broadcastEvent(PLAY_COMPLETED);//广播消息}};4。2MusicInfoController类这个类主要用于获取android系统中的音频文件,并提供访问接口,它是一个单例类.4.2.1获得播放文件列表privateCursorquery(Uriuri,String[]prjs,Stringselections,String[]selectArgs,Stringorder){ContentResolverresolver=pApp.getContentResolver();//取得一个连接对象if(resolver==null){returnnull;}returnresolver。query(uri,prjs,selections,selectArgs,order);}publicCursorgetAllSongs(){returnquery(MediaStore。Audio.Media。EXTERNAL_CONTENT_URI,null,null,null,MediaStore.Audio.Media。DEFAULT_SORT_ORDER);//查询ContentResolver的所有音频文件}4。3MusicList类改类继承于ListActivity,主要用于显示歌曲列表,并且封装部分操作,以及与父级目标通信。4.3。1播放protectedvoidonListItemClick(ListViewl,Viewv,intposition,longid){//歌曲列表的某项被点击super。onListItemClick(l,v,position,id);if(mCursor==null||mCursor.getCount()==0){return;}mCursor.moveToPosition(position);//游标移动到当前路径Stringurl=mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio。Media。DATA));//取得绝对路径mMusicPlayerService.setDataSource(url);//传递绝对路径mMusicPlayerService。start();//播放音乐}4.3.2暂停/播放mPlayPauseButton.setOnClickListener(newButton.OnClickListener(){publicvoidonClick(Viewv){if(mMusicPlayerService!=null&&mMusicPlayerService。isPlaying()){mMusicPlayerService.pause();//音乐播放的服务暂停mPlayPauseButton.setText(R。string.play);//改变按钮文字}elseif(mMusicPlayerService!=null){mMusicPlayerService.start();//如果已经是暂停,则播放音乐mPlayPauseButton.setText(R.string。pause);//改变文字}}});4.3。3停止mStopButton。setOnClickListener(newButton。OnClickListener(){publicvoidonClick(Viewv){//Performactiononclickif(mMusicPlayerService!=null){mTextView.setVisibility(View.VISIBLE);//改变文字状态mPlayPauseButton。setVisibility(View。INVISIBLE);//隐藏按钮mStopButton.setVisibility(View.INVISIBLE);//隐藏停止按钮mMusicPlayerService。stop();//后台音乐停止播放}}});4.4MusicPlayerApp类该类继承与Application,是程序的生存类。可以标识音乐播放器的生命周期,包括音乐在后台播放等。4.4.1单例模式publicvoidonCreate(){super。onCreate();mMusicInfoController=MusicInfoController.getInstance(this);//返回该类的一个唯一实例}publicMusicInfoControllergetMusicInfoController(){returnmMusicInfoController;}系统实现5。1软件部署系统编译生成apk文件,将apk文件拷到手机或者sd卡中,直接打开即可安装,或者安装360手机助手通过usb调试的方式进行安装。图5.1软件图标5。2启动软件启动软件后,加载歌曲列表现在这个界面上,如01表示歌曲名,unknown表示歌曲的演唱者图5.2软件启动界面5.3播放界面从加载的歌曲列表中点击要播放的歌曲,开始播放图5。3音乐播放界面第六章结论(1)通过对Android手机平台的音乐播放器软件的开发,使我对Android音乐播放器系统的整体设计有一个深入的了解,对整个流程也会有一个清晰的认识。开发Android音乐播放器,要抓住开发的核心部分,音乐播放器大体由播放主界面、播放列表、菜单、播放设置、文件浏览、歌曲搜索六大核心组成.(3)本次程序设计,对播放器的系统结构框架做了精心的构思与设计,采用主要开发工具是Eclips4。0+Java语言的支持,AndroidDevelopmentTool的插件,和AndroidSDK2。1版本的全面结合,才使整个音乐播放器系统得以实现。附录一:代码1获取全部音频文件代码privateCursorquery(Uriuri,String[]prjs,Stringselections,String[]selectArgs,Stringorder){ContentResolverresolver=pApp.getContentResolver();//取得papp的一个resolver实例if(resolver==null){returnnull;}returnresolver.query(uri,prjs,selections,selectArgs,order);}publicCursorgetAllSongs(){//取得所有音频文件returnquery(MediaStore.Audio。Media.EXTERNAL_CONTENT_URI,null,null,null,MediaStore.Audio。Media。DEFAULT_SORT_ORDER);}2绑定歌曲列表到listview控件publicvoidbindView(Viewview,Contextcontext,Cursorcursor){super.bindView(view,context,cursor);TextViewtitleView=(TextView)view.findViewById(android.R.id.text1);TextViewartistView=(TextView)view。findViewById(android.R.id。text2);titleView.setText(cursor。getString(cursor.getColumnIndexOrThrow(MediaStore.Audio。Media.TITLE)));//绑定歌曲名artistView.setText(cursor。getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST)));//绑定演唱者}3软件初始化setContentView(R.layout。list_layout);MusicPlayerAppmusicPlayerApp=(MusicPlayerApp)getApplication();//取得一个实例mMusicInfoController=(musicPlayerApp).getMusicInfoController();startService(newIntent(this,MusicPlayerService.class));//启动服务bindService(newIntent(this,MusicPlayerService.class),mPlaybackConnection,Context。BIND_AUTO_CREATE);//绑定服务mTextView=(TextView)findViewById(R。id。show_text);//取得显示文本控件mPlayPauseButton=(Button)findViewById(R.id.play_pause_btn);//取得开始和暂停控件mStopButton=(Button)findViewById(R。id.stop_btn);//取得停止控件mPlayPauseButton.setOnClickListener(newButton。OnClickListener(){//播放和暂停按钮的事件绑定publicvoidonClick(Viewv){if(mMusicPlayerService!=null&&mMusicPlayerService.isPlaying()){mMusicPlayerService.pause();//暂停播放mPlayPauseButton.setText(R.string.play);//改变控件文字}elseif(mMusicPlayerService!=null){mMusicPlayerService。start();//服务没启动则启动mPlayPauseButton.setText(R。string.pause);//改变控件文字为暂停}}});mStopButton。setOnClickListener(newButton.OnClickListener(){//停止按钮的事件绑定publicvoidonClick(Viewv){if(mMusicPlayerService!=null){mTextView.setVisibility(View.VISIBLE);mPlayPauseButton。setVisibility(View。INVISIBLE);//改变播放按钮为不可见mStopButton.setVisibility(View。INVISIBLE);mMusicPlayerService。stop();//停止播放}}});IntentFilterfilter=newIntentFilter();filter.addAction(MusicPlayerService.PLAYER_PREPARE_END);//filter.addAction(MusicPlayerService。PLAY_COMPLETED);registerReceiver(mPlayerEvtReceiver,filter);//放入后台4.音乐播放服务MediaPlayer.OnCompletionListenermCompleteListener=newMediaPlayer。OnCompletionListener()//实例化化一个listener匿名类{publicvoidonCompletion(MediaPlayermp)//完成绑定时调用{broadcastEvent(PLAY_COMPLETED);//广播消息}};MediaPlayer。OnPreparedListenermPrepareListener=newMediaPlayer.OnPreparedListener()//绑定钱调用{publicvoidonPrepared(MediaPlayermp){broadcastEvent(PLAYER_PREPARE_END);//广播事件}};privatevoidbroadcastEvent(Stringwhat){Intenti=newIntent(what);sendBroadcast(i);//广播消息}publicvoidonCreate(){super.onCreate();mMediaPlayer=newMediaPlayer();//实例化一个播放类mMediaPlayer.setOnPreparedListener(mPrepareListener);//执行绑定前系列动作mMediaPlayer。setOnCompletionListener(mCompleteListener);//执行绑定后系列动作}publicclassLocalBinderextendsBinder{publicMusicPlayerServicegetService(){returnMusicPlayerService。this;}}publicIBinderonBind(Intentintent)//绑定{returnmBinder;}publicvoidsetDataSource(Stringpath)//取得播放文件的绝对路径{try{mMediaPlayer。reset();mMediaPlayer。setDataSource(path);mMediaPlayer.prepare();}catch(IOExceptione){return;}catch(IllegalArgumentExceptione){return;}}publicvoidstart()//开始播放{mMediaPlayer.start();}publicvoidstop()//停止播放{mMediaPlayer。stop();}publicvoidpause()//暂停播放{mMediaPlayer。pause();}publicbooleanisPlaying()//判断是否在播放{returnmMediaPlayer.isPlaying();}publicintgetDuration()//取得音乐的时间{returnmMediaPlayer.getDuration();}publicintgetPosition()//取得正在播放的时间{returnmMediaPlayer.getCurrentPosition();}publiclongseek(longwhereto)//调到想要播放的时间{mMediaPlayer.seekTo((int)whereto);returnwhereto;}山东英才学院题目:基于51单片机的儿童早教故事机的设计学生姓名孙东帅学院机械工程及其自动化学院专业电气工程及其自动化学号201101020156指导教师高嵩年月日毕业设计(论文)原创性声明本人郑重声明:所提交的毕业设计(论文),是本人在导师指导下,独立进行研究工作所取得的成果。除文中已注明引用的内容外,本毕业设计(论文)不包含任何其他个人或集体已经发表或撰写过的作品成果。对本研究做出过重要贡献的个人和集体,均已在文中以明确方式标明并表示了谢意.论文作者签名:日期:年月日学位论文版权使用授权书
本学位论文作者完全了解学校有关保障、使用学位论文的规定,同意学校保留并向有关学位论文管理部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅.本人授权省级优秀学士学位论文评选机构将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。本学位论文属于1、保密□,在_____年解密后适用本授权书。
2、不保密□。(请在以上相应方框内打“√”)论文作者签名:日期:年月日导师签名:日期:年月日目录TOC\o"1-3"\h\u摘要PAGEREF_Toc11365IAbstractPAGEREF_Toc27004II1绪论PAGEREF_Toc135471HYPERLINK\l_Toc171611。1我国儿童早教机发展现状及发展趋势PAGEREF_Toc171611HYPERLINK\l_Toc16241.2国外现状PAGEREF_Toc16242HYPERLINK\l_Toc25501。3儿童早教故事机的发展趋势PAGEREF_Toc25502HYPERLINK\l_Toc39511.4课题研究的目的和意义
PAGEREF_Toc395122方案比较PAGEREF_Toc90162HYPERLINK\l_Toc152772.1主控单元的选择PAGEREF_Toc152772HYPERLINK\l_Toc300942。2液晶显示模块的选择PAGEREF_Toc3009442.3语音模块的选择PAGEREF_Toc53843系统硬件设计PAGEREF_Toc873063.1总体方案设计PAGEREF_Toc2166863。2主控单元模块PAGEREF_Toc113776HYPERLINK\l_Toc34423。3液晶显示屏PAGEREF_Toc344273。480C52单片机的的封装和引脚PAGEREF_Toc86398HYPERLINK\l_Toc70663。5红外遥控器PAGEREF_Toc70669HYPERLINK\l_Toc132363.6独立键盘PAGEREF_Toc132369HYPERLINK\l_Toc73183。7电源PAGEREF_Toc73189HYPERLINK\l_Toc183853。8语音模块PAGEREF_Toc1838510HYPERLINK\l_Toc260904软件设计2609011HYPERLINK\l_Toc167654.1音乐播放主控流程图PAGEREF_Toc1676511HYPERLINK\l_Toc73614.2音乐播放子程序流程图PAGEREF_Toc736113HYPERLINK\l_Toc152734.3LCD1602显示子程序流程图PAGEREF_Toc1527314HYPERLINK\l_Toc41224。4语音模块工作流程图PAGEREF_Toc4122145实物操作PAGEREF_Toc16779165。1.开机未播放音乐下的状态PAGEREF_Toc2372616HYPERLINK\l_Toc183875.2工作状态下的单片机状态PAGEREF_Toc18387165.3按键功能测试PAGEREF_Toc1226417HYPERLINK\l_Toc75595。4红外遥控器功能测试PAGEREF_Toc755918结论PAGEREF_Toc301519HYPERLINK\l_Toc7918参考文献PAGEREF_Toc791820HYPERLINK\l_Toc16839致谢PAGEREF_Toc1683921HYPERLINK\l_Toc21821附录APAGEREF_Toc218212213318附录BPAGEREF_Toc1331835基于51单片机的儿童早教故事机的设计摘要:当今社会,父母对孩子的早期教育相当重视,如何更完善、更系统的把知识教授给孩子,儿童早教故事机就是一个很好的选择。本课题介绍了一种以STC89C52单片机为控制核心的儿童早教故事机,通过keil软件编写的程序实现早教故事机的音乐播放功能,用户可以凭借独立按键或红外遥控器来选择播放歌曲顺序,功率放大器和喇叭可以控制音量大小,同时LCD1602显示屏可以显示歌曲名称数码管显示歌曲序号。除此之外,单片机外接WT588D语音模块、8002功率放大器以及喇叭可以实现其人声讲故事的功能,增加其趣味性,使其整体更适合儿童倾听和玩耍。本论文详细描述了儿童早教故事机的国内外发展现状,对课题设计所需要的多种元件的方案比较,对所选用的元件绘制了硬件设计电路、软件流程图并编写了相关的程序。论文最后加入了设计成果的实物演示图。关键词:STC89C52单片机;WT588D语音模块;红外遥控器;LCD1602显示屏;功率放大器Designofearlychildhoodstorymachinebasedon51singlechipAbstract:Intoday’ssociety,theparentstothechild’searlyeducationveryseriously,howtobemoreperfect,moresystematictheknowledgetaughttochildren,earlychildhoodstory.Thispaperintroducesachildrenstorymachinebasedonsingle-chipmicrocomputerSTC89C52machineisagoodchoice.Throughthekeilsoftwarewrittecedurestoachieveearlychildhoodstorymachinemusicplaybackfunction,theusercanbyvirtueoftheindependentbuttonorIRremotecontrollerconnectedtochoosetoplaythesongsequence,poweramplifierandtheloudspeakercancontrolthevolumesizeandLCD1602displaycandisplaysongnamedigitaltubedisplaysongnumber。Inaddition,theSCMconnectedWT588Dvoicemoduleand8002poweramplifierandaspeakercanachieveitsvoicetotellthestory,increasetheinterest,makethewholemoresuitableforchildrentolistenandplay。Thispaperdescribedindetailthedevelopmentstatusaboutearlychildhoodstorymachineathomeandabroad,variouselementsofthedesignissuesneedcomparedfortheselectedcomponentsdrawnhardwarecircuitdesign,softwareflowchartandthepreparationoftherelevantprocedures。Finallyjoinedthedesignresultsofthedemomap.Keywords:STC89C52microcontroller;WT588Dvoicemodule;infraredremotecontrol;LCD1602display;poweramplifier1绪论当今社会,我国人口基数大、儿童出生率高,但是家中的青壮劳动力因为忙于工作没时间去教育孩子,看孩子的主要是孩子的祖父母。祖辈的文化程度比较低,没办法很好的教育孩子,也不知道如何更好地教孩子,所以,对于这样的家庭来说,经济实惠而且功能比较多的儿童早教机是一个很好的对孩子进行早期教育的选择。而儿童早教机大体上有什么功能呢?首先是可以讲故事和播放音乐,孩子发育早期是一个学习语言的重要时期,都是周围说什么他们会学什么,而且音乐的节拍更加的生动,可以让孩子发育初期就了解什么是韵律。儿童早教故事机的语音切换大多是通过按键和红外遥控器来控制的,这个早期就锻炼孩子对阿拉伯数字的认识了解.现在的早教故事机大多是触摸屏,从而代替纸张,更加环保,而且幼儿操作比较容易。综上所述,儿童早教故事机对于孩子早期教育是很好的选择.简单来说:儿童早教故事机实现了儿童娱乐及儿童教育等重要功能。功能简单易懂、操作简便、价格便宜,适合各种家庭使用。1.1我国儿童早教机发展现状及发展趋势在当前社会,不管哪个国家地区都很重视儿童早期的教育,毕竟孩子是祖国的花朵,未来的栋梁。由于现在贸易的全球化和科技发展的迅速等原因,这就让儿童早教故事机进入了一个快速发展的状态,在这一情况下,儿童早教故事机的发展在国际上有一定的相似性.但是大体来说儿童早教机经历了以下几代的改进:首先是最初的早教故事机产品:插学习卡的儿童早教故事机;但是这类早教机操作起来比较繁琐,孩子一般因为年龄原因是很难学会使用方法,还需要占用家长工作的时间。另外需要插上辅助学习卡才能用,所以学习卡都要保管好,但是因为学习卡比较小所以容易丢失。除此之外,学习卡里面内容是固定的,并不是说一张卡就能包含很多内容,一张卡用的时间久了,里面的内容就显得单调无聊了。所以这一类的早教故事机很快被淘汰了,没有被用户持续使用。第二代产品:第二代的早教故事机是现在大多数店面还有销售的一类早教故事机.其功能详情如下:(1)语言训练:里面有智能模块可以和孩子进行简单的聊天,给孩子讲故事,培养孩子的语言表达能力。(2)早期的英语启蒙:早教故事机语音功能中增加了讲英语的功能,虽然只是比较简单的单词教育和日常对话,但是不能忽视儿童早期英语启蒙学习中的重要性,这在上学之后对英语的兴趣和喜爱具有决定性的作用。上学之后经过英语启蒙的孩子对英语学习的兴趣和所得到成绩相对于没有启蒙的孩子都要优秀。(3)可爱的外观设计:现在一些早教故事机外观都是卡通图案,而且体积小,在方便孩子携带玩耍的同时,增加孩子对美的认识、对颜色的识别。(4)益智故事:开拓了幼儿的视野,挖掘孩子的潜能,是一种很好的教育方式.可以扩宽孩子思维的模式,在听故事同时能够培养孩子善恶观,了解事物的是非黑白,无论是成人还是少儿,都可以从故事中学习到为人处世的方法。(5)儿童歌曲:不止是简单的纯音乐播放,还有人声伴唱,语音更生动美妙,可以让孩子学习一些儿歌同时增加其对韵律和节奏的感觉。可以说,这已经是功能相当丰富的了,是市场上较为常见的产品了.1。2国外现状国外主要开发到现在的第三代(也是我国现阶段主流进口产品)。(1)第三代产品在第二代早教机的基础上增加了彩色显示屏,让幼儿可以更直观的看动画视频和文字,从而增强宝宝对教学资料的理解能力和接受度。(2)机身的内存也从原来的1G扩大到4G或8G及16G以上,从而可以下载更多的教育内容,使平时的儿童生活更加丰富多彩。(3)电池在原先的基础上进行升级,由原来的AAA干电池,升级为更环保,更安全的可循环充电锂电池(或聚合物电池),增加了基于电池的保护电路,从而更安全可靠.(4)外形体积越来越小,方便幼儿的随身携带。1.3儿童早教故事机的发展趋势将来的儿童早教故事机不仅仅局限于幼儿的娱乐和教育功能,更注重儿童的安全考虑.其中,儿童早教故事机更趋向于选择环保和绿色健康的材料,为了增加儿童对色彩的分辨率以及对美好事物的理解,设计的更加可爱、多姿多彩。增加其安全功能,比如环境温度过高的情况下早教机进行声音报警并且联系家长手机发送报警短信提示。增加距离感应器,当儿童跟随父母出行并距离父母较远时单片机报警引起父母警觉,有效防止孩子走失。增加远程视频通话的功能,当孩子想念父母时可以通过简单按键实时与父母视频通话。并且如现在连接手机的智能腕表一样,给孩子带一个连接早教机的智能手环连接,实时检测孩子体温和心率等身体情况,让父母随时了解孩子的健康状况。1。4课题研究的目的和意义
本课题的任务是一个基于STC89C52单片机的儿童早教故事机的设计,它是以STC89C52单片机作为主控模块,通过编写好的程序下载到单片机中,本设计编写的歌曲共有5首歌曲,外接喇叭播放歌曲,独立按键和红外遥控器选择歌曲进行播放,同时LCD1602液晶显示屏显示歌曲名字,数码管显示歌曲序号。通过外接WT588D语音模块,8002功率放大器和喇叭进行人声发音以实现其讲故事的功能。2方案比较2.1主控单元的选择单片机的类型选择具有至关重要的地位,内存的大小、工作速率的快慢、应用范围的大小和成本的高低等都是需要考虑的因素。由于本课题要求用51单片机,所以我们选择两种方案进行比较论证。方案一AT89C52是一款低电压,高性能单片机,其特点主要功能是:可与MCS51指令系统完全兼容;有8K可反复擦拭的内存(超过1000);32个双向I/O串行端口;256*8位的内部存储器;3位可编程定时器/计数器中断;控制0—24MHz的时钟频率;它的串行中断有两个,外部中断源有两个,中断源有8个;读写中断口线2个,具有软件可以设置睡眠和唤醒的功能,在低功耗的空闲模式和掉电模式下;还有PDIP,PQFP,TQFP和PLCC等几种封装,以适应不同产品的要求[1]。AT89C52是一个8位微处理器,PDIP封装引脚AT89C52引脚图使用行业标准。标准的C51工作内核,引脚的排列方式和内部能运行的功能与一般的8xC52单片机相同。其主要功能包括:集成电路,数据存储和外部接口模块初始化内部寄存器,发送和接收红外遥控信号[2]。方案二采用STC89C52RC作为控制器。具有超强抗干扰,超低功耗,且能兼容AT89S51,管脚定义一样,无需编程器,无需仿真器,只要用TTL线就能烧录,支持在线下载程序,下载程序比较方便,外设丰富,寿命长,价格便宜,编程简单,加密性强等特性。[3]。STC89C52单片机的构造:在总共40个引脚中专用于主电源引脚有2个,可以外接晶振的引脚有2个,控制或与其它电源复用的引脚有4个,其他的32条是控制输入输出I/O引脚[4].综上所述AT89C52和STC89C52相比,基本功能相同,同样的晶振频率,后者的速度比前者快,同时后者下载程序方面,直接串口就可以下载,前者需要使用专用的编程器,后者比较流行,前者已经停产十几年了.所以我们选用STC89C52单片机.2.2液晶显示模块的选择LCD是液晶显示器的缩写,液晶显示器本身是不发光的,而是液晶通过通电处理后改变光线通过的方向,达到显示字体的效果。方案一LCD12864显示块是点阵液晶显示模块,就是由128*64个液晶显示点组成的一个128列*64行的阵列,所以也就叫成了12864。每一位二进制数都是对应着一个相应的显示点,当输出程序为0时表示灭,为1时就表示亮,当对应的储存单元存入了这些写好的点阵信息后,就可以进行相对的显示.但是是显示点在存储器中的信息和地址液晶屏上的位置之间的关系就成了应用的问题关键。LCD12864显示屏是一种单中文字库的4位/8位并行的显示屏、一线或多线串行接口的方式.显示屏显示的分辨率为128×64,内置8129个16*16的汉字和128个16*8点ASCII字符集,利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机互交图形界面[5]。方案二LCD1602显示器,这就是简单应用的工业字符型液晶,LCD1602显示屏是指即可显示两行,每行可以显示16个字符的液晶显示模块(显示数字或者字符),显示内容是16乘以2的字符,这样能够让最多16X02即32个字符同时显示,分辨率为5×7.每个显示点都对应着有一位二进制数,和LCD12864相同,当输出程序为0时表示灭,为1时就表示亮。LCD1602液晶也被叫做LCD1602字符型的液晶显示屏,它经常被用来显示字母、数字和符号等。在每个字符之间有一个点距的间隔,每行之间也有间隔,起到了控制字符间距和行间距,让显示更清
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 井下采煤机司机QC管理强化考核试卷含答案
- 整经工风险评估与管理测试考核试卷含答案
- SAP基础常见考题及正确答案
- 支具考试试题及答案全解
- 2026中级木工(官方)-多选题参考试题库历年考点答案详解
- 2026年山西省高中物理第10章核物理知识点巩固习题
- 2025年辽宁省营口市鲅鱼圈区数学四年级第二学期期中质量跟踪监视试题(含答案解析)
- 2025年辽宁省丹东市振安区数学三年级第二学期期末监测试题(含答案)
- 权威内科复试题及答案
- 法律文秘模拟试题及答案
- 2026年低压电工证考试试题及答案(共七套)
- 小学数学人教版(新教材)五年级上观察简单组合体课件(共27张)
- 2026中陕核工业集团陕西二一〇研究所有限公司社会人才及应届毕业生招聘考试备考题库及答案详解
- 2026人教版六年级数学上册活动课《体育中的数学》教案
- GB/T 35697-2026架空输电线路在线监测装置通用技术规范
- 《功能和机械能》-全国初中物理竞赛(八年级下)(原卷版+解析)
- 2026七年级数学上册第一二三单元第一次月考含答案及解析
- 2026年设备监理师之质量投资进度控制真题【网校专用】附答案详解
- 蛛网膜下腔出血的急救护理
- 2026年种子检验员高级技师考试题库
- 三级人工智能训练师(高级)职业技能等级认定考试题库-上(单选题部分)
评论
0/150
提交评论