Android音乐播放器.docx

上传人:b****8 文档编号:12671521 上传时间:2023-06-07 格式:DOCX 页数:28 大小:1.84MB
下载 相关 举报
Android音乐播放器.docx_第1页
第1页 / 共28页
Android音乐播放器.docx_第2页
第2页 / 共28页
Android音乐播放器.docx_第3页
第3页 / 共28页
Android音乐播放器.docx_第4页
第4页 / 共28页
Android音乐播放器.docx_第5页
第5页 / 共28页
Android音乐播放器.docx_第6页
第6页 / 共28页
Android音乐播放器.docx_第7页
第7页 / 共28页
Android音乐播放器.docx_第8页
第8页 / 共28页
Android音乐播放器.docx_第9页
第9页 / 共28页
Android音乐播放器.docx_第10页
第10页 / 共28页
Android音乐播放器.docx_第11页
第11页 / 共28页
Android音乐播放器.docx_第12页
第12页 / 共28页
Android音乐播放器.docx_第13页
第13页 / 共28页
Android音乐播放器.docx_第14页
第14页 / 共28页
Android音乐播放器.docx_第15页
第15页 / 共28页
Android音乐播放器.docx_第16页
第16页 / 共28页
Android音乐播放器.docx_第17页
第17页 / 共28页
Android音乐播放器.docx_第18页
第18页 / 共28页
Android音乐播放器.docx_第19页
第19页 / 共28页
Android音乐播放器.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Android音乐播放器.docx

《Android音乐播放器.docx》由会员分享,可在线阅读,更多相关《Android音乐播放器.docx(28页珍藏版)》请在冰点文库上搜索。

Android音乐播放器.docx

Android音乐播放器

基于安卓的音乐播放器开发

摘要

智能手机在现代生活中是不可或缺的一部分,由于智能手机的快速发展,且随着越来越多的人使用智能手机,人们对手机功能的要求也越来越高,当然,娱乐功能必不可少,其中使用频率最高的就是音乐播放功能了。

基于安卓的音乐播放器有在线及本地音乐播放功能,收藏歌单,同时也包括播放、暂停、上一首、下一首、歌词滚动播出等播放控制功能。

本课题介绍了安卓平台以及SQLite数据库的相关用法,并通过AndroidStudio进行安卓程序开发。

【关键词】AndroidSQLite

 

1.绪论

我们每天都在玩手机,听音乐。

这学期我们学习了Java这门强大的语言。

通过Java,我们可以编写出手机应用程序。

不满足于书本上的那点知识,同时对安卓程序开发比较感兴趣,我们小组决定开发出一款手机上的音乐播放器。

虽然我们才学Java,对安卓一无所知,但是我们仍然决定自学安卓,完成本次课程设计。

这样我们一方面可以掌握一些安卓技术,一方面可以加深我们的Java实力,同时也是锻炼我们自学能力的一个的机会。

2.背景

1.1应用背景

手机是人们日常生活中不可或缺的一部分。

在科技发达的今天,大部分人都拥有一部安卓手机。

在手机上播放音乐,方便快捷,随时随地可以享受音乐的美妙。

为此,本小组开发了一款安卓平台音乐播放器,不仅可以搜索本地音乐进行播放,还可以联网搜索音乐,想听什么,就听什么。

1.2技术背景

1.2.1安卓平台JAVA应用程序设计

Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。

主要用JAVA语言来开发Android平台程序。

Android平台由四部分组件构成:

Activity,Service,Broadcast,ContentProvider。

1.2.2SQLite数据库

SQLite是一款轻型的数据库,遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。

它是D.RichardHipp建立的公有领域项目。

由于它占用的资源非常少,所以在嵌入式设备中得到了广泛的应用。

1.2.3Jsoup网络爬虫

Jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。

它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

1.3工具

本项目使用Jsoup抓取虾米音乐API以及在线搜索结果,使用SQLite数据库中存储本地数据,利用Google官方IDEAndroidStudio实现项目的开发。

1.4任务分工

1)查阅资料,选择设计题目:

张建升,姚丹,聂诗一起讨论

2)程序总体设计、详细设计:

张建升,姚丹,聂诗一起讨论

3)程序模块代码编写、调试、测试:

张建升负责事件编写,姚丹、聂诗负责界面设计,素材获取。

4)撰写课程设计任务和课程设计报告:

张建升,姚丹,聂诗一起讨论

5)上台演讲:

张建升

3.需求分析

3.1需求概述

本项目为安卓平台音乐播放器,包括在线音乐搜索、本地音乐查看、音乐播放、音乐收藏、歌曲信息显示、播放控制,歌词显示等功能。

3.2项目功能描述

3.2.1在线音乐搜索

3.2.2本地音乐查看

3.2.3音乐播放

3.2.4音乐收藏

3.2.5歌曲信息显示

3.2.6播放控制

3.2.7歌词显示

本系统主要实现安卓平台音乐播放功能,其需要实现的具体功能如下:

●音乐基本播放控制,包括播放,暂停,上一曲,下一曲;

●播放模式:

单曲循环,列表循环,随机播放;

●音乐的后台播放(利用Service);

●查看实时播放列表,音乐收藏列表;

●本地音乐检索,播放;

●在线音乐搜索,播放,歌词下载;

●歌词滚动显示。

4.界面设计

3.2项目功能概述

本项目由三个Activity组成:

●欢迎界面Spalish.java

●主界面Main.java

●播放器界面Player.java

3.2.1欢迎界面设计

用户刚进入该软件时显示的欢迎信息。

3.2.2主界面设计

主界面包含三个子界面(Fragment)

●在线音乐搜索界面Search_fragment.java

●本地音乐查看界面LocalMusic_fragment.java

●收藏音乐查看界面LoveMusic_fragment.java

3.2.3播放器界面设计

播放器界面包含歌曲名,歌手名等信息显示,以及播放控制(包括播放,暂停,上一曲,下一曲),歌词显示等功能。

5.功能设计

5.1SQLite数据库设计

Android系统自带一个MusicStore封闭类专门来存储媒体信息通过Uri EXTERNAL_CONTENT_URI 来访问SDcard中的媒体资源信息,并自动以SQLite数据库的形式存放在手机中。

其表结构如图4.1所示:

属性

数据类型

允许空

主键

_id

INTEGER

Notnull

Primarykey

_data

TEXT

Notnull

_display_name

TEXT

_size

INTEGER

title

TEXT

duration

INTEGER

artist

图4.1

另外定义了两个用户数据库,一个保存当前播放的歌曲列表(musicplaylist.db),一个保存用户收藏的歌曲列表(musiclovelist.db),其表结构如图4.2所示:

属性

数据类型

允许空

主键

musicid

INTEGER

Notnull

musicurl

TEXT

Notnull

musicname

TEXT

albumurl

TEXT

Notnull

lrcurl

TEXT

artistname

TEXT

islocal

BOOLEAN

Notnull

图4.2

5.2主界面设计

主界面包含三部分,标题栏,中间栏和底栏,如图4.3所示:

图4.3

4.2.1主界面切换

主界面包含三个Fragment,因此要进行三个Fragment之间的切换。

在标题栏栏添加三个ImageView,分别添加监听事件对应三个Fragment,从左至右依次为在线音乐搜索界面,本地音乐查看界面,收藏音乐查看界面,并用FragmentManager完成Fragment的切换。

Fragment的切换在中间栏完成。

即切换Fragment只改变中间栏的内容。

4.2.2在线音乐搜索界面设计

在线音乐搜索界面包括一个TextView,一个EditText,一个Button和一个ListView,TextView显示当前界面为在线音乐搜索界面。

当用户在EditText中输入输入需要搜索的歌曲时,点击按钮,后台完成搜索后,把结果显示在ListView中。

4.2.3本地音乐查看界面设计

本地音乐查看界面包括一个TextView显示当前界面为本地音乐查看界面,一个ListView,在完成本地音乐数据库的读取之后,把结果显示在ListView中。

4.2.4收藏音乐查看界面设计

收藏音乐查看界面包括一个TextView显示当前界面为收藏音乐查看界面,一个ListView,在完成收藏音乐数据库的读取之后,把结果显示在ListView中。

4.2.5迷你播放器设计

在主界面的底栏设计有一个迷你播放器视图,通过这个小播放器可以实现专辑封面,当前播放音乐名,歌手名信息的查看,并在右侧有三个按钮,分别为查看当前播放列表,播放/暂停,下一曲。

在点击迷你播放器其他位置时,跳转到播放器界面。

4.2.6自定义Adapter设计

在使用ListView时,需要自定义漂亮的Adapter,也就是ListView每一行所显示的内容,自定义Adapter如图4.4所示:

图4.4

包括一个ImageView显示专辑图片,两个TextView显示歌曲名和歌手,还有个ImageView添加点击事件,显示弹出式菜单。

在弹出式菜单中有下一曲播放,收藏等功能。

直接点击歌曲名附近时,可以立即播放当前的歌曲。

5.3播放器界面设计

播放器界面包括四部分,依次为标题栏,歌词显示栏,进度条栏,播放控制栏如图4.4所示:

图4.5

4.3.1标题栏

标题栏有两个Button和两个TextView,左侧按钮用于返回主界面,右侧按钮用于收藏当前歌曲。

两个TextView用来显示当前播放的歌曲名和歌手名。

4.3.2歌词显示栏

在播放音乐时,联网搜索当前歌曲的歌词信息,如果找到了歌词,就加载到内存,经过了格式化之后,显示到歌词View上。

并提供有实时滚动功能。

4.3.3进度条栏

获取当前播放歌曲的信息,包括已经播放的时间和总时间,在左侧TextView显示已播放时间,在右侧TextView显示剩余时间,中间进度条显示播放的进度,实时更新。

4.3.4播放控制栏

播放控制栏包括5个ImageView,添加监听事件从左到右分别实现:

1)播放模式控制,包括单曲循环,列表循环,随机播放

2)上一曲

3)播放/暂停

4)下一曲

5)查看播放列表

5.4播放列表设计

无论是在主界面还是在播放器界面,均提供了查看播放列表功能,

5.5音乐播放设计

为了实现后台播放,本应用使用安卓的Service组件来完成后台音乐播放。

安卓提供了MediaPlayer类,可以方便地播放各种音乐,只需要提供文件路径或者网络地址。

因此,设计把MediaPlayer实例放在Service中,并在Service中提供控制MediaPlayer的各种方法,例如Play,Pause,Continue,PreMusic,NextMusic等。

4.5系统功能表和系统功能结构图

功能类别

子功能

子功能

 

主界面

切换fragment

切换到网络音乐搜索界面

切换到本地音乐查看界面

切换到收藏音乐查看界面

跳转到播放器界面

查看播放列表

返回播放器界面

切换歌曲

删除歌曲

播放/暂停

调用Service方法播放或暂停

下一首

播放列表索引变化->寻找下一ID歌曲

 

播放器界面

跳转到主界面

播放/暂停

调用Service方法播放或暂停

上一首

播放列表索引变化->寻找上一ID歌曲

下一首

播放列表索引变化->寻找下一ID歌曲

播放模式

切换3种播放模式

查看播放列表

返回播放器界面

切换歌曲

删除歌曲

图4.5

图4.6

6.具体实现

5.1音乐存储

3.1.1音乐类

音乐类Music.java,存储了一首音乐的完整信息,包含以下变量,以及各变量的get,set方法:

privateStringmusicName;//歌曲名

privateStringmusicURL;//歌曲URL,本地歌曲为目录

privateStringmusicId;//在线歌曲ID

privateStringalbumName;//专辑名

privateStringsAlbumURL;//专辑封面

privateStringlrcURL;//歌词URL

privateStringartistName;//歌手名

privatebooleanisLocal;//是否为本地歌曲

3.1.2音乐播放列表

播放列表类MusicPlayList.java:

播放列表包含ArrayListmusicList存储的播放歌曲列表,当前播放歌曲的下标intcurrentindex,以及增加音乐insertmusic等方法。

此类为全局变量,安卓中全局变量需要继承Application,并在AndroidManifest.xml中注册该类名。

这样,就可以在该应用的任何地方获取到音乐播放列表。

在程序退出时,将该类存储的歌曲存储到SQLite数据库中的musicplaylist表中。

再次打开程序时,从数据库中读取音乐保存到播放列表类,这样就实现了播放列表的存储。

3.1.3音乐收藏列表

音乐收藏列表类:

MusicStore.java:

本应用提供音乐收藏功能,收藏的音乐保存在SQLite数据库中,在此类中提供了判断一首歌曲是否被收藏的isLovedMusic,以及新增收藏addLovedMusic,取消收藏removeLovedMusic的方法。

5.2音乐获取

本应用既可以在线搜索喜爱的歌曲,也可以列出本地已下载的歌曲。

5.2.1网络音乐获取

本应用核心功能为在线音乐搜索及播放,因此获取音乐的API最为重要。

因为音乐的版权问题,目前各大音乐服务商均未公开其官方音乐API,通过查找相关资料,找到了虾米音乐相关的API,其实现在GetInformation.java中。

●音乐搜索

定义基本信息搜索字符串:

publicstaticStringKEY_SEARCH_URL="";

在后面加上要搜索音乐的名字,例如“TryEverything”,访问即可得到如下图所示结果:

如图3.1所示,虾米音乐搜索结果:

图5.1

其每一行结果的Html代码如下(已略去无关信息):

Try

Everything

MichaelGiacchino(Shakira)

《Zootopia(OriginalMotionPictureSoundtrack)》

图5.2

通过使用Jsoup,可以抓取到:

音乐ID:

1775595262,

音乐名称:

TryEverything,

歌手:

MichaelGiacchino(Shakira),

专辑名:

《Zootopia(OriginalMotionPictureSoundtrack)》。

通过抓取整个网页的信息,即可完成音乐基本信息的在线搜索。

核心代码如下:

publicstaticArrayListgetShortInformation(Stringinput)

{

ArrayListmusics=newArrayList();

Document=null;

try

{

document=Jsoup.connect(KEY_SEARCH_URL+deCodeKey(input)).get();//jsoup连接最终拼接而成的请求字符串

Elementselements1=document.getElementsByClass("chkbox");//选择标签

Elementselements2=document.getElementsByClass("song_name");

Elementselements3=document.getElementsByClass("song_artist");

Elementselements4=document.getElementsByClass("song_album");

for(inti=0;i

{

Musictemp=newMusic();

temp.setMusicId(elements1.get(i).select("input").attr("value"));

temp.setMusicName(elements2.get(i).select("a").text());

temp.setArtistName(elements3.get(i).select("a").text());

temp.setAlbumName(elements4.get(i).select("a").text());

if(!

elements1.get(i).select("input").attr("disabled").equals("disable"))

musics.add(temp);

}

if(musics.size()>1)

musics.remove(0);

}catch(IOExceptione)

{

e.printStackTrace();

}

returnmusics;

}

图5.3

●音乐解析

通过已经抓取到的音乐基本信息,根据用户的需要,可进行详细信息的搜索。

当用户指定某首歌曲时,通过音乐ID可以查询音乐的详细信息。

先定义详细信息搜索字符串:

publicstaticStringID_SEARCH_URL="";

在后面加上需要搜索的音乐ID,例如1775595162,访问此网页可得到如下图所示信息:

图5.4

通过此页面可以得到完整的信息:

●专辑封面URL:

●下载地址(已加密,每天都会改变)

5h3%..i%5F6%%E72566E_3ue29E696%f4%E-tA2fx.2E6%252%F529%h%tyd332f35-55-nt%FiicF1%5FE7519_65.3h%4dc3f7E16E%up2mlao6%5E2%1E755%EmF_3b%586c746%5l%F6emm%2E1156%72954pakDc5f52bb645El

●歌词URL

 

通过对下载地址的解密,得到真实下载地址:

http:

//m6.2d4bc93d03c5f623859ff62637cb07bf-1464566400-0-null

其核心代码如下:

publicstaticMusicgetAllInformation(Musicmusic)

{

StringpostUrl=ID_SEARCH_URL+music.getMusicId();

try

{

Documentd=Jsoup.connect(postUrl).get();//连接相应ID的接口地址

Elementselement=d.select("trackList");

for(Elemente:

element)

{

music.setsAlbumURL(e.select("pic").text());

music.setbAlbumURL(e.select("album_pic").text());

music.setLrcURL(e.select("lyric").text());

music.setMusicURL(DecodeMusicURL.decodeMusicUrl(e.select("location").text()));

}

}catch(IOExceptione)

{

e.printStackTrace();

}

returnmusic;

}

图5.5

至此,本应用的网络音乐搜索功能已经实现。

5.2.2本地音乐检索

在安卓系统中,获取音乐信息不需要进行全盘搜索,利用ContentResolver可以获取安卓系统四大组件之一ContentProvider提供的联系人,图片,音频,视频文件。

在本应用中,定义了LocalMusicStore.java,定义了静态的getMusicList方法,利用ContentResolver查询了如下URI:

MediaStore.Audio.Media.EXTERNAL_CONTENT_URI

查询如下四项内容:

MediaStore.Audio.Media.TITLE歌曲名

MediaStore.Audio.Media.ARTIST歌手名

MediaStore.Audio.Media.ALBUM专辑名

MediaStore.Audio.Media.DATA文件路径

并返回Music类型的ArrayList的数组,当要使用本地音乐时,直接调用此方法即可获取。

至此,本应用完成了本地音乐的检索。

5.3音乐播放

5.3.1接口定义

为了实现音乐播放Service返回信息到Activity,定义两个自定义接口,使用接口回调方法实现Service与Activity的通信。

publicinterfaceOnLoadInformationListener

{

voidonLoadInfrometion(StringMusicName,

StringArtistName,

StringLyricUrl,

StringAlbumPic,

booleanisPlaying,

booleanisContinue,

booleanisLoveMusic);

}

图5.6

OnLoadInformationListener包含需要在主界面显示的各种信息,通过此接口回调可以更新界面。

publicinterfaceOnProgressListener

{

voidonProgress(intprogress,intfulltime);

}

图5.7

OnProgressListener实现播放界面进度条信息更新,包含progress变量表示当前进度,fulltime表示歌曲总长度。

5.3.2音乐播放类

音乐播放类:

MusicPlayService.java

本应用设计需在后台播放音乐,在Android系统中,提供了Service(服务)来完成后台任务,并在程序最小化时保持运行。

在Service中,定义了MediaPlayer实例,使用MediaPlayer来播放音乐。

定义了播放控制函数,包括播放,暂停,上一曲,下一曲等。

图5.8

继承了OnCompletionListener接口,在一首音乐播放完成后,实现播放模式的控制(单曲,循环,随机)。

publicvoidonCompletion(MediaPlayermp)

{

if(musicPlayList.getNextIndex()!

=-1)

{

startPlay(musicPlayList.getNextIndex());

musicPlayList.setNextIndex(-1);

return;

}

switch(playMode)

{

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

当前位置:首页 > 医药卫生 > 临床医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2