admin管理员组

文章数量:1535041

2024年5月14日发(作者:)

android-大作业-音乐播放器

软件技术系列课程

Android大作业

( 2014 / 2015 学年 第 一 学期)

题目: 音乐播放器的分析与设计

学 生 姓 名 单珺瑜

班 级 学 号 B12041305

指 导 教 师 张怡婷 易磊 许鹏

指 导 单 位 南京邮电大学计算机学院

专 业 软件工程(服务外包)

科技

日 期

一、课题内容和要求

音乐播放器,作为移动设备基础配备软件之一,主要功能包括从SDCard中

读取音乐、显示播放音乐列表、播放音乐、显示音乐歌词、实现上一首、下一

首、暂停、选择播放形式等功能。本论文的音乐播放器采用了Android开源系

统技术,利用Java语言和Eclipse编辑工具对播放器进行编写。同时给出了详

细的系统设计过程、主要界面设计及主要功能运行流程图

二、需求分析

本课题基于Android手机平台上开发的音乐播放器主要设计了四个界面,

包括:欢迎界面,主界面,播放界面和关于界面。每个界面的主要功能为:

欢迎界面为显示App的logo;

主界面利用ListView显示读取SDCard后的App中的全部歌曲列表,通

过滑动屏幕并选择可以实现与我的收藏界面、关于界面的切换,通过点击具体

歌曲可以实现与播放界面的切换;

我的收藏界面利用ListView显示用户收藏的歌曲列表,通过滑动屏幕并

选择可以实现与主界面、关于界面的切换,通过点击具体歌曲可以实现与播放

界面的切换。

播放界面用以显示正在播放的歌曲的歌曲名、歌手、歌词等主要信息,

并设置按钮实现前一曲、后一曲、播放暂停等功能,通过播放形式按钮可以选

择单曲循环、随机播放或者是顺序播放,除此之外,界面下方利用Android自

带seekbar设置的进度条可以根据用户需要调节播放进度;

关于界面用以显示App的主要功能等信息。

三、软件设计

(一)、系统主要功能模块包括:

1、欢迎界面:初始化Intent以实现欢迎界面开始1.5秒之后进入歌单列表

1

界面。

2、歌单列表:

a、歌曲:利用ListView类显示歌曲列表,点击歌曲名称即选定歌曲

启动音乐播放器,播放选中的歌曲

b、菜单:点击关于即可跳转至关于界面,点击我的收藏即可跳转至

我的收藏界面

3、我的收藏界面:

a、歌曲:利用ListView类显示歌曲列表,点击歌曲名称即选定歌曲

启动音乐播放器,播放选中的歌曲

b、菜单:点击关于即可跳转至关于界面,点击歌曲列表即可跳转至

主界面

4、播放界面:

a、播放:选择音乐后,点击播放按钮启动音乐播放器,即当

MSG=MEDIA_PLAY时,播放所选中的歌曲,执行playMusic;

b、暂停:点击暂停键,即当MSG=MEDIA_PAUSE时,停止正在播

放的歌曲,执行pauseMusic;

c、上一曲:点击上一曲,即当MSG=MEDIA_PREVIOUS时,停止

正在播放的歌曲,播放播放列表中上一 首歌曲;

d、下一曲:点击下一曲,即当MSG=MEDIA_NEXT时,停止正在

播放的歌曲,播放播放列表中下一首歌曲;

e、播放模式:点击播放模式,利用MusicCompleteListener类可以依

次改变播放模式至随机播放、列表循环或者单曲循环,进而执行randomRepeat、

allRepeat或者singleRepeat;

(1)随机播放:利用系统随机生成一个0—1之间的随机数乘当

前position,再用int取整,即为下一首歌曲的position

(2)列表循环:利用position变量,当position++!=NULL时,

position自增,否则position=0

(3)单曲循环:position不发生任何变化

2

f、进度条:利用Android自带的seekbar设置进度条,用户可以根据

进度条来自主控制歌曲播放进度,随意跳转;

g、歌词显示:利用LyricView类完成歌词随着时间滚动显示的功能。

5、关于界面:利用LinearLayout的线性布局及若干个TextView以显示App

主要功能等信息

(二)、App设计简要流程图如下:

Smart Music

欢迎界面

歌单列表

我的收藏

播放控制

3

随机播放

列表循环

单曲循环

四、软件实现

(一)、开发环境的搭建与配置

1. 下载JDK

JDK即Java Development Kit(Java开发工具包),包括JAVA运行环境,

基础类库和JAVA工具,是JAVA运行的基础。

2. 下载Eclipse

Eclipse是开发JAVA程序的软件工具。

3. 下载Android SDK

SDK即Software Development Kit(软件开发工具包)。Android SDK 指

的是Android专属的软件开发工具包。

4. 下载ADT

ADT,即Android Development Tools(Android开发工具),是在eclipse

中开发android应用程序的插件。

5. 安装JDK

运行下载好的,按提示一步步走。

6. 测试是否安装成功

安装完成之后,可以用下述方法检查JDK是否安装成功:

打开cmd窗口,输入java -version 。

7. 添加环境变量

操作步骤:

计算机->属性->高级系统设置->环境变量->系统变量->Path->编辑

添加JDK的bin目录的路径。

8. 安装Android SDK

安装Platform

仅仅SDK Tools是不够的,我们至少还需要一个Android平台和最新的

SDK 平台工具。

11.添加环境变量

操作步骤:

4

计算机->属性->高级系统设置->环境变量->系统变量->新建

变量名:ANDROID_SDK_HOME

添加SDK目录的路径。

12. 安装Eclipse,选择工作空间。

13. 配置ADT

(二)、负责的主要功能和代码

1、欢迎界面

欢迎界面为显示App的logo,点开App图标后出现,1.5秒后自动转入列表界

public class WelcomeActivity extends

Activity //

定义

WelcomeActivity

{

@Override

protected void onCreate(Bundle

savedInstanceState) //Activity

生命周期

{

te(savedInstanceState);

setContentView(ty_welcome);

new Handler().postDelayed(new Runnable() {

@Override

5

public void run() {

Intent intent = new

Intent(,

ss);//

初始化

startActivity(intent);

();

}

},1500);//

欢迎界面开始后

1.5

秒后自动进入列表界

}

}

2、关于界面

关于界面用于显示APP的功能、开发者、版本号等主要信息,主要代码如下:

线性布局

xmlns:android="://d/a

pk/res/android"

android:orientation="vertical"//

垂直

布局

android:layout_width="match_parent

"//

设置文本宽度

android:layout_height="match_paren

6

t">//

设置文本高度

android:layout_width="match_parent

"//

设置文本宽度

android:layout_height="wrap_content

"//

设置文本高度

android:orientation="vertical"//

垂直

布局

android:gravity="center"//

居中

android:background="@drawable/act

ionbar_background">

android:layout_width="wrap_content

"//

设置文本宽度

android:layout_height="wrap_content

"//

设置文本高度

android:textColor="#fff"//

设置文本颜

android:text="Welcome to use"

android:layout_marginTop="30dp"/>

//

设置文本距离顶部距离

7

android:layout_width="wrap_content

"//

设置文本宽度

android:layout_height="wrap_content

"//

设置文本高度

android:text="SmartMusic"

android:textColor="#fff"//

设置文本颜

android:textSize="30sp"//

设置文本大

android:layout_marginBottom="30dp

"/>//

设置文本距离底部距离

android:layout_width="match_parent

"//

设置文本宽度

android:layout_height="match_paren

t"//

设置文本高度

android:orientation="vertical"//

垂直

布局

android:gravity="center">

8

android:text="Descriptions"

android:layout_width="wrap_content

"//

设置文本宽度

android:layout_height="wrap_content

"//

设置文本高度

android:textSize="24sp"//

设置文本大

android:textColor="#000"//

设置文本

颜色

android:layout_gravity="center_horiz

ontal"/>

"//

设置文本宽度

android:layout_height="wrap_content

"//

设置文本高度

android:layout_margin="20dp"//

设置

文本大小

android:text="@string/description"/>

android:layout_width="wrap_content

9

android:layout_width="match_parent

"//

设置文本宽度

android:layout_height="wrap_content

"//

设置文本高度

android:layout_gravity="center_horiz

ontal"

android:layout_margin="10dp"//

设置

文本大小

android:text="Members"

android:textSize="24sp"/>//

设置文本

大小

android:layout_width="wrap_content

"//

设置文本宽度

android:layout_height="wrap_content

"//

设置文本高度

android:text="

单珺瑜、王鑫玉、潘磊

"/>

android:layout_width="wrap_content

"//

设置文本宽度

android:layout_height="wrap_content

10

"//

设置文本高度

android:text="Email Me"

android:textSize="24sp"//

设置文本大

android:layout_marginTop="20dp"/>

//

设置文本距离顶部距离

android:layout_width="wrap_content

"//

设置文本宽度

android:layout_height="wrap_content

"//

设置文本高度

android:text="panlei106@gmail"

置文本距离顶部距离

android:autoLink="email"/>

android:layout_marginTop="10dp"

android:layout_width="wrap_content

"//

设置文本宽度

android:layout_height="wrap_content

"//

设置文本高度

android:text="

版本号:

1.0"

11

android:layout_marginTop="5dp"//

android:textSize="16sp"//

设置文本大

android:textColor="#ffba1414"/>//

置文本颜色

3、MusicService功能

MusicService用于实现音乐的后台播放功能

public class MusicService//

定义一个

MusicService

extends Service {

private MediaPlayer mediaPlayer;

private int position;

private List musicInfoList;

private MusicInfo musicInfo;

private int repeatState;

12

private SharedPreferences sharedPreferences;

@Override

public void onCreate()//Service

的生命周期

{

te();

mediaPlayer = new MediaPlayer();//

初始化

ompletionListener(new

MusicPlayCompleteListener());

sharedPreferences =

getSharedPreferences(_DAT

E,MODE_PRIVATE);

//MusicInfo musicInfo =

(position);

//playMusic(musicInfo);

//xt(this,"service

start",_SHORT).show();

}

13

@Override

public IBinder onBind(Intent intent) {

return null;

}

@Override

public int onStartCommand(Intent intent, int

flags, int startId)//Service

生命周期

{

repeatState =

("repeatState",AppC

eat);//

定义歌曲列表

position = Extra("position",0);//

义位置变量

editor=

();

("lastPosition",position);

editormit();

Log.i("repeatState---->",repeatState+"");

musicInfoList =

(List)rSequenceArrayListExtra("

14

musicInfoList");

musicInfo = (position);

if (musicInfo != null){

int MSG = Extra("MSG",0);

Log.i("MSG--->",MSG+"");

switch (MSG){

case _PLAY:

playMusic(musicInfo);//

播放音乐

break;

case _PAUSE:

pauseMusic();//

停止音乐

break;

case _NEXT:

playMusic(musicInfo);

pauseMusic();//

播放下一首音乐

break;

case _SEEKTO:

int progress =

Extra("progress",0);

(progress);

continueMusic();//

根据用户要求在进度条中寻

找用户要求进度,再进行播放

15

break;

case _CONTINUE:

continueMusic();//

继续播放音乐

break;

}

}

//playMusic(musicInfo);

Log.i("posituon--->",position+"");

Log.i("musicInfoList--->",ng()

);

return START_NOT_STICKY;

}

@Override

public void onDestroy()//Service

的生命周期

{

roy();

e();

}

public void playMusic(MusicInfo musicInfo) {

();

16

try {

aSource(i

cPath());

e();

();

} catch (Exception e) {

tackTrace();

}

}

public void pauseMusic(){

();

}//

从暂停位置停止播放音乐

public void stopMusic(){

();

}//

从暂停的音乐停止播放音乐

public void

continueMusic(){();}

17

public class MusicPlayCompleteListener

implements

letionListener{

@Override

public void onCompletion(MediaPlayer mp) {

switch (repeatState) {

case eat://

实现列表循环播

if (position == () - 1) {

position = 0;

} else {

position += 1;

}

break;

case Repeat://

实现随机

播放

position =

(int)((()-1)*());

break;

case Repeat://

实现单曲循

环播放

break;

18

}

musicInfo = (position);

playMusic(musicInfo);

Intent sendIntent = new

Intent(_VIEW);//

发送

广播

ra("position",position);

editor=

();

("lastPosition",position);

editormit();

sendBroadcast(sendIntent);

//Log.i("broadcast---->","

发送成功

");

}

}

}

五、软件测试

将Android手机用USB与电脑相连,打开Eclipse在项目上右键 --> 运行方式

19

-- > android application 即可以直接运行进行测试。

1、进入界面的测试:

点击App后直接跳转至进入界面,1.5秒后自动跳转至歌单列表界面

2、歌单界面的测试

a、歌单界面用以显示歌曲列表及其歌曲,界面下方显示上次播放的歌曲信

息。

20

b、屏幕左上方为菜单,通过滑动屏幕即可展开菜单列表,可以实现与关于界面

的转换

21

3、我的收藏界面

我的收藏界面用于显示用户收藏的歌曲列表

22

4、播放界面的测试

界面左上角是返回键,点击可以跳转至歌单列表界面;

23

界面上方用以显示歌曲的名称,姓名;

界面中间部分用以显示歌曲的歌词,并随着歌曲进度而滑动,正在演唱的

歌词变红;

歌词下方是进度条,两侧显示歌曲已经播放时间和歌曲总长,用户可以随

意拉动进度条以调整歌曲进度,当进度条到达最后时,自动跳转至下一首;

界面最下方是功能键,依次为:上一首、暂停(播放)、下一首和播放形式,点

击上一首按钮即可跳转至上一首歌曲界面,点击暂停按钮即可歌曲暂停且暂停

按钮变成播放按钮,点击下一首按钮即可跳转至下一首歌曲界面,点击播放形

式按钮可依次改变至随机播放、列表循环和单曲循环,按钮也会依次改变。

5、关于界面的测试

24

关于界面用于显示APP的功能、开发者、版本号等主要信息

六、软件总结

25

本次实验旨在利用JAVA编程,实现音乐播放器的基本功能。这次的软件设

计题目,是非常贴近我们生活实际内容,这一类的应用软件大大的娱乐和方便了

我们的课余生活,但是亲自动手设计一个音乐播放器对我们来说却有一定的难

度。随着我们对于这方面的学习,从最初的需求分析、搜集资料,到中期的代

码编写和检测完善,再到后面的软件演示和文档编写,我们真正学到了不少使

用的技术。

本次实验我们小组三人明确分工,一人专门攻克核心代码,一人负责任务

量较大、难度较轻的次核心代码,一人负责各种UI设计以及较轻松的代码;同

时三人又通力合作,实验初期一起讨论课程的需求分析、共同制定概要设计、

制定分工计划,实验中期针对每个人出现的问题通过交流沟通,找到解决方案,

试验后期共同测试分析,集思广益不断检测完善。小组分工协作,互帮互助,

在完成个人任务的同时通过交流对另外成员的任务也有大致了解,使得每个人

都在有限时间内收获三倍的成长。

对于我个人而言,通过本次实验使得我对于JAVA编程语言的掌握有了实质

性的进步,从基本不了解到基本熟悉的跨越。本次实验区别于以往上机实验的

最主要一点是,本次实验是小组协作共同完成一个完整的App的制作,所以,

除了简单的编程语言的掌握外,我了解到一个完整App的制作流程,了解到团

队协作的重要性,以及如何在一个team扮演好自己的角色同时尽可能的帮助其

他成员。

遗憾的是,由于时间有限、对于JAVA语言掌握有限、对软件功能认识不足

等原因,导致我们一些好的灵感和创意在软件上没有得到实现,如:联网下载

歌曲等,但通过此次实验让我们提高了独立思考的能力,提高了实践动手能力,

增强了团队凝聚力,增强了与人合作的能力等,受益匪浅!

最后还有感谢三位指导老师对我们的悉心指导,感谢小组成员通力协作,

感谢中兴公司与学校给予的机会,虽然最终结果与最初预想有些许差距,但也

鼓励我继续不断进步,争取做出更优秀的作品。

26

本文标签: 播放界面歌曲音乐