安卓音乐播放器.docx

上传人:b****3 文档编号:27341886 上传时间:2023-06-29 格式:DOCX 页数:17 大小:59.19KB
下载 相关 举报
安卓音乐播放器.docx_第1页
第1页 / 共17页
安卓音乐播放器.docx_第2页
第2页 / 共17页
安卓音乐播放器.docx_第3页
第3页 / 共17页
安卓音乐播放器.docx_第4页
第4页 / 共17页
安卓音乐播放器.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

安卓音乐播放器.docx

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

安卓音乐播放器.docx

安卓音乐播放器

《物联网移动应用开发》之邯郸勺丸创作

创作时间:

二零二一年六月三十日

课程设计

题目音乐播放器设计

班级物联网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;

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

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版本的全面结合,才使整个音乐播放器系统得以实现.

课程设计教师评语及成果

指导教师:

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

当前位置:首页 > 幼儿教育 > 育儿理论经验

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1