还剩17页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
机械与电子工程学院嵌入式系统设计实习汇报题目简易音频播放器设计外部资源文献夹重要为程序提供多种外部资源,如图片等,这里重要简介一下我们用到区布局文献夹中欧多种文献I LayoutI xmllayout_gridview.xml layout_listview.xml layoutJyricview.xml这三个文献被主界面调用整合在主界面中,即程序中出现的左右滑动效果,xml viewGroupJ其中显示了歌曲区专辑图片,显示了歌曲播放列表,显示了同步歌词gridview Ilistview lyricviewmain.xmL mainl.xml主程序的主界面资源文献,同上述三个同样,整合在中由设定I xmlviewGroup musicActivity为目前界面其中决定了各的布局,则是程序下方的进度条及简朴控制按钮main viewmainlmusicitme.xmL sdcard.xml均被用于这个区布局,提供了口勺主界面,SdCardList ActivityI sdcardSDCardList musicitme提供了中的样式SDCardList ListViewprogressbar.xml由调用,告知信息栏的布局文献Localservice其他文献简介引入的外部JAR android-support-v
4.jar为程序了以实现左右滑动展示不一样日勺日勺效果viewGroup ViewAndroidManifest.xml应用的配置文献,描述应用程序的名称、权限、能力和运行方式等文献夹gen这是必需的,为应用程序自动生成的资源文献夹,它所包括日勺应用程序资源管理源文献文献定义了该项目所有资源的索引,不能被编辑RAndroid
2.1-updatel这是的系统类库,在编译该项目时用到的环境我们可以通过对应的配置来选Android
2.1择所需的系统类库文献夹assets重要用于放置多媒体等数据文献default.properties这是自动创立日勺工程文献,定义了应用程序的和其所需日勺选项target第四章程序设计
4.1主界面musicActivity设计养成良好习惯,先看看函数
4.
1.1onCreat如下图所示即为作为程序入口日勺日勺函数大体日勺流程是调用父musicActivity onCreat类函数,隐藏标题栏,设置布局,寻找布局控件,初始化应用,刷新歌词文献,刷新onCreat播放列表,绑定监听器,启动标志位检测线程,设定空歌词,启动服务101/**Called whenthe activityis firstcreated.*/102-@Override103public voidonCreateBundle savedlnstanceState{1^4super.onCreatesavedlnstanceState;105requestWindowFeatureWindow.FE471/Rf_A/0_TITLE;一一106107setView;108findView;109initApp;110refreshLyric;111refreshlist.;112113listener;114checkflag;115setLyric];116117Intent intent=newIntentmusicActivity.thisLocalservice.class;118startserviceintent;119}120关键代码讲解
4.
1.2设置布局函数中,先初始化、尚有歌词布局的内容,完setView ListViewGridView lyricview毕后再将其添加到中从而可以进行滑动切换显示viewPager63,//荷加化Listview与Gridview的内当64mainViewGroup=ViewGroup mlnflater.inflateR.layout./nain,null;465ViewGroup viewLayoutListview=VievvGroup mlnflater.inflate,66,R.layout.Layout_Listview,null;67,Vie\vGroup viewLayoutGridView=ViewGroup mlnflater.inflate R.layout,Layout_gridview,null;68,ViexvGroup viewLayoutLyricView=ViewGroup mlnflater.inflate R.layout.layout_lyricview,null;69mListView=Listview viewLayoutListView.findViewByIdR.id./wyListview;470mGridView=ImageView viewLayoutGridView.findViewByIdR.id./rp3i/rage;layout=LinearLayout471viewLayoutLyricView,72,.findViewByIdR.id.LyoutView;73,74k75以481//喇化Viev/Pager的内容76482mPageViews=new ArrayListView;483484mPageViews.addviewLayoutListview;485mPageViews.addviewLayoutGridView;486mPageViews.addviewLayoutLyricView;487488//初加化序第的囱点祝芟489mlmageViews=new ImageView[mPageViews.size];490-91mainViewGroup=VieivGroup mlnflater.inflateR.layoutnull;492493mViewPager=ViewPager mainViewGroup.findViewByIdR.id./nyviewpager;494indicatorViewGroup=ViexvGroup mainViewGroup
495.findViewByIdR.id./wybotto^viewgroup;496初始化程序initApp假如程序是第一次启动(没有数据库文献),那么就自动初始化一次歌曲播放列表,默认途径为卡根目录,将歌曲文献信息添加到数据库并且添加到播放列表中假如有数据库文SD献则不进行操作3456public voidinitApp{346MusicListdbHelper db=new MusicListdbHelpermusicActivity.this;347if db.FirstStart348initmusiclist;349db.closeO;350}351366//第一次朽蛀化卷切表367二public voidinitmusiclist{368MusicListdbHelper db=new MusicListdbHelpermusicActivity.this;369myMusicList.clear;370File home=new File^lUSIC_PATH;371if home.listFilesnew MusicFilter.length0{372for Filefile:home.listFilesnew MusicFilter{373db.Musicitem insitemfile・getNameO^MUS工JPATH;-374}375376myCursor=db.getMusidtem;377myCursor.moveToFirst;378for;!myCursor.isAfterLast;myCursor.moveToNext{379myAJusicList.add myCursor.getStringl;380}381db.close;382}383初始化程序完毕之后就需要启动刷新歌词的线程了,启动了刷新的线程使用refreshLyric已经定义好的发送刷新信息并进行对应的响应handler hand86-private Handlerhand=new Handler{87-public voidhandleMessageMessage msg{88//日・更交当前播发时间89vwLrc.setTimeLocalservice.getCurrenttime*1000;90vwLrc.postlnvalidate;91setTitleSongLyric.LongToStringintLocalservice
92.getCurrenttime*100093+94+SongLyric.LongToStringint Lrc.getMaxTime;9596};97|下一步就是列表勺刷新显示,目前的播放列表中虽然存储有歌曲信息却没有将它显示出H来,因此我们需要刷新并显示一次播放列表,即可做到这一点,并且在每次对播放列refreshlist表进行操作后都需要调用一次它352//更手冽表353-public voidrefreshlist{354MusicListdbHelper db=new MusicListdbHelpermusicActivity.this;355myMusicList.clear;356myCursor=db.getMusicItem;357myCursor.moveToFirst;358for;!myCursor.isAfterLast;myCursor.moveToNext{359/wyAJusicList.addmyCursor.getStringl;360}361musicList;362myCursor.close;363db.closeO;
3643654.2音乐播放服务LocalService设计仍然先看一下函数onCreat40-©Override41public voidonCreate{42myMediaPLayer=new MediaPlayer;43myMusicList=musicActivity.getList;44progessbar;45setupnotification;46showNotification;47播放服务流程就比较简朴,实例化对象,从中得到音乐列表,Btl MediaPlayermusicActivity启动刷新告知栏和中欧线程,设置并显示告知栏信息musicActivity progressbarI关键代码讲解启动流程中的函数几乎没有什么需要讲解的,音乐播放器的中的关键代码当然是Service播放音乐和对切换歌曲时处理进度条更新函数progressbar这个函数启动了一种更新进度条欧线程,同步更新了中和告知栏中的进度条I musicActivity I//更手嘤宜条void progessbar{final Handlerhandler=new Handler;new ThreadnewRunnable{©Overridepublic voidrun{//TODO Auto-generated methodstub handler.postDelayedthis,1000;if/nyAtediaPlayer.isPlaying{currenttime-i-¥;if currenttime%6010songnow=Integer.toStringcurrenttime/60+:0n+Integer.toStringcurrenttime%60;elsesongnow=Integer.toStringcurrenttime/60+:*+Integer.toStringcurrenttime%60;noti/ication.contentView.setTextViewTextR.id.textl,songnow;noti/ication.contentview.setProgressBarR.id.pb,totaLtime/1000,currenttime,false;viewHolder.songnow.setTextsongnow;viewHoIder.progressBari.setMaxtotaLtime/1000;viewHolder.progressBarl.setProgresscurrenttime;showNotification;}}}.start;播放音乐欧函数I playMusicString path函数中的参数为歌曲的途径(包括歌曲的文献名和后缀),返回类型为空,它的作用就是播放该途径的歌曲并且有一种播放完毕日勺监听器所有日勺歌曲控制指令都写在中,自身并不负责对歌曲列表的操作,因此,假如播放完毕,则给musicActivity ServiceI一种切换歌曲欧指令musicActivityI104//播会音乐105-public staticvoid playMusicStringpath{106try107myMediaPLayer.reset;108myMediaPLayer.setDataSourcepath;109/wyAlediaPtayer.prepare;110myMediaPLayer.start;111-/nyAJediaPLayer.setOnCo npletionListenernewOnCompletionListener{1121130©Override114public voidonCompletionMediaPlayer mp{|115//TODO Auto-generated methodstub116musicActivity.editsongfLag;117}118};552222233333333334444444444555555555119}catch Exceptione{|120//TODO:handle exception121e.printStackTrace;122}123}124切换歌曲后需要调用口勺函数切换歌曲后来需要重新设定一下尚changeSong progressbar有正在播放日勺文献名,专辑图片,歌词信息等这个函数在中被大量调用从而实现对音乐播放的安全控制musicActivity76public staticvoid changeSong{r77i totaLtime=/wyAJediaPLayer.getDuration;78if/nyAJediaPtayer.getDuration/1000%6010songtotaL=Integer|
79.toStringmyMediaPLayer.getDuration/1000/60+“0”180+Integer.toStringmyMediaPLayer.getDuration/1000%60;else|81songtotaL=Integer|
82.toStringmyNediaPLayer.getDuration/1000/60|83:84+Integer.toStringmyAlediaPLayer.getDuration/1000%60;viewHolder.songti tte.setText/wyAlusicL ist.get currentLis tlte/n;|85viewHolder.songtotaL.setTextsongtotaL;|86|87currenttime=-1;|88|89noti/i cation.contentview.setTextViewTextR.id.down_tv,myAlusicList.getcurrentListltem;|90notification.contentview.setTextViewTextR.id.text2,songtotaL;:91i92musicActivityi93i
94.setLyricVsdcard/Music/**|95+myMusicList.getcurrentListltem.substring0,96myMusicList.QetcurrentListltem.length-4|97;+.2:98}|
994.3数据库Helper类MusicListdbHelper设计1101\1Q2构造函数
4.
3.1MusicListdbHelperContext-context是一种类,类对象的实例化都需要构造函数,数据库日勺类/、MusicListdbHelper HelperJ构造很简朴,就是建立或者打开一种自己定义的数据库12private staticfinal StringDATABASE_NAME=Hterry.musiclist1;17-MusicListdbHelperContext_context{18context=_context;19db=context.openOrCreateDatabaseD/47L4BAS£_AMAJf null;J20Log.vTAG,db path=*+db.getPath;2122I关键代码讲解
43.2需要被应用开始时调用的函数以判断应用与否需要初始化,返回类型为FirstStartboolean中建立了一种游标查询数据库中日勺名为的表,该表也仅作为初FirstStart“colaconfig”I始化查询而尤其建立,假如该表不存在,则阐明数据库中不存在歌曲信息表,则创立该表和歌曲信息表,假如该表存在,则返回并不进行任何操作musicitem false7-public booleanFirstStart{71try{172String col[]={Mtype\name};173Cursor c=db.query^sqlite master,col,name=*colaconfig,null,null,null,null;if c.getCount==0{174CreateTable_musicitem;75CreateTable_colaconfig;76db.close;[77return true;78}else{,9db.close;;80return false;818283}catch Exceptione{84Log.vcola\e=+e.getMessage;|85return false;186;87;888990其他函数及其作用:创立歌曲信息表CreateTable_musicitem创立配置表CreateTable_colaconfig添加歌曲到歌曲信息表,返回类型为Musicitem_insitemString name,Stringpathboolean从歌曲信息表中删除名为条目Musicitem_delitemString namenamerJ得到歌曲信息表的游标用以查询表中歌曲信息,返回值为getMusicltem ICursor.第一次运行程序的主界面1第五章程序的测试0z个OK/Sg»□«空,ill画12:02®Mp3PlayerSimple mp3playerchoiceplayEXIT.点击后的歌曲选择界面2“choice”OK/sg»□«T.ill00012:03选择路径,st/storage/sdcardO/Ku.123木头人■黑Girl.aac爱不单行.罗志祥.aac爱久见人心•梁静茹.aac爱就一个字-张信哲.aac爱你不是两三天-梁静
55.aac爱情爱情Demo_Version-杨爱如潮水-张信哲.aac爱我别走-张震岳.aac爱我别走-周杰伦.aac晒味〃盅像国I《恶席在目取消目录第一章引言3课题研究目的
1.13课题研究意义
1.23课题可行性分析
1.33课题调研
1.
3.13可行性分析
1.
3.23第二章开发环境安装和配置4开发包及其工具简介
2.1-4开发平台搭建环节
2.2Android4第三章程序逻辑架构5程序工程构造图
3.15工程各文献简介
3.25程序源文献夹简介
3.
2.1src-5程序外部资源文献夹简介
3.
2.2res6其他文献简介
3.
2.37主界面设计旧
4.1musicActivity函数
4.
1.10nCreat,8键代码讲解
4.
1.118选定的歌曲在主界面中显示播放进度,也可拖动进度条播放
3.叵9N91K/Sg T.III12:04©1Mp3Player/storage/sdcardO/KuwoMusic/music/爱你不是两三天-梁静茹.aacTIME:299630choiceplayEXIT**.使用返回键退出程序后仍在后台运行(歌曲仍在后台播放)5Service第六章分工与总结
6.1人员分工张润浩日勺编写以及数据库的建立,同步负责软件后期的调试和musicActivity SdCardListJ修改;刘博重要负责的编写,包括告知栏和主中控件日勺同步,同步负责汇报的Service Activity书写;
6.2课程总结通信软件设计设计是一门紧跟时代步伐日勺课程,顺应了当下移动互联网的发展浪潮,通过这门课程使我们大学生将课堂所学的知识逐渐转化为社会所需要的才能,令我们获益匪浅I这次的作品在短短两周内,虽然并非一切顺利,但也算磕磕绊绊地完毕了途中碰到过难以处理的问题,虽然厌烦但还是逼着自己搞定了说几种详细的吧,通过这次的课程设计,重要得到了这样几种经验首先,在开发之前,假如是比较生疏的领域最佳将资料准备完备,否则1在做扩展的时候将会懊悔莫及;另一方面,效率永远是第一位的假如想睡了的话就不要勉强I,自己继续工作;最终,问询他人并自己进行思索永远是最快捷的成长途径综上所述,通过这次日勺软件开发,通过这门课程,我们培养了自己独立思索和独立作业的能力,愈加可以自信地面对即将踏入的社会音乐播放服务设计
4.2LocalService10函数
4.
2.1onCreat10关键代码讲解10数据库类设计
4.3Helper MusicListdbHelper11构造函数MusicListdbHelper11关键代码讲解11第五章程序测试13第六章分工与总结14第一章引言
1.1课题研究的目的,熟悉一下工具和安卓的环境配置及开发日勺过程;1eclipse.纯熟掌握欢组件如等组件欧灵活应用;2java Jbutton,textview,listView,menu J纯熟掌握安卓日勺一种有关数据保留的方式;
3.SQLite
3.锻炼一下自己碰到问题,然后处理问题时能力
41.2课题研究的意义伴随技术的成熟和智能的不停普及,移动应用日勺需求与日俱增,移动应用开发成为3G当下最热门时技术之一在和联盟欧共同推进下,在众多移动应用开发google androidJ android平台中脱颖而出操作系统是最具杀伤力欧|武器之一苹果以其天才日勺创新,使得在Android googleiphone全球迅速拥有了数百万忠实勺“粉丝”,而作为第一种完整、开放、免费的平台,H android使开发者在为其开发程序时拥有更大的自由与等厂商不一样的是,windows mobile,symbian操作系统是免费向开发人员提供,这样可节省近三层得成本android我们懂得,无论是产品还是技术,商业应用都是它最大的发展动力如此受到厂商android与开发者的青睐,它勺前景一片光明国内对于安卓这方面勺市场还没有完全开发出来H H只要我们努力学习对理想、对生活都会有很大的补益android,I因此,开发这样一套很简朴勺音乐播放器软件对我们来讲是一件很有必要的事情,在下面H日勺各章中我们将以开发安卓音乐播放器软件为例,谈谈其开发过程和所波及到日勺问题及处理措施本文中所做勺重要工作如下H开发环境及开发工具日勺安装及配置;♦论述整个音乐播放器日勺系统构造及工作原理;♦设计实现“主界面设计”,“播放器设计”,“数据库设计”这♦activity Service三个重要的功能模块;分析并处理实现中日勺若干技术问题,像组件日勺选择以及保留方式的选择;♦进行测试并分析成果♦
1.3课题的可行性分析课题调研
1.
3.1()与实践活动和有关的文献和资料由作者本人网络查找,以及老师协助;1()具有碰到问题,具有独立思索,耐心钻研,向老师虚心讨教的良好态度;2I()有关技术方面的难题,跟指导老师面谈
31.可行性分析
3.2)技术可行性本项目仅需要一台装有及配置好开发环境日勺计算机即可,1eclipse android对计算机自身有一定的规定,它可以使用及其以上版本,等操作系统;windows xpmac os,linux)经济可行性——由于本软件开发只需要一台电脑就行,基本不需要太大的成本在经2I济上完全可行;)操作可行性——界面设计时充足考虑顾客的习惯以及方面的局限性,程序必须要很3简朴;本程序只波及到开发环境配置,安卓组件时熟悉,以及安卓平台上的数据存储,并没有太大时难度,因此,该项目完全有可操作性第二章开发环境的安装和配置
2.1开发包及其工具的简介以作为开发语言,是进行开发时必需、开发包.是一款非常Android javajdk javaW Jeclipse优秀的开源在大量插件时配合”下,完全可以满足从企业级应用到终端游戏的IDE,java javaI开发.官方也提供了基于开发插件因此本软件开发选择作为Google EclipseBtlandroidADT,Eel ipse开发IDE.
2.2Android开发平台搭建环节首先到下载集成开发环境并且解压,这里推荐下载集成版本,可认为平Eclipse JavaEE台的搭建省下不少工作接着再去站点下载后安装,下载,后解压第J SDKAndroid SDKL5一步下载工序就结束了
②双击解压后目录中勺然后启动,选择菜单中的Eel ipseH eclipse.exe Eel ipse Help-Install选项卡上日勺点击右侧勺输入后确定,然后在New Software-Available Software,H“Add”“Work with”下拉菜单中选择刚刚输入欧网址过一会就会出现一种选项,勾上后来点击I DeveloperTools Next后来会自动网上查找开发工具插件,然后找到和Eclipse AndroidAndroid DDMSAndroid Development选中这两个点击就会自动下载并安装插件了,最终会提醒重启Tools,Finish,Eclipse AndroidEclipse
③重启后选择菜单中的在左侧的项目中Eclipse|Windows-Preferences lAndroid SDK中填入解压后区|目录,然后点击Location AndroidSDK Apply
④在的系统变量中的变量中添加一种值,该值指向解压后的目Windows pathAndroidSDK录下的文献夹Itools第三章程序逻辑架构
2.1程序工程构造图下放两图即为程序的整个工程的构造图,左方为工程日勺整体构造图,右方为文献中res的各类用到的资源文献视图/避・包musicPlayer res」四」占src drawable-hdpi/田com.lyric Ficon.png[T]LyricView.java Flast.pngP music.png国SongLyric.javaF news_main.png/田com.terryF next.png[jj LocalService.javaF page_indicator_focuse[j]musicActivity.javaF pagejndicator.png[jj MusicFilter.javaE pause.png国MusicListdbHelper.javiF start.png estop.png[jj SdCardList.javaF whatsnew_bg.jpg[0[jj viewHolder.javadrawable-ldpi tdrawable-mdpi//秒gen[Generated JavaFiles]layout/田com.terry凶,X I ay o ut_g rid view.xm I笆t R.javaI ayout_listvi ew.xm It=Android
2.1-updatel[%Iayo utjyri cview.xm I/-Referenced Libraries还包t iandroid-support-v
4.jar-IiX,main.xmlassets凶/迫mainl.xmlres凶musicitme.xmlt Bdrawable-hdpiX progressbar.xml昌t drawable-ldpiK sdcard.xmlt Bdrawable-mdpi/0valuest BlayoutX color.xmlt0valuesLX strings.xmla AndroidManifest.xml管default properties
3.2工程各文献简介程序源文献夹简介
3.
1.1src源文献夹下包括两个包与分别用于程序重要功能勺实现和提供歌src com.terry com.lyric,H词同步显示日勺控件先分析歌词包其中设计了一种歌词显示控件提供应主程序并作为com.lyrico ViewLyricView,一种控件显示出来;设计了歌词类用以从卡中寻找到响应歌词文献并进行初始化操作sd主程序类包中,和均为前者为播放器的主界面进com.terry musicActivitySdCardList Activity,I行多种播放控制操作,后者用来从卡中选择文献添加到播放列表中;SD MP3是音乐播放区用于进行音乐播放并在告知栏中显示消息;LocalService IService,MusicListdbHelper为自定义的数据库类,将歌曲日勺名字和途径存入数据库,提供对歌曲数据库的增长和Helper删除欧操作;此外两个均为辅助类,一种用于从文献夹中选择后缀名为I的文献另一种用于整合控件代码如下mp3I MusicFilter.java,viewHolder.java,1package com.terry;3+import java.io.File;5I:6public classMusicFilter implementsFilenameFilter|7:Sr-©Override9public booleanacceptFile dir.String filename{[10//TODO Auto-generated methodstub,1return filename.endsWith**.mp3;|12}|13:14|15}|16MusicFilter.java1package com.terry;23+import android.widget.Button;7public classviewHolder{910public staticProgressBar progressBarl;11public staticSeekBar seekbarl;12public staticButton pause;13public staticButton next;14public staticButton Last;15public staticButton random;16public staticTextview songtitLe;17public staticTextview songnow;18public staticTextview songtotal\19public staticTextview text;2021viewHolder.java程序外部资源文献夹简介res。
个人认证
优秀文档
获得点赞 0