1、 本科毕业论文(设计)题目:基于 Android 平台的音乐播放器的设计与实现 姓 名: 学 号: 专 业: 院 系: 指导老师: 职称学历: 完成时间: 教务处制本科毕业论文(设计)独创承诺书本人按照毕业论文(设计)进度计划积极开展实验(调查)研究活动,实事求是地做好实验(调查)记录,所呈交的毕业论文(设计)是我个人在导师指导下进行的研究工作及取得的研究成果。据我所知,除文中特别加以标注引用参考文献资料外,论文(设计)中所有数据均为自己研究成果,不包含其他人已经发表或撰写过的研究成果。与我一同工作的同志对本研究所做的工作已在论文中作了明确说明并表示谢意。毕业论文(设计)作者签名: 日期: I
2、基于 Android 平台的音乐播放器的设计与实现摘 要随着科学的发展,手机的功能也越来越完善,从以前单纯追求技术到现在追求感官上的享受等,手机的功能已经成为很多人关注的焦点。而音乐播放器作为一款手机的基本配置软件,无可避免的会成为评判一款手机性能优良与否的尺度之一。几乎市场上所有的手机都拥有一个自带的音乐播放软件,在音乐播放器中用户可以根据自己的习惯或者爱好来设置音乐的播放。本音乐播放器是基于 Android 开源系统技术下,在 Eclipse 中通过 Java 语言的编写实现音乐播放器的基本功能,如:上一首、下一首、播放、暂停等播放功能,同时在音乐播放器中,用户可以对现有的歌曲进行操作,对
3、于自己不喜欢的音乐,用户可以在相应的菜单中将其删除,对于自己喜欢的音乐,用户也可以查看歌曲的详细信息。本音乐播放器界面优美,性能良好,经测试后在Android 系统中能正常的运行。关键词:Android;开源系统;音乐播放器;JavaIIDesign and implementation of a music player based on Android platformAbstractWith the development of science, the phones functions are more perfect, from the simple pursuit of techn
4、ology to enjoy sensory and other functions. The phones functions has become the focus of a lot of people. The music player as the basic configuration software of a mobile phone, will become one judge scale whether or not a cell phone with excellent performance inevitably. Almost all mobile phones on
5、 the market have a built-in music player software. The user can set the music playing in the music player according to their habits or hobbies.The music player is based on the Android open source technology, The functions of music player is implemented by writing Java language in the Eclipse, such a
6、s: last song, next song, play, pause and so on, while the user can operate the existing song in the music player. If they do not like the music, the user can remove it in the corresponding menu. For your favorite music, you can also view the details of the song. The music player has beautiful interf
7、ace and good performance. After the test the music player can run in the Android system.Key Words:Android ; Open system ;Music player ; Java目 录1 绪 论 .11.1 智能手机行业的发展现状 11.1.1 中国是智能手机最大的市场 .11.1.2 全球手机前五位中国品牌占三席 .11.1.3 中国智能手机市场格局悄然生变 .21.1.4 众多企业纷纷涌入智能手机市场 .31.2 课题意义 32 安卓开发 52.1 安卓简介 52.1.1 安卓介绍 .52
8、.1.2 安卓平台优势 .52.2 搭建安卓开发环境 62.3 Android 模拟器中 sd 卡的创建和文件的上传 .82.3.1 创建 SD 卡 .92.3.2 向 sd 卡里面上传文件及异常解决 93 系统需求分析 .103.1 需求分析 .103.1.1 功能需求 103.1.2 系统流程图 113.2 系统界面需求 .123.3 系统性能需求 .123.4 运行环境需求 .124 详细设计 .134.1 扫描功能设计 .134.2 主界面设计 .144.2.1 播放列表的实现 154.2.2 删除功能的实现 174.3 侧滑菜单设计 .184.4 播放设计 .204.4.1 播放原理
9、 204.4.2 播放模式设计 225 播放器测试 .245.1 测试方法 .245.2 测试用例 .245.2.1 测试 1 255.2.2 测试 2 255.2.3 测试 3 265.2.4 测试 4 275.2.5 测试 5 286 总 结 30致谢 .31参考文献 .3211 绪 论现如今中国已经成为了全球最大的智能手机市场,许多的中国企业也纷纷走出国门,在海外开拓自己的市场。在这竞争激烈的舞台上,各大企业纷纷大显身手,有人说智能手机迎来了他的黄金发展期 1。1.1 智能手机行业的发展现状1.1.1 中国是智能手机最大的市场当前,全球智能手机市场正在以惊人的速度发展。国际市场调研机构e
10、Marketer 公布的最新数据显示,到 2016 年全球使用智能手机的人数将超过 20亿人,占世界人口四分之一以上,发展中国家的使用率快速提升是主要的驱动力。到 2018 年,智能手机使用人数有望进一步提高到超过 25.6 亿人,约占世界人口的三分之一,到时候,智能手机的使用人数将正式超过功能机。由此来看,全球智能手机市场潜力巨大,据中国报告大厅发布的2014-2020 年中国智能手机行业竞争格局分析及投资可行性报告中国作为新兴经济体保持着强劲的增长势头,智能手机市场潜力可见一斑。eMarketer 数据显示,2014 年智能手机用户人数最多的前三个国家分别是中国,用户人数 5.197 亿;
11、美国,1.653 亿;印度 1.233 亿。据估计,2018 年,中国的智能手机用户人数仍将统领全球,达到 7.041 亿,印度将升至第二,用户人数 2.792 亿,美国第三,用户人数约 2.20 亿。另外,据宇博智业研究中心了解到,国际数据公司(IDC )的市场调研也预计,2015 年中国人将购买 5 亿部智能手机,这一数字是美国的三倍还多。中国无疑是当前智能手机最大的市场,没有一个手机企业可以忽略中国市场 2。1.1.2 全球手机前五位中国品牌占三席市场决定着企业的发展空间,但并不是唯一决定因素,各大智能手机巨头格局也因此在发生变化。中国不仅有较大的智能手机市场,也出现了较强劲的智能手机企
12、业 3。2近日,市场研究公司 Gartner 公布的最新数据显示,第三季度在全球 5 大智能手机厂商中,中国厂商占据三席,分别为华为、小米和联想,合计市场份额达到了 15.5%,同比增长了 4.1%。而排在前两位的苹果和三星的合计市场份额为 37.1%,但同比下滑了 7.1%。Gartner 的数据显示,今年第三季度全球手机销量与上年持平,但智能手机的销量则同比增长 20.3%,达到了 3.01 亿部,而三星、苹果仍是全球智能手机的前两位,但随后排名则发生变化,包括华为、小米、联想等三家中国本土手机厂商的出货量进入全球前五。Gartner 的报告表示,通过削减成本并提供顶级的硬件配置,中国品牌
13、处于很好的地位,他们满足了想要高端手机、但买不起苹果和三星产品的用户需求。业内人士表示,随着中国 4G 牌照的发放,中国本土手机品牌在运营商的带动之下,其出货量仍将大幅提升,同时,今年以来,众多手机企业电商品牌陆续推出,电商渠道将成为中国本土手机厂商出货的另一大渠道。1.1.3 中国智能手机市场格局悄然生变Gartner 研究主管罗伯塔科扎(Roberta Cozza)表示,“智能手机市场比以前任何时候都更加错综复杂了,因为所有厂商都加强了竞争。”的确,中国智能手机格局也在悄然发生变化。当前的中国市场格局到了一个拐点,新厂商的崛起对传统企业冲击过大,传统行业转型势在必行。首次进入全球手机前五位
14、的小米公司备受关注,近日,小米公司更是宣布与家电巨头美的联手进军智能家居领域,业内认为此举或将为小米智能手机打开一个全新的市场 4。而此前,有传言称,中兴因小米侵犯专利而向其发律师函。华为荣耀总裁刘江峰近日表示,“现在出现了许多基于网络销售的品牌,所以我们需要一个新的品牌来应对挑战,我们的目标是三年内,首先要在中国市场实现销量第一,然后在世界市场排名进入前两位。”很显然,面对小米快速的发展势头,中兴等传统智能手机厂商有点“着急”了。但是,除了小米公司之外,很多企业也都“蠢蠢欲动”,希望能从庞大的3智能手机市场分得一杯羹。1.1.4 众多企业纷纷涌入智能手机市场近日,有消息称曾在两年前折戟手机业
15、务的 360,将卷土重来。16 日,据外媒报道,360 公司宣布将与酷派结成战略合作,出资 4.0905 亿美元与酷派成立合资公司,360 将在合资公司中持有 45%的股权。消息虽然还未证实,但 360董事长周鸿祎在其微博上表示“我要去南方做手机”。此外,中国经济网记者还了解到,在平板电脑领域小有名气的“蓝魔数码”宣布要进军手机领域,总经理万秋阳表示,进入手机市场不可能小打小闹,年销量 100 万台几乎是起步价。业内认为,此举意味着汽车厂商比亚迪准备借道进入智能手机市场。在此之前,另一家电子代工企业鸿海集团曾尝试过借道夏普进军手机品牌,最终折戟沉沙收场。摩托罗拉全球总裁兼首席运营官里克奥斯特洛
16、近日在首次接受中国媒体采访时透露,摩托罗拉手机将借助联想资源回归中国市场,且把小米看成对手。摩托罗拉手机作为联想全资子公司,将独立运作,保留品牌,以后联想旗下的手机产品主要针对 3000 元以下的市场,摩托罗拉则是 3000 元以上的市场。最近摩托罗拉动作频繁,有消息显示有多宽高端产品即将发布。近日,凭借 ZenFone 异军突起的华硕也宣布,全面进军 4G 智能手机市场,投身火爆的 4G 争夺战中。此外,以下载起家的迅雷和以家电为主的长虹等企业也都宣布进入了智能手机领域。不过,业内均认为,过去几年,手机行业的风头转换太快,摩托罗拉、黑莓、诺基亚等手机巨头的衰落,都只用了一两年时间,虽然目前手
17、机市场价格战很激烈,但还存在相当大的利润空间,中国将进入智能手机发展的黄金期。在中兴、华为等老品牌和小米新兴品牌的压力下,哪个企业能够胜出关键还在创新和质量,只有迎合大众消费需求,才能创下奇迹。而对于企业来说,专利也是一个不得不提前准备的战略 5。1.2 课题意义4科技的发展日新月异,而手机的功能也越来越完善,从以前单纯的打电话发展到了发短信、听歌、听广播、聊 QQ、上网冲浪等,手机的功能已经成为很多人关注的焦点。在所有的功能中,音乐播放器算是大家比较关注的部分了。目前不少人在购买手机的时候都会关心手机的音乐播放能力,播放器操作是否简便、功能是否完善、界面是否友好等等,这些都是人们评价一款音乐
18、播放器好坏的标准。如果一款音乐播放器够让用户感到操作简便、功能完善、性能良好,那么一定会受到大家的欢迎。和传统的音乐播放器相比,手机播放音乐更加的容易携带,其他方面都不输与传统的音乐播放器,所以开发一款具有良好性能的音乐播发软件是具有良好市场和应用前景的。几乎市场上所有的手机都拥有一个自带的音乐播放软件,在音乐播放器中用户可以根据自己的习惯或者爱好来设置音乐的播放。一款音乐软件不可能面面俱到,针对不同的用户的不同需求,开发者们开发了各种各样的音乐播放软件,来满足不同用户的不同要求 6。不同手机平台的手机所支持的音乐播放软件也是各不相同的,现如今主流的手机平台就是 Android 平台,所以本课
19、题就致力于开发一款基于 Android 手机平台的音乐播放器,来满足用户的需求。52 安卓开发2.1 安卓简介2.1.1 安卓介绍Android 一词的本义指“ 机器人 ”,同时也是 Google 于 2007 年 11 月 5 日宣布的基于 Linux 平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。 Android 是基于 Linux 开放性内核的操作系统,是 Google 公司在 2007 年11 月 5 日公布的手机操作系统。Android 早期由原名为“Android“的公司开发,之后谷歌在 2005
20、 年收购了“Android.Inc“ ,继续对 Android 系统开发运营,它采用了软件堆层(software stack,又名软件叠层)的架构,主要分为三部分。底层 Linux 内核只提供基本功能,其他的应用软件则由各公司自行开发,部分程序以 Java 编写 7。 Android 操作系统已经成为全球最受欢迎的智能手机平台。现在,Android系统不但应用于智能手机,也在平板电脑市场急速扩张,在智能 MP4 方面也有较大发展。采用 Android 系统主要厂商包括台湾的 HTC,(第一台谷歌的手机G1 由 HTC 生产代工)美国摩托罗拉,SE 等,中国大陆厂商如:魅族( M9),华为、中兴
21、、联想、蓝魔等。2.1.2 安卓平台优势(1)开放性Android 平台最显著的特性就是他的开放性,Android 平台允许任何移动终端厂商加入到 Android 联盟中来。他的开放性吸引了许许多多的开发者,随着用户和应用的日益丰富,Android 平台也迅速的由一个新生的平台走向成熟 8。开发性对于 Android 的发展而言,有利于积累人气,这里的人气包括消费6者和厂商,而对于消费者来讲,最大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机。(2)丰富的硬件这一点还是与 Android 平台的开放性相关,由于 Android 的开放性,
22、众多的厂商会推出千奇百怪,功能特色各具的多种产品。功能上的差异和特色,却不会影响到数据同步、甚至软件的兼容,如同从诺基亚 Symbian 风格手机一下改用苹果 iPhone,同时还可将 Symbian 中优秀的软件带到 iPhone 上使用、联系人等资料更是可以方便地转移 9。(3)方便开发Android 平台提供给第三方开发商一个十分宽泛、自由的环境,不会受到各种条条框框的阻扰,可想而知,会有多少新颖别致的软件会诞生 10。但也有其两面性,血腥、暴力、情色方面的程序和游戏如何控制正是留给 Android 难题之一。(4)Google 应用在互联网的 Google 已经走过 10 年度历史,从
23、搜索巨人到全面的互联网渗透,Google 服务如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带,而 Android 平台手机将无缝结合这些优秀的 Google 服务。2.2 搭建安卓开发环境任何事物要运行,都要有它的环境,Android 也有它的环境才能够运行,下面介绍 Android 的开发环境配置 11。搭建开发环境需要的软件有:操作系统:Windows 软件包:Android SDK(Software Development kit Java Development kit) 、ADT(Android Develoopment Tool)IDE 环境:Eclipse IDE+ADT
24、 Eclipse2.3 以上JDK,安装步骤如下:第一步:安装 JDK7图 2.1 安装 JDK第二步:配置 JDK 环境变量,三个变量JAVA_HOME、PATH、CLASSPATH图 2.2 配置 JDK 环境变量第三步:安装 Android SDK:首先要下载 SDK 选择相应的系统进行安装。图 2.3 下载 SDK第四步:下载你所需要的安卓版本8图 2.4 下载安卓版本第五步:配置 AVD Manage图 2.5 配置 AVD Manage第六步:测试配置是否成功启动 eclipse,左侧 Package Explorer 右击鼠标 - New Project - 选择Android
25、中的 Android Sample Project 项 - Next - Next - 任选一个实例(JetBoy)。然后,在左侧 Package Explorer 中测试软件包上右击鼠标 - Run As - Android Application12。92.3 Android 模拟器中 sd 卡的创建和文件的上传2.3.1 创建 SD 卡在 Android 模拟器中,初始时没有 sdcard 的,为了存放音乐文件,需要自己创建 sdcard,我们先来看看如何创建 sdcard 以及文件上传。通过 Android 的 Tools 来创建 sd 卡并导入进来:(1)打开 dos,windows
26、+R 键打开。转换到你的 sdk 安装包的 tools 目录下,如我的目录如下:E:android-sdk-windowstools(2)创建 sd 卡。在命令行中输入:mksdcard 512M E:androidsdcardsdcard.img(这个1024M 就是我们要创建的 SD 卡的大小,还是根据自己的需要来输入,最后面的那个 E:androidsdcardsdcard.img 就是所设置的 SD 存放路径,这里也可以根据我们自己的需要改变路径的,但要注意路径中不能有空格出现) 13。在 Eclipse 里面创建模拟器,并以该 SD 开来创建,创建完成之后,启动该模拟器。可以在 An
27、droid SDK and AVD Manager 里面指定模拟器并启动。同样打开 Eclipse 的 DDMS-FileExplorer 查看 sd 卡是否安装成功。2.3.2 向 sd 卡里面上传文件及异常解决右边两个小手机按钮就是传输文件的按钮了,用它来实现文件的传入和传出了,向左的表示把手机里的文件导出,向右的表示把文件导入到手机里面去。这里和容易出现异常。异常如下:异常一:Failed to push selection :Invalid argument出现此异常,多半是文件所在的目录里面有中文或者文件的名字是中文导致的。建议修改一下试试。还有就是观察自己的操作权限是不是不够,如果
28、是,drwxrx 那就是可以的。如果, sd 卡是在 eclipse 里面系统自动创建的,试着重启一下 IDE15。异常二:Failed to push the item (s )出现这个异常是因为传输超时造成的。可以修改:(1)打开 windowsPreferenceandroidDDMS10(2)把 ADB connection tine out 项的超时时间改大点。113 系统需求分析3.1 需求分析3.1.1 功能需求本项目的目的是开发一款音乐播放器,能够播放音乐文件。具有歌曲列表功能,同时能够对歌曲进行一些简单的操作,如:播放、暂停、上一首、下一首、随机播放、列表循环、单曲循环等。界
29、面简洁明了,操作简单方便,给人良好的视觉享受 16。基本功能图如下:系统功能侧滑菜单 播放列表扫描歌曲全部歌曲我的最爱退出歌曲播放播放模式暂停上一首下一首播放顺序播放单曲循环随机播放全部循环图 3.1 播放器基本功能图12在播放器正在运行时,用户单击“播放”按钮,播放器将播放选中的播放列表中的音乐,并同时显示当前进度;当歌曲播放音乐时,用户单击“暂停”按钮,播放器将进入暂停状态;播放器正在播放时,用户点击“上一首”或者“下一首”按钮,播放器将播放上一首或下一首歌曲 17。播放时,用户在播放界面中可以选择自己喜欢的播放模式,如:单曲循环、顺序播放、随机播放、全部循环。3.1.2 系统流程图启动是
30、否扫描歌曲播放列表是否扫描歌曲是否选择要播放的歌曲播放界面结束播放模式是否退出是是是否否否13图 3.2 音乐播放器系统流程图3.2 系统界面需求播放器界面要求布局合理,简约,颜色舒适,控制按钮友好,能让用户一眼就能看出各个按钮的作用及操作方法。能实现要求的功能,但又不重复。要考虑到不同手机屏幕大小可能不一样,应尽量兼容大多数手机屏幕尺寸,使之显示无障碍 18。3.3 系统性能需求根据 Android 手机系统要求无响应时间为 5 秒,所以就有如下性能要求:当要求歌曲播放时,程序响应时间最长不能超过 5 秒;当要求歌曲暂停时,程序响应时间最长不能超过 5 秒;当要求歌曲上/下一首时,程序响应时
31、间最长不能超过 5 秒;界面切换响应时间最长不能超过 3 秒 19。过长的响应时间会造成用户体验感的降低,严重影响软件在用户心中的评价,不利于软件的销售。3.4 运行环境需求本音乐播放器支持 Android 2.3 及以上版本的手机,Android 2.3 以下的系统不保证其运行结果。本音乐软件是在 windows 7 系统下,Eclipse 3.5 ADT 0.95开发环境开发的 20。144 详细设计4.1 扫描功能设计在音乐播放器刚刚完成安装时,播放列表是空白一片的,此时需要扫描 SD卡中的歌曲信息,将其添加到播放列表中。扫描界面如下图 4.1 所示:图 4.1 扫描界面Android
32、中使用 ContentProvider 来支持不同应用程序的数据共享,为了方便其他应用程序对 sdcard 中的数据进行操作,sdcard 也提供了 ContentProvider接口。访问 sdcard 中的音频文件的 URI 为15MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,为了使播放列表显示所有音乐文件的信息,这里需要查询 sdcard里的音频文件,并把查询到的信息保存在 Cursor 中,具体代码如下:Cursor c = this.getContentResolver(). query(MediaStore.Audio.Media.EXTE
33、RNAL_CONTENT_URI, new StringMediaStore.Video.Media.TITLE, /音乐名 MediaStore.Audio.Media.DURATION, /音乐的总时间 MediaStore.Audio.Media.ARTIST, /艺术家 MediaStore.Audio.Media._ID, /id 号 MediaStore.Audio.Media.DISPLAY_NAME, /音乐文件名 MediaStore.Audio.Media.DATA /音乐文件的路径 , null, /查询条件,相当于 sql 中的 where 语句 null, /查询条件
34、中使用到的数据 null); /查询结果的排序方式 4.2 主界面设计 在 Android 中每一个可视化的界面,都有其唯一的布局配置文件。在该配置文件中包含了界面的布局方式以及所有的资源文件,如文字、图片、背景色等。Android 软件程序在运行时,通过调用相应的代码来对配置文件进行读取、切换等操作,从而展现不同的可视化结果。主界面是一个 Activity,Android 工程在每个 Activity 启动时都会执行 Oncreate()方法,对界面进行初始化(如下图4.2 所示)。代码如下所示:Public void onCreate(Bundle savedInstanceState)
35、super.onCreate(savedInstanceState); setContentView(R.layout.play_rack); 16图 4.2 主界面4.2.1 播放列表的实现在 Android 中有一个 ListView 视图,该视图拥有 BaseAdpater 属性,可以从上到下或者从左到右显示。系统默认每行只显示一个 TextView,本音乐播放器定义了新的方式,通过定义一个 MusicAdapter 类来继承 BaseAdapter,在通过算法对这个适配器进行扩展,使其能在每一个 ListView 中显示歌曲名、歌手信息以及播放时间。BaseAdapter 类是一个抽象
36、类,通过实现其中的抽象方法getView()来返回一个 View(视图)。该 View 显示在 Activity 就成了我们所看到的播放列表。在 ListView 中有一个监听器 new onItemClickListener()Override public 17void onItemClick(AdapterView arg0, View arg1, int arg2,long arg3) ,该方法可以监听鼠标的点击事件,通过 ListView.getItemAtPositon(int position)我们可以得到鼠标点击到的是哪一行,然后通过 Intent 将数据传入到其它的Activ
37、ity。为了将数据传到 ListView 中,需要定义三个数组:private int _ids; /存放音乐文件的 id 数组 private String _titles; / 存放音乐文件的标题数组 private String _path; /存放音乐文件的路径 _ids 保存了所有音乐文件的_ID,用来确定到底要播放哪一首歌曲, _titles存放音乐名,用来显示在播放界面,而_path 存放音乐文件的路径(删除文件时会用到)。接下来再定义一个变量,用来定位选择的是哪一首音乐:private int pos; 接下来将音乐文件的信息存放在相应的数组中: c.moveToFirst()
38、; _ids = new intc.getCount(); _titles = new Stringc.getCount(); _path = new Stringc.getCount(); for(int i=0;i4.4 播放设计在播放时可以看到播放、暂停、上一首、下一首等按钮,这些按钮都是水平放置的(如下图 4.6 所示),我们采用了线性布局 LinearLayout,将这些按钮的属性依次放置在 LinearLayout 中,使用 setOrientation(horizontal)方法将其置为水平。图 4.6 水平按钮4.4.1 播放原理Android 源程序已经为我们封装了一个 Me
39、diaPlayer 接口类。该接口在执行前需要一个数据源,通过如下四个步骤:第一步:MediaPlayer.reset(); 复位操作,为以后的媒体准备播放做准备。第二步:传入歌曲数据源,这里也是一个数据源:MediaPlayer.setDataSource (String path);参数需要一个路径,该接口类在收到路径后将其转化为数据源。22第三步:准备播放数据源,调用 MediaPlayer.prepare();第四步:MediaPlayer.start();播放数据源,该数据源播放后,不再于程序有关,需要用 MediaPlayer.Stop()方法让其停止或 MediaPlayer.S
40、tart();让其启动;歌曲数据源的获得:数据源的获得,需要我们提供给接口类一个歌曲存放路径,而这个路径已经被事先放到数据库里了,我们只需要进行数据库进行操作。将里面的路径取出。这里将调用 PlayRackActivity 的一个方法 query();方法 getContentResolver 是包 android.content.ContextWrapper 里面的方法,它会自动的调用 ContentProvider 中的关联数据库,我们需用这个方法就可以操作数据库。数据库操作需要一个 Uri 。Uri 类似一个网络连接的 Url。Uri 是数据库唯一的标识,不同的 Uri 可以操作不同的数
41、据库表。在查询数据库时需要传入一个当前播放的歌曲名字,通过歌曲名字来查询歌曲的路径。 具体代码如下: 播放 :public void play() /开始播放的时候为顺序播放 repeat_none(); Intent intent = new Intent(); intent.setAction(“com.wwj.media.MUSIC_SERVICE“); intent.putExtra(“url“, url); intent.putExtra(“listPosition“, listPosition); intent.putExtra(“MSG“, flag); startService
42、(intent); 上一首 :public void previous_music() playBtn.setBackgroundResource(R.drawable.play_selector); listPosition = listPosition - 1; if(listPosition = 0) 23Mp3Info mp3Info = mp3Infos.get(listPosition); /上一首 MP3 musicTitle.setText(mp3Info.getTitle(); musicArtist.setText(mp3Info.getArtist(); url = mp
43、3Info.getUrl(); Intent intent = new Intent(); intent.setAction(“com.wwj.media.MUSIC_SERVICE“); intent.putExtra(“url“, mp3Info.getUrl(); intent.putExtra(“listPosition“, listPosition); intent.putExtra(“MSG“, AppConstant.PlayerMsg.PRIVIOUS_MSG); startService(intent); else Toast.makeText(PlayerActivity.
44、this, “没有上一首了”Toast.LENGTH_SHORT).show(); 下一首:public void next_music() playBtn.setBackgroundResource(R.drawable.play_selector); listPosition = listPosition + 1; if(listPosition = mp3Infos.size() - 1) Mp3Info mp3Info = mp3Infos.get(listPosition); url = mp3Info.getUrl(); musicTitle.setText(mp3Info.get
45、Title(); musicArtist.setText(mp3Info.getArtist(); Intent intent = new Intent(); intent.setAction(“com.wwj.media.MUSIC_SERVICE“); intent.putExtra(“url“, mp3Info.getUrl(); intent.putExtra(“listPosition“, listPosition); intent.putExtra(“MSG“, AppConstant.PlayerMsg.NEXT_MSG); 24startService(intent); els
46、e Toast.makeText(PlayerActivity.this, “没有下一首了“, Toast.LENGTH_SHORT).show(); 4.4.2 播放模式设计播放模式模块的主要技术实现为随机播放和循环播放,随机播放的实现方法其实就是获取当前播放列表的大小,通 musicDatasList 列表的大小来获取随机数,播放产生的随机数相对应列表中的歌曲就得以实现了;循环播放其实就是当播放完列表最后一个的歌曲,直接播放列表第一个歌曲。 代码如下:随机播放 :public void shuffleMusic() Intent intent = new Intent(CTL_ACTION
47、); intent.putExtra(“control“, 4); sendBroadcast(intent); public void audioTrackChange(int progress) Intent intent = new Intent(); intent.setAction(“com.wwj.media.MUSIC_SERVICE“); intent.putExtra(“url“, url); intent.putExtra(“listPosition“, listPosition); if(isPause) intent.putExtra(“MSG“, AppConstant.PlayerMsg.PAUSE_MSG); else intent.putExtra(“MSG“, AppConstant.PlayerMsg.PROGRESS_CHANGE); intent.putExtra(“progress“, progress); startService(intent);