安卓音乐播放器.docx

上传人:b****1 文档编号:1947709 上传时间:2023-05-02 格式:DOCX 页数:22 大小:2.36MB
下载 相关 举报
安卓音乐播放器.docx_第1页
第1页 / 共22页
安卓音乐播放器.docx_第2页
第2页 / 共22页
安卓音乐播放器.docx_第3页
第3页 / 共22页
安卓音乐播放器.docx_第4页
第4页 / 共22页
安卓音乐播放器.docx_第5页
第5页 / 共22页
安卓音乐播放器.docx_第6页
第6页 / 共22页
安卓音乐播放器.docx_第7页
第7页 / 共22页
安卓音乐播放器.docx_第8页
第8页 / 共22页
安卓音乐播放器.docx_第9页
第9页 / 共22页
安卓音乐播放器.docx_第10页
第10页 / 共22页
安卓音乐播放器.docx_第11页
第11页 / 共22页
安卓音乐播放器.docx_第12页
第12页 / 共22页
安卓音乐播放器.docx_第13页
第13页 / 共22页
安卓音乐播放器.docx_第14页
第14页 / 共22页
安卓音乐播放器.docx_第15页
第15页 / 共22页
安卓音乐播放器.docx_第16页
第16页 / 共22页
安卓音乐播放器.docx_第17页
第17页 / 共22页
安卓音乐播放器.docx_第18页
第18页 / 共22页
安卓音乐播放器.docx_第19页
第19页 / 共22页
安卓音乐播放器.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

安卓音乐播放器.docx

《安卓音乐播放器.docx》由会员分享,可在线阅读,更多相关《安卓音乐播放器.docx(22页珍藏版)》请在冰点文库上搜索。

安卓音乐播放器.docx

安卓音乐播放器

《物联网移动应用开发》

课程设计

 

题目音乐播放器设计

班级物联网1303

学号************

姓名牟俊强

指导老师永利

 

2016年6月25日

1.项目需求

当今社会的生活节奏越来越快,人们对手机的要求也越来越高,由于手机市场发展迅速,使得手机操作系统也出现了不同各类,现在的市场上主要有三个手机操作系统,Windowsmobile,symbian,以及谷歌的Android操作系统,其中占有开放源代码优势的Android系统有最大的发展前景。

那么能否在手机上拥有自己编写的个性音乐播放器呢?

能的,谷歌Android系统就能做到。

本文的音乐播放器就是基于谷歌Android手机平台的播放器。

Android:

是谷歌于2007年公布的开放式源代码手机系统,它的开放性就优于其它封闭式的手机系统,因此,任何人都可能根据自己的喜好将手机系统中的所有功能重新编写。

这使得越来越多的人关注这个操作系统。

本次作品音乐播放器就是基于Android平台的。

现今社会生活紧,而欣赏音乐是其中最好的舒缓压力的方式之一,本项目的目的是开发一个可以播放主流音乐文件格式的播放器,本设计实现的主要功能是播放Mp3,Wav多种格式的音乐文件,并且能够控制播放,暂停,停止,播放列等基本播放控制功能,界面简明,操作简单。

本项目是一款基于Android手机平台的音乐播放器,使Android手机拥有个性的多媒体播放器,使手机显得更生动灵活化,与人们更为接近,让手机主人随时随地处于音乐视频的旋律之中。

使人们的生活更加多样化。

也使设计者更加熟练Android的技术和其它在市场上的特点。

1.1开发环境

Eclipse、AndroidSDK3.2.0

2.系统需求分析

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.点击播放转到step3

Step6.点击停止停止播放音乐

Step7.点击退出。

 

图3.1音乐播放器流程图

4.界面展示

4.1软件部署

系统编译生成apk文件,将apk文件拷到手机或者sd卡中,直接打开即可安装。

4.2启动软件

打开软件后的界面

4.3歌曲列表界面

歌曲列表界面

4.4播放界面

 

5.部分源代码

以下给出功能实现代码,布局,风格等代码量过大,放在压缩文件中

文件夹显示文件如图所示

播放器页面布局

Main.xml代码如下

android="schemas.android./apk/res/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"

/>

MainActivity.Java代码如下

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;

privateListmMusicList=newArrayList();

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());

}

ArrayAdaptermusicList=newArrayAdapter(MainActivity.this,R.layout.musicitem,mMusicList);

setListAdapter(musicList);

}

}

/*更新拖动条进度*/

publicvoidstartSeekBarUpdate(){

mPercentHandler.post(start);

}

Runnablestart=newRunnable(){

publicvoidrun(){

//用一个handler更新SeekBar

mPercentHandler.post(updatesb);

}

};

Runnableupdatesb=newRunnable(){

publicvoidrun(){

intposition=mMediaPlayer.getCurrentPosition();

intmMax=mMediaPlayer.getDuration();

ints

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2