安卓音乐播放器开发含源代码.docx
- 文档编号:29165019
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:73
- 大小:325.44KB
安卓音乐播放器开发含源代码.docx
《安卓音乐播放器开发含源代码.docx》由会员分享,可在线阅读,更多相关《安卓音乐播放器开发含源代码.docx(73页珍藏版)》请在冰豆网上搜索。
安卓音乐播放器开发含源代码
基于android平台的音乐播放器开发
实验报告
Forpersonaluseonlyinstudyandresearch;notforcommercialuse
学生姓名:
温从林
学号:
0215
班级:
计自1201
第一章引言
1.1项目背景
当今社会的生活节奏越来越快,人们对手机的要求也越来越高,由于手机市场发展迅速,使得手机操作系统也出现了不同各类,现在的市场上主要有三个手机操作系统,Windowsmobile,symbian,以及谷歌的Android操作系统,其中占有开放源代码优势的Android系统有最大的发展前景。
那么能否在手机上拥有自己编写的个性音乐播放器呢?
能的,谷歌Android系统就能做到。
本文的音乐播放器就是基于谷歌Android手机平台的播放器。
Android:
是谷歌于2007年公布的开放式源代码手机系统,它的开放性就优于其它封闭式的手机系统,因此,任何人都可能根据自己的喜好将手机系统中的所有功能重新编写。
这使得越来越多的人关注这个操作系统。
本次作品音乐播放器就是基于Android平台的。
1.2编写目的
现今社会生活紧张,而欣赏音乐是其中最好的舒缓压力的方式之一,本项目的目的是开发一个可以播放主流音乐文件格式的播放器,本设计实现的主要功能是播放Mp3,Wav多种格式的音乐文件,并且能够控制播放,暂停,停止,播放列等基本播放控制功能,界面简明,操作简单。
本项目是一款基于Android手机平台的音乐播放器,使Android手机拥有个性的多媒体播放器,使手机显得更生动灵活化,与人们更为接近,让手机主人随时随地处于音乐视频的旋律之中。
使人们的生活更加多样化。
也使设计者更加熟练Android的技术和其它在市场上的特点。
1.3开发环境
Eclipse、AndroidSDK3.2.0
第二章系统需求分析
2.1功能需求(用例图分析)
根据项目的目标,我们可获得项目系统的基本需求,以下从不同角度来描述系统的需求,并且使用用例图来描述,系统的功能需求,我们分成四部分来概括,即播放器的基本控制需要,播放列表管理需求,播放器友好性需求和播放器扩展卡需求。
以下分别描述:
2.1.1播放器的用例图
假设安装了音乐播放器的用户是系统的主要设计对象,其拥有以下操作,启动软件、播放音乐、暂停播放、停止播放、退出软件,其用例图如下
图2.1播放器基本用例图
用例名称:
启动软件
参与者:
用户
目标:
使得用户启动软件并加载手机和sd卡上的音频文件到播放列表
前置条件:
无
基本事件流:
1.用户启动软件
2.播放器将播放列表中的当前的歌曲
用例名称:
播放
参与者:
用户
目标:
使得用户可以播放在播放列表中选中的歌曲
前置条件:
播放器正在运行
基本事件流:
1.用户单击“播放”按钮
2.播放器将播放列表中的当前的歌曲
用例名称:
暂停
参与者:
用户
目标:
使得用户可以暂停正在播放的歌曲
前置条件:
歌曲正在播放且未停止和暂停
基本事件流:
1.用户单击“暂停”按钮
2.播放器将暂停当前的歌曲
用例名称:
停止
参与者:
用户
目标:
使得用户可以停止正在播放的歌曲
前置条件:
歌曲正在播放或暂停
基本事件流:
1.用户单击“停止”按钮
2.播放器将停止当前播放的歌曲
用例名称:
退出
参与者:
用户
目标:
使得用户退出或者后台播放音乐
前置条件:
程序在运行
基本事件流:
1.用户按返回键
2.播放器退出或者进入后台播放
第三章概要设计
3.1软件播放流程图
Step1.启动软件后,软件自动检索手机和sd卡的音频文件,并组织显示成列表.
Step2.点击列表的歌曲名字。
Step3.播放音乐。
Step4.点击暂停,音乐暂停
Step5.点击播放转到step3
Step6.点击停止停止播放音乐
Step7.点击退出。
图3.1音乐播放器流程图
第四章界面展示
4.1软件部署
系统编译生成apk文件,将apk文件拷到手机或者sd卡中,直接打开即可安装。
4.2启动软件
打开软件后的界面
4.3歌曲列表界面
歌曲列表界面
4.4播放界面
4.5收藏界面
4.6在线搜索音乐界面
第5章结论
(1)通过本次开发解决了诸如SD卡音乐文件搜索并显示、联网搜索歌曲等难题,对安卓的开发有了更深入的认识。
(2)通过对Android手机平台的音乐播放器软件的开发,使我对Android音乐播放器系统的整体设计有一个深入的了解,对整个流程也会有一个清晰的认识。
开发Android音乐播放器,要抓住开发的核心部分,音乐播放器大体由播放主界面、播放列表、菜单、播放设置、文件浏览、歌曲搜索六大核心组成。
(3)本次程序设计,对播放器的系统结构框架做了精心的构思与设计,采用主要开发工具是Eclips4.0+Java语言的支持,AndroidDevelopmentTool的插件,和AndroidSDK2.1版本的全面结合,才使整个音乐播放器系统得以实现。
第五章部分源代码
以下给出功能实现代码,布局,风格等代码量过大,放在压缩文件中
MainActivity.java:
package;
import;
import;
import;
import;
import;
import;
import;
import;
import;
import;
publicclassMainActivityextendsActionBarActivity{
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(;
Threadthread=newThread(){
publicvoidrun(){
try{
sleep(2500);
}catch(InterruptedExceptione){
e.printStackTrace();
}
finish();
Intentintent=newIntent(MainActivity.this,MusicActivity.class);
startActivity(intent);
}
};
thread.start();
}
@Override
publicbooleanonCreateOptionsMenu(Menumenu){
//Inflatethemenu;thisaddsitemstotheactionbarifitispresent.
getMenuInflater().inflate(,menu);
returntrue;
}
@Override
publicbooleanonOptionsItemSelected(MenuItemitem){
//Handleactionbaritemclickshere.Theactionbarwill
//automaticallyhandleclicksontheHome/Upbutton,solong
//asyouspecifyaparentactivityinAndroidManifest.xml.
intid=item.getItemId();
if(id=={
returntrue;
}
returnsuper.onOptionsItemSelected(item);
}
/**
*Aplaceholderfragmentcontainingasimpleview.
*/
publicstaticclassPlaceholderFragmentextendsFragment{
publicPlaceholderFragment(){
}
@Override
publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,
BundlesavedInstanceState){
ViewrootView=inflater.inflate(,container,
false);
returnrootView;
}
}
}
BandanActivity.java
package;
import;
import;
import;
import;
import;
import;
import;
import;
import;
import;
import;
import;
import;
publicclassBangdanActivityextendsActivity{
privateListViewlistview;
privateStringmusicpath;
privateint_ids[];//?
?
?
?
?
?
?
id?
?
privateString_titles[];//?
?
?
?
?
?
?
?
?
?
?
privateString_artists[];//?
?
?
?
?
?
?
?
?
?
?
?
privateString[]_path;//?
?
?
?
?
?
?
?
?
?
?
privateString[]_times;//?
?
?
?
?
?
?
?
?
?
privateString[]_album;//?
?
?
?
?
?
?
?
?
privateint_sizes[];//?
?
?
?
?
?
?
?
?
?
?
privateString[]_displayname;//?
?
?
?
?
?
?
?
?
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(;
listview=(ListView)findViewById(;
listview.setOnItemClickListener(newMusicListOnClickListener());
ShowMp3List();
}
/**
*?
?
MP3?
?
?
?
_ids?
?
?
?
?
?
?
?
?
?
_ID,?
?
?
?
?
?
?
?
?
?
?
?
?
?
_titles?
?
?
?
?
?
?
?
?
?
?
?
?
?
*?
_path?
?
?
?
?
?
?
?
?
(?
?
?
?
?
?
?
?
)*/
privatevoidShowMp3List(){
//?
?
?
?
?
?
?
?
?
?
?
Cursorcursor=this.getContentResolver().query(
newString[]{
//?
?
?
?
?
0?
?
//?
?
?
?
1
//?
?
?
2
//id,3
//?
?
?
?
4
//?
?
5
//?
?
?
?
ID,6
//?
?
7
},null,null,;//?
?
8
/**?
?
?
?
?
?
?
?
**/
cursor.moveToFirst();
/**?
?
?
?
?
?
?
?
?
?
?
?
**/
_ids=newint[cursor.getCount()];
_titles=newString[cursor.getCount()];
_artists=newString[cursor.getCount()];
_path=newString[cursor.getCount()];
_album=newString[cursor.getCount()];
_times=newString[cursor.getCount()];
_displayname=newString[cursor.getCount()];
_sizes=newint[cursor.getCount()];
/**?
?
?
?
?
?
?
?
?
?
_path[i]=c.geString,?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
/mnt/sdcard/[?
?
?
?
?
/]?
?
?
?
?
?
?
?
?
?
?
?
?
?
/sdcard/[?
?
?
?
?
]?
?
?
?
?
*/
for(inti=0;i _ids[i]=cursor.getInt(3); _titles[i]=cursor.getString(0); _artists[i]=cursor.getString (2); _path[i]=cursor.getString(5).substring(4); /*****? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ******/ _album[i]=cursor.getString(7); _times[i]=toTime(cursor.getInt (1)); _sizes[i]=cursor.getInt(8); _displayname[i]=cursor.getString(4); cursor.moveToNext(); } listview.setAdapter(newMusicListAdapter(this,cursor)); } /**? ? ? ? ? */ publicStringtoTime(inttime){ time/=1000; intminute=time/60; intsecond=time%60; minute%=60; /**? ? ? ? ? string? format? ? ? ? ? ? ? ? ? ? ? ? **/ returnString.format("%02d: %02d",minute,second); } /**? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? */ publicclassMusicListOnClickListenerimplementsOnItemClickListener{ @Override publicvoidonItemClick(AdapterView >arg0,Viewview,intposition, longid){ musicpath="/mnt"+_path[position]; playMusic(musicpath); /*putExtraMusic(position);*/ Intentintent=newIntent(BangdanActivity.this,PlayMusicActivity.class); startActivity(intent); finish(); } } publicvoidplayMusic(Stringmusicpath){ try{ MediaPlayermp=newMediaPlayer(); mp.reset(); mp.setDataSource(musicpath); mp.prepare(); mp.start(); }catch(Exceptione){ Toast.makeText(getApplicationContext(),"? ? ? ? ? ? ? ",Toast.LENGTH_SHORT).show(); } } publicvoidputExtraMusic(intposition){ Intentintent=newIntent(BangdanActivity.this,PlayMusicActivity.class); /*intent.putExtra("_ids",_ids); intent.putExtra("_path",_path); intent.putExtra("_titles",_titles); intent.putExtra("_artists",_artists); intent.putExtra("position",position); startActivity(intent); finish();*/ intent=newIntent(); Bundlebundle=newBundle(); bundle.putInt("position",25); intent.putExtras(bundle); intent.setClass(BangdanActivity.this,PlayMusicActivity.class); startActivity(intent); finish(); } @Override protectedvoidonStop(){ super.onStop(); } privatelongexitTime=0; publicbooleanonKeyDown(intkeyCode,KeyEventevent){ if(keyCode==KeyEvent.KEYCODE_BACK&&event.getAction()==KeyEvent.ACTION_DOWN){ if((System.currentTimeMillis()-exitTime)>2000){ Toast.makeText(getApplicationContext(),"? ? ? ? ? ? ? ? ",Toast.LENGTH_SHORT).show(); exitTime=System.currentTimeMillis(); } else{ finish(); System.exit(0); } returntrue; } returnsuper.onKeyDown(keyCode,event); } } CollectionActivity.java package; import; import; import; import; import; import; import; import; import; publicclassCollectionActivityextendsExpandableListActivity{ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(; //一级条目 List Map group1.put("group","【歌手】"); Map group2.put("group","【专辑】"); groups.add(group1); groups.add(group2); //二组条目 List //第一组二级科目数据 List Map item1.put("child","林俊杰"); Map item2.put("child","周杰伦"); child1.add(item1); child1.add(item2); //第二组二级科目数据 List Map item3.put("child","<<因你而在>>"); Map item4.put("child","<<流行主教>>"); Map item5.put("child","<<第二天堂>>"); child2.add(item3); child2.add(item4); child2.add(item5); childs.add(child1); childs.add(child2); //SimpleExpandableListAdapter构造函数参数 //1.content //2.一级条目数据 //3.一级条目布局文件 //4.一级条目Key //5.一级条目显示信息控件id //6.二级条目数据 //7.二级条目布局文件 //8.二级条目Key //9.二级条目显示信息控件id S>>childs=newArrayList
>>();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 音乐 播放 开发 源代码