版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、物联网移动应用开发 课 程 设 计题 目 音乐播放器设计 班 级 物联网1303 学 号 311309080318 姓 名 牟俊强 指导老师 刘永利 2016年 6月 25日1.项目需求当今社会的生活节奏越来越快,人们对手机的要求也越来越高,由于手机市场发展迅速,使得手机操作系统也出现了不同各类,现在的市场上主要有三个手机操作系统,Windows mobile,symbian,以及谷歌的Android操作系统,其中占有开放源代码优势的Android系统有最大的发展前景。那么能否在手机上拥有自己编写的个性音乐播放器呢?能的,谷歌Android系统就能做到。本文的音乐播放器就是基于谷歌Androi
2、d手机平台的播放器。Android:是谷歌于2007年公布的开放式源代码手机系统,它的开放性就优于其它封闭式的手机系统,因此,任何人都可能根据自己的喜好将手机系统中的所有功能重新编写。这使得越来越多的人关注这个操作系统。本次作品音乐播放器就是基于Android平台的。现今社会生活紧张,而欣赏音乐是其中最好的舒缓压力的方式之一,本项目的目的是开发一个可以播放主流音乐文件格式的播放器,本设计实现的主要功能是播放Mp3,Wav多种格式的音乐文件,并且能够控制播放,暂停,停止,播放列等基本播放控制功能,界面简明,操作简单。 本项目是一款基于Android手机平台的音乐播放器,使Android手机拥有个
3、性的多媒体播放器,使手机显得更生动灵活化,与人们更为接近,让手机主人随时随地处于音乐视频的旋律之中。使人们的生活更加多样化。也使设计者更加熟练Android的技术和其它在市场上的特点。1.1开发环境Eclipse、Android SDK 3.2.02.系统需求分析2.1 功能需求(用例图分析)根据项目的目标,我们可获得项目系统的基本需求,以下从不同角度来描述系统的需求,并且使用用例图来描述,系统的功能需求,我们分成四部分来概括,即播放器的基本控制需要,播放列表管理需求,播放器友好性需求和播放器扩展卡需求。以下分别描述:2.1.1 播放器的用例图假设安装了音乐播放器的用户是系统的主要设计对象,其
4、拥有以下操作,启动软件、播放音乐、暂停播放、停止播放、退出软件,其用例图如下图2.1 播放器基本用例图2.1.2用例分析用例名称:启动软件参与者:用户目标:使得用户启动软件并加载手机和sd卡上的音频文件到播放列表前置条件:无基本事件流:1.用户启动软件 2.播放器将播放列表中的当前的歌曲用例名称:播放参与者:用户目标:使得用户可以播放在播放列表中选中的歌曲前置条件:播放器正在运行基本事件流:1.用户单击“播放”按钮 2.播放器将播放列表中的当前的歌曲用例名称:暂停参与者:用户目标:使得用户可以暂停正在播放的歌曲前置条件:歌曲正在播放且未停止和暂停基本事件流:1.用户单击“暂停”按钮 2.播放器
5、将暂停当前的歌曲用例名称:停止参与者:用户目标:使得用户可以停止正在播放的歌曲前置条件:歌曲正在播放或暂停基本事件流:1.用户单击“停止”按钮 2.播放器将停止当前播放的歌曲用例名称:退出参与者:用户目标:使得用户退出或者后台播放音乐前置条件:程序在运行基本事件流:1.用户按返回键 2.播放器退出或者进入后台播放3.概要设计3.1软件播放流程图Step1.启动软件后,软件自动检索手机和sd卡的音频文件,并组织显示成列表.Step2.点击列表的歌曲名字。Step3.播放音乐。Step4.点击暂停,音乐暂停Step5.点击播放 转到step3Step6.点击停止 停止播放音乐Step7.点击退出。
6、 启动软件自动检索手机中的音乐文件,并显示 选择歌曲,点击播放暂停/退出软件图3.1音乐播放器流程图4.界面展示4.1软件部署系统编译生成apk文件,将apk文件拷到手机或者sd卡中,直接打开即可安装。4.2启动软件打开软件后的界面4.3 歌曲列表界面歌曲列表界面4.4 播放界面5.部分源代码以下给出功能实现代码,布局,风格等代码量过大,放在压缩文件中文件夹显示文件如图所示播放器页面布局Main.xml代码如下<LinearLayout xmlns:android=" android:orientation="vertical" android:layout
7、_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&qu
8、ot; android:drawSelectorOnTop="false" /> <SeekBar android:id="+id/SeekBar01" android:layout_height="wrap_content" android:layout_width="fill_parent" android:max="100" android:progress="0" android:secondaryProgress="0" androi
9、d:visibility="visible" /> <TextView android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="+id/currentProgress" /> <TextView android:layout_height="wrap_content" android:layout_width="fill_parent" an
10、droid: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" a
11、ndroid: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:la
12、yout_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
13、="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=
14、"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></Linear
15、Layout>MainActivity.Java代码如下import java.io.File;import java.io.FilenameFilter;import java.io.IOException;import java.util.ArrayList;import java.util.List;import android.app.ListActivity;import android.graphics.Color;import android.graphics.drawable.GradientDrawable;import android.graphics.drawabl
16、e.GradientDrawable.Orientation;import android.media.MediaPlayer;import android.media.MediaPlayer.OnCompletionListener;import android.os.Bundle;import android.os.Handler;import android.view.KeyEvent;import android.view.View;import android.view.View.OnClickListener;import android.widget.ArrayAdapter;i
17、mport android.widget.ImageButton;import android.widget.ListView;import android.widget.SeekBar;import android.widget.SeekBar.OnSeekBarChangeListener;import android.widget.TextView;public class MainActivity extends ListActivity private ImageButton mFrontImageButton = null;private ImageButton mStopImag
18、eButton = null;private ImageButton mStartImageButton = null;private ImageButton mPauseImageButton = null;private ImageButton mNextImageButton = null;/*定义进度handler,显示百分比进度*/Handler mPercentHandler = new Handler();private SeekBar mSeekBar=null;private TextView curProgressText=null;private TextView cur
19、timeAndTotaltime=null;public MediaPlayer mMediaPlayer;private List<String> mMusicList = new ArrayList<String>();private int currentListItem = 0;private static final String MUSIC_PATH = new String("/sdcard/");Override public void onCreate(Bundle savedInstanceState) super.onCreat
20、e(savedInstanceState); setContentView(R.layout.main); musicList(); mMediaPlayer = new MediaPlayer(); initmFrontMusic(); initStopMusic(); initStartMusic(); initPauseMusic(); initNextMusic(); initSeekBar(); public void initmFrontMusic()mFrontImageButton = (ImageButton)findViewById(R.id.front_button);m
21、FrontImageButton.setOnClickListener(new OnClickListener()public void onClick(View arg0) if(-currentListItem >= 0) currentListItem = mMusicList.size(); else playMusic(MUSIC_PATH + mMusicList.get(currentListItem); );public void initStopMusic()mStopImageButton = (ImageButton)findViewById(R.id.stop_b
22、utton);mStopImageButton.setOnClickListener(new OnClickListener()public void onClick(View arg0) if(mMediaPlayer.isPlaying()mMediaPlayer.reset(););public void initStartMusic()mStartImageButton = (ImageButton)findViewById(R.id.start_button);mStartImageButton.setOnClickListener(new OnClickListener()publ
23、ic void onClick(View arg0) playMusic(MUSIC_PATH + mMusicList.get(currentListItem);startSeekBarUpdate(););public void initPauseMusic()mPauseImageButton = (ImageButton)findViewById(R.id.pause_button);mPauseImageButton.setOnClickListener(new OnClickListener()public void onClick(View arg0) if(mMediaPlay
24、er.isPlaying()mMediaPlayer.pause();elsemMediaPlayer.start(););public void initNextMusic()mNextImageButton = (ImageButton)findViewById(R.id.next_button);mNextImageButton.setOnClickListener(new OnClickListener()public void onClick(View arg0) nextMusic(););public void initSeekBar()/*初始化拖动条和当前进度显示值*/ mS
25、eekBar=(SeekBar)findViewById(R.id.SeekBar01); curProgressText=(TextView)findViewById(R.id.currentProgress); curtimeAndTotaltime=(TextView)findViewById(R.id.curtimeandtotaltime); mSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() public void onProgressChanged(SeekBar seekBar, int progr
26、ess,boolean fromUser) /* 如果拖动进度发生改变,则显示当前进度值 */curProgressText.setText("当前进度: " + progress);public void onStartTrackingTouch(SeekBar arg0) curProgressText.setText("拖动中.");public void onStopTrackingTouch(SeekBar arg0) int dest = mSeekBar.getProgress(); int mMax = mMediaPlayer.getD
27、uration();int sMax = mSeekBar.getMax();mMediaPlayer.seekTo(mMax*dest/sMax););private void playMusic(String path)try mMediaPlayer.reset();mMediaPlayer.setDataSource(path);mMediaPlayer.prepare();mMediaPlayer.start();mMediaPlayer.setOnCompletionListener(new OnCompletionListener()public void onCompletio
28、n(MediaPlayer arg0) nextMusic();); catch (IOException e) e.printStackTrace();private void nextMusic()if(+currentListItem >= mMusicList.size()currentListItem = 0;elseplayMusic(MUSIC_PATH + mMusicList.get(currentListItem);Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) if(keyCode = Ke
29、yEvent.KEYCODE_BACK) mMediaPlayer.stop(); mMediaPlayer.release(); return super.onKeyDown(keyCode, event);Overrideprotected void onListItemClick(ListView l, View v, int position, long id) currentListItem = position;playMusic(MUSIC_PATH + mMusicList.get(position);super.onListItemClick(l, v, position,
30、id);/播放列表public void musicList()File home = new File(MUSIC_PATH);if(home.listFiles(new MusicFilter().length > 0)for(File file : home.listFiles(new MusicFilter()mMusicList.add(file.getName();ArrayAdapter<String> musicList = new ArrayAdapter<String>(MainActivity.this,R.layout.musicitem,mMusicList);setListAdapter(musicList);/*更新拖动条进度*/public void startSeekBarUpdate() mPercentHandler.post(start);Runnable start
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度消防系统改造工程变更设计与监理合同3篇
- 2025年度家居用品销售居间服务合同协议书范本2篇
- 2025年度河沙购销合同范本2篇
- 2025年度杉木木材碳汇项目投资与收益分配合同3篇
- 二零二五年度智能交通管理系统采购意向合同3篇
- 2025年度环境卫生应急物资储备承包合同3篇
- 2025年度企业资源规划软件许可与集成实施服务合同2篇
- 二零二五年度虚拟现实技术研发人员劳动合同3篇
- 2025年度台球室租赁与电子竞技比赛组织合同3篇
- 2025年度特种养殖场工人劳动合同3篇
- 【西平李氏】忠武郡王李晟后裔分布及部分家谱
- 水库回水计算(实用)
- 人力资源管理概论全套课件
- 伊索寓言-狗和影子课件
- 卸船机用行星减速机的设计-毕业设计
- 中班美术活动美丽的蝴蝶教案【含教学反思】
- 北师大版九年级数学上册教学教学工作总结
- 光储电站储能系统调试方案
- (完整)小学语文考试专用作文方格纸
- 管理供应商 供应商绩效评估
- 烟花爆竹工程设计安全规范
评论
0/150
提交评论