安卓音乐播放器.docx
- 文档编号:27341886
- 上传时间:2023-06-29
- 格式:DOCX
- 页数:17
- 大小:59.19KB
安卓音乐播放器.docx
《安卓音乐播放器.docx》由会员分享,可在线阅读,更多相关《安卓音乐播放器.docx(17页珍藏版)》请在冰豆网上搜索。
安卓音乐播放器
《物联网移动应用开发》之邯郸勺丸创作
创作时间:
二零二一年六月三十日
课程设计
题目音乐播放器设计
班级物联网1303
学号
姓名牟俊强
指导老师刘永利
2016年6月25日
现今社会的生活节奏越来越快,人们敌手机的要求也越来越高,由于手机市场发展迅速,使到手机把持系统也呈现了分歧各类,现在的市场上主要有三个手机把持系统,Windowsmobile,symbian,以及谷歌的Android把持系统,其中占有开放源代码优势的Android系统有最年夜的发展前景.那么能否在手机上拥有自己编写的个性音乐播放器呢?
能的,谷歌Android系统就能做到.本文的音乐播放器就是基于谷歌Android手机平台的播放器.
Android:
是谷歌于2007年公布的开放式源代码手机系统,它的开放性就优于其它封闭式的手机系统,因此,任何人都可能根据自己的喜好将手机系统中的所有功能重新编写.这使得越来越多的人关注这个把持系统.本次作品音乐播放器就是基于Android平台的.
现今社会生活紧张,而欣赏音乐是其中最好的舒缓压力的方式之一,本项目的目的是开发一个可以播放主流音乐文件格式的播放器,本设计实现的主要功能是播放Mp3,Wav多种格式的音乐文件,而且能够控制播放,暂停,停止,播放列等基本播放控制功能,界面简明,把持简单.
本项目是一款基于Android手机平台的音乐播放器,使Android手机拥有个性的多媒体播放器,使手机显得更生动灵活化,与人们更为接近,让手机主人随时随地处于音乐视频的旋律之中.使人们的生活更加多样化.也使设计者更加熟练Android的技术和其它在市场上的特点.
2.1功能需求(用例图分析)
根据项目的目标,我们可获得项目系统的基本需求,以下从分歧角度来描述系统的需求,而且使用用例图来描述,系统的功能需求,我们分成四部份来概括,即播放器的基本控制需要,播放列表管理需求,播放器友好性需求和播放器扩展卡需求.以下分别描述:
2.1.1播放器的用例图
假设装置了音乐播放器的用户是系统的主要设计对象,其拥有以下把持,启动软件、播放音乐、暂停播放、停止播放、退出软件,其用例图如下
图2.1播放器基本用例图
用例名称:
启动软件
介入者:
用户
目标:
使得用户启动软件并加载手机和sd卡上的音频文件到播放列表
前置条件:
无
用例名称:
播放
介入者:
用户
目标:
使得用户可以播放在播放列表中选中的歌曲
前置条件:
播放器正在运行
“播放”按钮
用例名称:
暂停
介入者:
用户
目标:
使得用户可以暂停正在播放的歌曲
前置条件:
歌曲正在播放且未停止和暂停
“暂停”按钮
用例名称:
停止
介入者:
用户
目标:
使得用户可以停止正在播放的歌曲
前置条件:
歌曲正在播放或暂停
“停止”按钮
用例名称:
退出
介入者:
用户
目标:
使得用户退出或者后台播放音乐
前置条件:
法式在运行
Step1.启动软件后,软件自动检索手机和sd卡的音频文件,并组织显示成列表.
Step2.点击列表的歌曲名字.
Step3.播放音乐.
Step4.点击暂停,音乐暂停
Step5.点击播放转到step3
Step6.点击停止停止播放音乐
Step7.点击退出.
系统编译生成apk文件,将apk文件拷到手机或者sd卡中,直接翻开即可装置.
翻开软件后的界面
歌曲列表界面
歌曲列表界面
4.4播放界面
以下给出功能实现代码,规划,风格等代码量过年夜,放在压缩文件中
文件夹显示文件如图所示
播放器页面规划
android=" android: orientation="vertical" android: layout_width="fill_parent" android: layout_height="fill_parent" android: background="@drawable/tupian" > android: id="@+id/android: list" android: layout_width="fill_parent" android: layout_height="200dip" android: layout_weight="1" android: drawSelectorOnTop="false" /> android: id="@+id/SeekBar01" android: layout_height="wrap_content" android: layout_width="fill_parent" android: max="100" android: progress="0" android: secondaryProgress="0" android: visibility="visible" /> android: layout_height="wrap_content" android: layout_width="fill_parent" android: id="@+id/currentProgress" /> android: layout_height="wrap_content" android: layout_width="fill_parent" android: layout_y="300dp" android: id="@+id/curtimeandtotaltime" /> android: orientation="horizontal" android: layout_width="fill_parent" android: layout_height="wrap_content" > android: id="@+id/front_button" android: layout_width="wrap_content" android: layout_height="wrap_content" android: layout_marginLeft="10dip" android: background="@drawable/first1"/> android: id="@+id/stop_button" android: layout_width="wrap_content" android: layout_height="wrap_content" android: background="@drawable/stop1" android: layout_marginLeft="10dip" /> android: id="@+id/start_button" android: layout_width="wrap_content" android: layout_height="wrap_content" android: background="@drawable/start1" android: layout_marginLeft="10dip" /> android: id="@+id/pause_button" android: layout_width="wrap_content" android: layout_height="wrap_content" android: background="@drawable/pose1" android: layout_marginLeft="10dip" /> android: id="@+id/next_button" android: layout_width="wrap_content" android: layout_height="wrap_content" android: background="@drawable/next1" android: layout_marginLeft="10dip" /> importjava.io.File; importjava.io.FilenameFilter; importjava.io.IOException; importjava.util.ArrayList; importjava.util.List; importandroid.app.ListActivity; importandroid.graphics.Color; importandroid.graphics.drawable.GradientDrawable; importandroid.graphics.drawable.GradientDrawable.Orientation; importandroid.media.MediaPlayer; importandroid.media.MediaPlayer.OnCompletionListener; importandroid.os.Bundle; importandroid.os.Handler; importandroid.view.KeyEvent; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.ArrayAdapter; importandroid.widget.ImageButton; importandroid.widget.ListView; importandroid.widget.SeekBar; importandroid.widget.SeekBar.OnSeekBarChangeListener; importandroid.widget.TextView; publicclassMainActivityextendsListActivity{ privateImageButtonmFrontImageButton=null; privateImageButtonmStopImageButton=null; privateImageButtonmStartImageButton=null; privateImageButtonmPauseImageButton=null; privateImageButtonmNextImageButton=null; /*界说进度handler,显示百分比进度*/ HandlermPercentHandler=newHandler(); privateSeekBarmSeekBar=null; privateTextViewcurProgressText=null; privateTextViewcurtimeAndTotaltime=null; publicMediaPlayermMediaPlayer; privateList privateintcurrentListItem=0; privatestaticfinalStringMUSIC_PATH=newString("/sdcard/"); @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); musicList(); mMediaPlayer=newMediaPlayer(); initmFrontMusic(); initStopMusic(); initStartMusic(); initPauseMusic(); initNextMusic(); initSeekBar(); } publicvoidinitmFrontMusic() { mFrontImageButton=(ImageButton)findViewById(R.id.front_button); mFrontImageButton.setOnClickListener(newOnClickListener(){ publicvoidonClick(Viewarg0){ if(--currentListItem>=0){ currentListItem=mMusicList.size(); }else{ playMusic(MUSIC_PATH+mMusicList.get(currentListItem)); } } }); } publicvoidinitStopMusic() { mStopImageButton=(ImageButton)findViewById(R.id.stop_button); mStopImageButton.setOnClickListener(newOnClickListener(){ publicvoidonClick(Viewarg0){ if(mMediaPlayer.isPlaying()) { mMediaPlayer.reset(); } } }); } publicvoidinitStartMusic() { mStartImageButton=(ImageButton)findViewById(R.id.start_button); mStartImageButton.setOnClickListener(newOnClickListener(){ publicvoidonClick(Viewarg0){ playMusic(MUSIC_PATH+mMusicList.get(currentListItem)); startSeekBarUpdate(); } }); } publicvoidinitPauseMusic() { mPauseImageButton=(ImageButton)findViewById(R.id.pause_button); mPauseImageButton.setOnClickListener(newOnClickListener(){ publicvoidonClick(Viewarg0){ if(mMediaPlayer.isPlaying()){ mMediaPlayer.pause(); } else{ mMediaPlayer.start(); } } }); } publicvoidinitNextMusic() { mNextImageButton=(ImageButton)findViewById(R.id.next_button); mNextImageButton.setOnClickListener(newOnClickListener(){ publicvoidonClick(Viewarg0){ nextMusic(); } }); } publicvoidinitSeekBar() { /*初始化拖动条和以后进度显示值*/ mSeekBar=(SeekBar)findViewById(R.id.SeekBar01); curProgressText=(TextView)findViewById(R.id.currentProgress); curtimeAndTotaltime=(TextView)findViewById(R.id.curtimeandtotaltime); mSeekBar.setOnSeekBarChangeListener(newOnSeekBarChangeListener(){ publicvoidonProgressChanged(SeekBarseekBar,intprogress, booleanfromUser){ /*如果拖动进度发生改变,则显示以后进度值*/ curProgressText.setText("以后进度: "+progress); } publicvoidonStartTrackingTouch(SeekBararg0){ curProgressText.setText("拖动中..."); } publicvoidonStopTrackingTouch(SeekBararg0){ intdest=mSeekBar.getProgress(); intmMax=mMediaPlayer.getDuration(); intsMax=mSeekBar.getMax(); mMediaPlayer.seekTo(mMax*dest/sMax); } }); } privatevoidplayMusic(Stringpath) { try{ mMediaPlayer.reset(); mMediaPlayer.setDataSource(path); mMediaPlayer.prepare(); mMediaPlayer.start(); mMediaPlayer.setOnCompletionListener(newOnCompletionListener(){ publicvoidonCompletion(MediaPlayerarg0){ nextMusic(); } }); }catch(IOExceptione){ e.printStackTrace(); } } privatevoidnextMusic() { if(++currentListItem>=mMusicList.size()) { currentListItem=0; } else { playMusic(MUSIC_PATH+mMusicList.get(currentListItem)); } } @Override publicbooleanonKeyDown(intkeyCode,KeyEventevent){ if(keyCode==KeyEvent.KEYCODE_BACK){ mMediaPlayer.stop(); mMediaPlayer.release(); } returnsuper.onKeyDown(keyCode,event); } @Override protectedvoidonListItemClick(ListViewl,Viewv,intposition,longid){ currentListItem=position; playMusic(MUSIC_PATH+mMusicList.get(position)); super.onListItemClick(l,v,position,id); } //播放列表 publicvoidmusicList() { Filehome=newFile(MUSIC_PATH); if(home.listFiles(newMusicFilter()).length>0) { for(Filefile: home.listFiles(newMusicFilter())) { mMusicList.add(file.getName()); } ArrayAdapter setListAdapter(musicList); } } /*更新拖动条进度*/ publicvoidstartSeekBarUpdate(){ mPercentHandler.post(start); } Runnablestart=newRunnable(){ publicvoidrun(){ //用一个handler更新SeekBar mPercentHandler.post(updatesb); } }; Runnableupdatesb=newRunnable(){ publicvoidrun(){ intposition=mMediaPlayer.getCurrentPosition(); intmMax=mMediaPlayer.getDuration(); intsMax=mSeekBar.getMax(); mSeekBar.setProgress(position*sMax/mMax); curtimeAndTotaltime.setText("以后播放时间: "+position/1000+"秒" +"\n歌曲总时间: "+mMax/1000+"秒"); //每秒钟更新一次 mPercentHandler.postDelayed(updatesb,1000); } }; //过滤文件类型 classMusicFilterimplementsFilenameFilter { publicbooleanaccept(Filedir,Stringname){ //这里还可以设置其他格式的音乐文件 return(name.endsWith(".mp3")); } } } 心得 (1)通过本次开发解决了诸如SD卡音乐文件搜索并显示、联网搜索歌曲等难题,对安卓的开发有了更深入的认识. (2)通过对Android手机平台的音乐播放器软件的开发,使我对Android音乐播放器系统的整体设计有一个深入的了解,对整个流程也会有一个清晰的认识.开发Android音乐播放器,要抓住开发的核心部份,音乐播放器年夜体由播放主界面、播放列表、菜单、播放设置、文件浏览、歌曲搜索六年夜核心组成. (3)本次法式设计,对播放器的系统结构框架做了精心的构思与设计,采纳主要开发工具是Eclips4.0+Java语言的支持,AndroidDevelopmentTool的插件,和AndroidSDK2.1版本的全面结合,才使整个音乐播放器系统得以实现. 课程设计教师评语及成果 指导教师:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 音乐 播放