1、2.1.1 播放器的用例图假设安装了音乐播放器的用户是系统的主要设计对象,其拥有以下操作,启动软件、播放音乐、暂停播放、停止播放、退出软件,其用例图如下图2.1 播放器基本用例图2.1.2用例分析用例名称:启动软件参与者:用户目标:使得用户启动软件并加载手机和sd卡上的音频文件到播放列表前置条件:无基本事件流:1.用户启动软件 2.播放器将播放列表中的当前的歌曲播放使得用户可以播放在播放列表中选中的歌曲播放器正在运行1.用户单击“播放”按钮暂停使得用户可以暂停正在播放的歌曲歌曲正在播放且未停止和暂停1.用户单击“暂停”按钮 2.播放器将暂停当前的歌曲停止使得用户可以停止正在播放的歌曲歌曲正在播
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、3 歌曲列表界面歌曲列表界面4.4 播放界面5.部分源代码以下给出功能实现代码,布局,风格等代码量过大,放在压缩文件中文件夹显示文件如图所示播放器页面布局Main.xml代码如下 SeekBar +id/SeekBar01wrap_contentmax=100progress=0secondaryProgress=visibility=visibleTextView +id/currentProgresslayout_y=300dp+id/curtimeandtotaltimeLinearLayout horizontalImageButton+id/front_buttonlayout_ma
4、rginLeft=10dipdrawable/first1+id/stop_buttondrawable/stop1+id/start_buttondrawable/start1+id/pause_buttondrawable/pose1+id/next_buttondrawable/next1/LinearLayoutMainActivity.Java代码如下import java.io.File;import java.io.FilenameFilter;import java.io.IOException;import java.util.ArrayList;import java.ut
5、il.List;import android.app.ListActivity;import android.graphics.Color;import android.graphics.drawable.GradientDrawable;import android.graphics.drawable.GradientDrawable.Orientation;import android.media.MediaPlayer;import android.media.MediaPlayer.OnCompletionListener;import android.os.Bundle;import
6、 android.os.Handler;import android.view.KeyEvent;import android.view.View;import android.view.View.OnClickListener;import android.widget.ArrayAdapter;import android.widget.ImageButton;import android.widget.ListView;import android.widget.SeekBar;import android.widget.SeekBar.OnSeekBarChangeListener;i
7、mport android.widget.TextView;public class MainActivity extends ListActivity private ImageButton mFrontImageButton = null; private ImageButton mStopImageButton = null; private ImageButton mStartImageButton = null; private ImageButton mPauseImageButton = null; private ImageButton mNextImageButton = n
8、ull; /*定义进度handler,显示百分比进度*/ Handler mPercentHandler = new Handler(); private SeekBar mSeekBar=null; private TextView curProgressText=null; private TextView curtimeAndTotaltime=null; public MediaPlayer mMediaPlayer; private List mMusicList = new ArrayList= 0) currentListItem = mMusicList.size(); els
9、e playMusic(MUSIC_PATH + mMusicList.get(currentListItem); ); public void initStopMusic() mStopImageButton = (ImageButton)findViewById(R.id.stop_button); mStopImageButton.setOnClickListener(new OnClickListener() if(mMediaPlayer.isPlaying() mMediaPlayer.reset(); public void initStartMusic() mStartImag
10、eButton = (ImageButton)findViewById(R.id.start_button); mStartImageButton.setOnClickListener(new OnClickListener() playMusic(MUSIC_PATH + mMusicList.get(currentListItem); startSeekBarUpdate(); public void initPauseMusic() mPauseImageButton = (ImageButton)findViewById(R.id.pause_button); mPauseImageB
11、utton.setOnClickListener(new OnClickListener() if(mMediaPlayer.isPlaying() mMediaPlayer.pause(); else mMediaPlayer.start(); public void initNextMusic() mNextImageButton = (ImageButton)findViewById(R.id.next_button); mNextImageButton.setOnClickListener(new OnClickListener() nextMusic(); public void i
12、nitSeekBar() /*初始化拖动条和当前进度显示值*/ mSeekBar=(SeekBar)findViewById(R.id.SeekBar01); curProgressText=(TextView)findViewById(R.id.currentProgress); curtimeAndTotaltime=(TextView)findViewById(R.id.curtimeandtotaltime); mSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() public void onProgress
13、Changed(SeekBar seekBar, int progress, boolean fromUser) /* 如果拖动进度发生改变,则显示当前进度值 */ curProgressText.setText(当前进度: + progress); public void onStartTrackingTouch(SeekBar arg0) 拖动中. public void onStopTrackingTouch(SeekBar arg0) int dest = mSeekBar.getProgress(); int mMax = mMediaPlayer.getDuration(); in
14、t 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 onCompletion(Medi
15、aPlayer arg0) nextMusic(); ); catch (IOException e) e.printStackTrace(); private void nextMusic() if(+currentListItem = mMusicList.size() currentListItem = 0; else public boolean onKeyDown(int keyCode, KeyEvent event) if(keyCode = KeyEvent.KEYCODE_BACK) mMediaPlayer.stop(); mMediaPlayer.release(); r
16、eturn super.onKeyDown(keyCode, event); protected void onListItemClick(ListView l, View v, int position, long id) currentListItem = position; playMusic(MUSIC_PATH + mMusicList.get(position); super.onListItemClick(l, v, position, id); /播放列表 public void musicList() File home = new File(MUSIC_PATH); if(
17、home.listFiles(new MusicFilter().length 0) for(File file : home.listFiles(new MusicFilter() mMusicList.add(file.getName(); ArrayAdapter musicList = new ArrayAdapter(MainActivity.this,R.layout.musicitem,mMusicList); setListAdapter(musicList); /*更新拖动条进度*/ public void startSeekBarUpdate() mPercentHandler.post(start); Runnable start = new Runnable() public void run() / 用一个handler更新SeekBar mPercentHandler.post(updatesb); ; Runnable updatesb =new Runnable() public void run() int position = mMediaPlayer.getCurrentPosition(); int mMax = mMediaPlayer.getDuration(); int s