安卓音乐播放器开发含源代码.docx

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

安卓音乐播放器开发含源代码.docx

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

安卓音乐播放器开发含源代码.docx

安卓音乐播放器开发含源代码

基于android平台的音乐播放器开发

实验报告

学生姓名:

温从林

学号:

班级:

计自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播放器基本用例图

2.1.2用例分析

用例名称:

启动软件

参与者:

用户

目标:

使得用户启动软件并加载手机和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(R.layout.fragment_main);

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(R.menu.main,menu);

returntrue;

}

@Override

publicbooleanonOptionsItemSelected(MenuItemitem){

//Handleactionbaritemclickshere.Theactionbarwill

//automaticallyhandleclicksontheHome/Upbutton,solong

//asyouspecifyaparentactivityinAndroidManifest.xml.

intid=item.getItemId();

if(id==R.id.action_settings){

returntrue;

}

returnsuper.onOptionsItemSelected(item);

}

/**

*Aplaceholderfragmentcontainingasimpleview.

*/

publicstaticclassPlaceholderFragmentextendsFragment{

publicPlaceholderFragment(){

}

@Override

publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,

BundlesavedInstanceState){

ViewrootView=inflater.inflate(R.layout.fragment_main,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(R.layout.bangdanmusic_list);

listview=(ListView)findViewById(R.id.bangdan_music_list);

listview.setOnItemClickListener(newMusicListOnClickListener());

ShowMp3List();

}

/**

*显示MP3信息,其中_ids保存了所有音乐文件的_ID,用来确定到底要播放哪一首歌曲,_titles存放音乐名,用来显示在播放界面,

*而_path存放音乐文件的路径(删除文件时会用到)*/

privatevoidShowMp3List(){

//用游标查找媒体详细信息

Cursorcursor=this.getContentResolver().query(

EXTERNAL_CONTENT_URI,

newString[]{

TITLE,//标题,游标从0读取

DURATION,//持续时间,1

ARTIST,//艺术家,2

_ID,//id,3

DISPLAY_NAME,//显示名称,4

DATA,//数据,5

ALBUM_ID,//专辑名称ID,6

ALBUM,//专辑,7

SIZE},null,nullARTIST);//大小,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()];

到的内容格式为/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

publicclassCollectionActivityextendsExpandableListActivity{

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

//一级条目

List>groups=newArrayList>();

Mapgroup1=newHashMap();

group1.put("group","【歌手】");

Mapgroup2=newHashMap();

group2.put("group","【专辑】");

groups.add(group1);

groups.add(group2);

//二组条目

List>>childs=newArrayList>>();

//第一组二级科目数据

List>child1=newArrayList>();

Mapitem1=newHashMap();

item1.put("child","林俊杰");

Mapitem2=newHashMap();

item2.put("child","周杰伦");

child1.add(item1);

child1.add(item2);

//第二组二级科目数据

List>child2=newArrayList>();

Mapitem3=newHashMap();

item3.put("child","<<因你而在>>");

Mapitem4=newHashMap();

item4.put("child","<<流行主教>>");

Mapitem5=newHashMap();

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

setListAdapter(adapter);

}

privatelongexitTime=0;

publicbooleanonKeyDown(intkeyCode,KeyEventevent){

if(keyCode==KeyEvent.KEYCODE_BACK&&even

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

当前位置:首页 > 医药卫生 > 基础医学

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

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