版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/《物联网移动应用开发》课程设计题目班级学号姓名指导老师2016年6月25日
1.项目需求当今社会的生活节奏越来越快,人们对手机的要求也越来越高,由于手机市场发展迅速,使得手机操作系统也出现了不同各类,现在的市场上主要有三个手机操作系统,Windowsmobile,symbian,以与谷歌的Android操作系统,其中占有开放源代码优势的Android系统有最大的发展前景。那么能否在手机上拥有自己编写的个性音乐播放器呢?能的,谷歌Android系统就能做到。本文的音乐播放器就是基于谷歌Android手机平台的播放器。Android:是谷歌于2007年公布的开放式源代码手机系统,它的开放性就优于其它封闭式的手机系统,因此,任何人都可能根据自己的喜好将手机系统中的所有功能重新编写。这使得越来越多的人关注这个操作系统。本次作品音乐播放器就是基于Android平台的。现今社会生活紧张,而欣赏音乐是其中最好的舒缓压力的方式之一,本项目的目的是开发一个可以播放主流音乐文件格式的播放器,本设计实现的主要功能是播放Mp3,Wav多种格式的音乐文件,并且能够控制播放,暂停,停止,播放列等基本播放控制功能,界面简明,操作简单。本项目是一款基于Android手机平台的音乐播放器,使Android手机拥有个性的多媒体播放器,使手机显得更生动灵活化,与人们更为接近,让手机主人随时随地处于音乐视频的旋律之中。使人们的生活更加多样化。也使设计者更加熟练Android的技术和其它在市场上的特点。1.1开发环境Eclipse、AndroidSDK3.2.02.系统需求分析2.1功能需求(用例图分析)根据项目的目标,我们可获得项目系统的基本需求,以下从不同角度来描述系统的需求,并且使用用例图来描述,系统的功能需求,我们分成四部分来概括,即播放器的基本控制需要,播放列表管理需求,播放器友好性需求和播放器扩展卡需求。以下分别描述:2.1.1播放器的用例图假设安装了音乐播放器的用户是系统的主要设计对象,其拥有以下操作,启动软件、播放音乐、暂停播放、停止播放、退出软件,其用例图如下图2.1播放器基本用例图2.1.2用例分析用例名称:启动软件参与者:用户目标:使得用户启动软件并加载手机和sd卡上的音频文件到播放列表前置条件:无基本事件流:1.用户启动软件2.播放器将播放列表中的当前的歌曲用例名称:播放参与者:用户目标:使得用户可以播放在播放列表中选中的歌曲前置条件:播放器正在运行基本事件流:1.用户单击“播放”按钮2.播放器将播放列表中的当前的歌曲用例名称:暂停参与者:用户目标:使得用户可以暂停正在播放的歌曲前置条件:歌曲正在播放且未停止和暂停基本事件流:1.用户单击“暂停”按钮2.播放器将暂停当前的歌曲用例名称:停止参与者:用户目标:使得用户可以停止正在播放的歌曲前置条件:歌曲正在播放或暂停基本事件流:1.用户单击“停止”按钮2.播放器将停止当前播放的歌曲用例名称:退出参与者:用户目标:使得用户退出或者后台播放音乐前置条件:程序在运行基本事件流:1.用户按返回键2.播放器退出或者进入后台播放3.概要设计3.1软件播放流程图Step1.启动软件后,软件自动检索手机和sd卡的音频文件,并组织显示成列表.Step2.点击列表的歌曲名字。Step3.播放音乐。Step4.点击暂停,音乐暂停Step5.点击播放转到step3Step6.点击停止停止播放音乐Step7.点击退出。启动软件启动软件自动检索手机中的音乐文件,并显示自动检索手机中的音乐文件,并显示选择歌曲,点击播放选择歌曲,点击播放暂停/退出软件暂停/退出软件图3.1音乐播放器流程图4.界面展示4.1软件部署系统编译生成apk文件,将apk文件拷到手机或者sd卡中,直接打开即可安装。4.2启动软件打开软件后的界面4.3歌曲列表界面歌曲列表界面4.4播放界面5.部分源代码以下给出功能实现代码,布局,风格等代码量过大,放在压缩文件中文件夹显示文件如图所示播放器页面布局Main.xml代码如下<LinearLayoutxmlns:android=""android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="@drawable/tupian"> <ListView android:id="@+id/android:list" android:layout_width="fill_parent" android:layout_height="200dip" android:layout_weight="1" android:drawSelectorOnTop="false" /> <SeekBarandroid: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"/><TextViewandroid:layout_height="wrap_content"android:layout_width="fill_parent"android:id="@+id/currentProgress"/><TextViewandroid:layout_height="wrap_content"android:layout_width="fill_parent"android:layout_y="300dp"android:id="@+id/curtimeandtotaltime"/> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > <ImageButton android:id="@+id/front_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dip" android:background="@drawable/first1"/> <ImageButton android:id="@+id/stop_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/stop1" android:layout_marginLeft="10dip" /> <ImageButton android:id="@+id/start_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/start1" android:layout_marginLeft="10dip" /> <ImageButton android:id="@+id/pause_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/pose1" android:layout_marginLeft="10dip" /> <ImageButton android:id="@+id/next_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/next1" android:layout_marginLeft="10dip" /> </LinearLayout></LinearLayout>MainActivity.Java代码如下importjava.io.File;importjava.io.;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<String>mMusicList=newArrayList<String>(); privateintcurrentListItem=0; privatestaticfinalStringMUSIC_PATH=newString("/sdcard/"); @OverridepublicvoidonCreate(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() { =new); if(home.listFiles(newMusicFilter()).length>0) { for(:home.listFiles(newMusicFilter())) { mMusicList.add(()); } ArrayAdapter<String>musicList=newArrayAdapter<String>(MainActivity.this,R.layout.musicitem,mMusicList); setListAdapter(musicList); } } /*更新拖动条进度*/ publicvoidstartSeekBarUpdate(){ mPercentHandler.post(start); } Runn
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社区文化活动中心使用协议
- 餐饮行业业务员招聘协议
- 机场扩建拆迁施工协议
- 电脑店水电施工合同
- 文学作品翻译合同
- 娱乐行业投资手册
- 桥梁排水系统照明工程合同
- 科研实验设备租赁合同
- 智能交通系统招投标项目
- 2023年上海市中考物理一轮复习- 电能的获得和输送、无线电波和无线电通信 练习题
- 建恒超声波流量计使用说明书_图文
- QTZ63塔式起重机-使用说明书
- 江苏省书法水平等级证书考试硬笔书法专用纸1
- 大物实验思考题
- 物业维修工的服务规范考核标准
- (完整word版)儿童感觉统合能力发展评定量表
- 儿歌《别说我小》PPT课件.ppt
- 世界500强企业简要情况及在华机构联系方式
- 专题关于同一溶质不同浓度溶液混合的计算1
- 幼儿园《交通工具(火车篇)家长代课》PPT课件
- (完整版)like练习题
评论
0/150
提交评论