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

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

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

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

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

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

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

实验报告

学生姓名:

温从林

学号:

班级:

计自1201

第一章引言

1.1项目背景

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

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

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

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

Android:

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

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

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

1.2编写目的

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

本项目是一款基于Android手机平台的音乐播放器,使Android手机拥有个性的

多媒体播放器,使手机显得更生动灵活化,与人们更为接近,让手机主人随时随地处于音乐视频的旋律之中。

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

也使设计者更加熟练Android的

技术和其它在市场上的特点。

1.3开发环境

Eclipse、AndroidSDK320

第二章系统需求分析

2.1功能需求(用例图分析)

根据项目的目标,我们可获得项目系统的基本需求,以下从不同角度来描述系统的需求,并且使用用例图来描述,系统的功能需求,我们分成四部分来概括,即播放器的基本控制需要,播放列表管理需求,播放器友好性需求和播放器扩展卡需求。

以下分别描述:

2.1.1播放器的用例图

假设安装了音乐播放器的用户是系统的主要设计对象,其拥有以下操作,

启动软件、播放音乐、暂停播放、停止播放、退出软件,其用例图如下

图2.1播放器基本用例图

2.1.2用例分析

前置条件:

基本事件流:

1.用户启动软件

2.播放器将播放列表中的当前的歌曲

用例名称:

播放

参与者:

用户

目标:

使得用户可以播放在播放列表中选中的歌曲

前置条件:

播放器正在运行

基本事件流:

1.用户单击“播放”按钮

2.播放器将播放列表中的当前的歌曲

用例名称:

暂停

参与者:

用户

目标:

使得用户可以暂停正在播放的歌曲

前置条件:

歌曲正在播放且未停止和暂停

基本事件流:

1.用户单击“暂停”按钮

2.播放器将暂停当前的歌曲

用例名称:

停止

参与者:

用户

目标:

使得用户可以停止正在播放的歌曲

前置条件:

歌曲正在播放或暂停

基本事件流:

1.用户单击“停止”按钮

2.播放器将停止当前播放的歌曲

用例名称:

退出

参与者:

用户

目标:

使得用户退出或者后台播放音乐

前置条件:

程序在运行

基本事件流:

1.用户按返回键

2.播放器退出或者进入后台播放

第三章概要设计

3.1软件播放流程图

Stepl.启动软件后,软件自动检索手机和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在线搜索音乐界面

第五章结论

(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(BundlesavedlnstanceState){

super.onCreate(savedlnstanceState);

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.

getMenulnflater().inflate(R.menu.main,menu);

returntrue;

}

@Override

publicbooleanonOptionsltemSelected(Menultemitem){

//Handleactionbaritemclickshere.Theactionbarwill//automaticallyhandleclicksontheHome/Upbutton,solong

//asyouspecifyaparentactivityinAndroidManifest.xml.

intid=item.getltemld();

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

returntrue;

}

returnsuper.onOptionsltemSelected(item);

}

*Aplaceholderfragmentcontainingasimpleview.

*/

publicstaticclassPlaceholderFragmentextendsFragment{

publicPlaceholderFragment。

{

}

@Override

publicViewonCreateView(Layoutlnflaterinflater,ViewGroupcontainer,

BundlesavedlnstanceState){

container,

ViewrootView=inflater.inflate(R.layout.fragment_main

false);

returnrootView;

}

}

}

BandanActivity.java

package;

import

import

import

import

import

import

import

import

import

import

import

import

publicclassBangdanActivity

import

private

ListView

listview;

private

String

musicpath;

private

int_ids[];

//

存放音乐文件的id数组

private

String

_titles[];

//

存放音乐文件的标题数组

private

String

_artists[];

//

存放音乐艺术家的标题数组

private

String[]

_path;

//

存放音乐路径的标题数组

private

String[]

_times;

//

存放总时间的标题数组

private

String[]

_album;

//

存放专辑的标题数组

private

int_sizes[];

//

存放文件大小的标题数组

private

String[]

_displayname

;//存放名称的标题数组

@Override

protected

void

onCreate(BundlesavedInstanceState){

extendsActivity{

super.onCreate(savedInstanceState);

setContentView(R.1ayout.bangdanmusic_list);

);

listview=(ListView)findViewByld(R.id.bangdan_music_list

listview.setOnltemClickListener(newMusicListOnClickListener());

ShowMp3List();

}

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

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

privatevoidShowMp3List(){

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

 

_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

publicvoidonltemClick(AdapterView

>argO,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){

无法播放此文件

new

Toast.makeText(getApplicationContext(),Toast.LENGTH_SHOR)Tshow();

}

}

publicvoidputExtraMusic(intposition){

Intentintent

Intent(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.putlnt("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_SHOR)Tshow();

exitTime=System.currentTimeMillis();

else{

finish();

System.exit(0);

}

returntrue;

}

returnsuper.onKeyDown(keyCode,event);

}

}

CollectionActivity.java

publicclassCollectionActivityextendsExpandableListActivity{

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

//一级条目

ListvMapvString,String»groups二new

ArrayListvMapvString,String>>();

MapvString,String〉group1=newHashMapvString,String>();

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

MapvString,String〉group2二newHashMapvString,String>();

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

groups.add(groupl);

groups.add(group2);

//二组条目

List>>childs二new

ArrayList>>();

//第一组二级科目数据

ListvMapvString,String>>

ArrayListvMapvString,String>>();

MapvString,String〉item1=newHashMapvString,String>();

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

MapvString,String〉item2二newHashMapvString,String>();

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

childl.add(iteml);

child1.add(item2);

//第二组二级科目数据

ListvMapvString,String>>

ArrayListvMapvString,String>>();

MapvString,String〉item3二newHashMapvString,String>();

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

MapvString,String〉item4二newHashMapvString,String>();

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

MapvString,String〉item5二newHashMapvString,String>();

item5.put("child","vv第二天堂>>");

child2.add(item3);

child2.add(item4);

child2.add(item5);

childl二new

child2二new

childs.add(childl);

构造函数参数

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&&event.getAction()

KeyEvent.ACTION_DOWN){

if((System.currentTimeMillis()-exitTime)>2000){

Toast.makeText(getApplicationContext(),"再按一次退出程

序",Toast.LENGTH_SHORT).show();

exitTime=System.currentTimeMillis();

}

else{finish();

System.exit(O);

}

returntrue;

}

returnsuper.onKeyDown(keyCode,event);

}

*初始化菜单

*/

publicbooleanonMenuKeyDown(intkeyCode,KeyEventevent){if(keyCode==KeyEvent.KEYCODE_MENU&&event.getAction()=

KeyEvent.ACTION_DOWN){

Toast.makeText(getApplicat

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

当前位置:首页 > 农林牧渔 > 农学

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

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