1、xx 大 学毕 业 论 文(设计)题 目:基于 Android 平台的手机音乐播放器的设计与实现 学 号: 姓 名: 年 级: 2010 级 学 院: 信息科学技术学院 系 别: 通信工程系 专 业: 通信工程 指导教师: 完成日期: 2014 年 04 月 27 日基于 Android 平台的手机音乐播放器的设计与实现I摘 要随着科技的进步,通信技术的发展,手机对人们日常生活越来越重要,甚至隐隐有超越传统 PC 的趋势。Android 作为一个开源系统,拥有着独特的优势,已形成了当前行业发展的主流趋势。基于 Android 平台的应用软件开发快捷简单,用户体验良好,必将成为移动互联网时代的风
2、向标。本文主要是对 Android 系统上音乐播放器应用程序的设计与实现进行讨论。采用了 Android 开源系统技术,利用 Java 语言和 Eclipse 编辑工具编写程序,同时给出了详细的系统设计过程、部分界面图及主要功能运行流程图,该音乐播放器集播放、暂停、停止、上一首、下一首、播放模式设置等功能于一体,性能良好,在 Android 系统中能独立运行。希望通过本次设计,了解音乐播放器的设计原理和实现的相关技术,掌握 Android 编程思想以及基本的应用组件,为以后从事 Android 开发打下基础。关键词:Android;音乐播放器;应用程序开发基于 Android 平台的手机音乐播
3、放器的设计与实现IIAbstractWith the progress of science and technology, the development of the communication technology, mobile phone on Peoples Daily life is more and more important, even faint has a tendency to go beyond traditional PC. Android as an open source system, has the unique advantages, has forme
4、d the mainstream of the current industry development trend. Based on the Android platform application development quick and easy, has good user experience, will become the vane of the mobile Internet era. This article mainly discuss about the design and implementation of a music player application o
5、n the Android system. Used the Android open source system technology, using the Java programming language and Eclipse editing tool to write programs, and gives the detailed system design process, interface diagram and main function operation flow chart, the music player has play, pause, stop, previo
6、us , Next , Play mode settings and other functions, the performance good, can run independently in the Android system. Hope that through this design, understand the music player design principle and implementation of related technology, grasp Android programming ideas and basic application component
7、s, to lay the foundation for engaging Android development in the future.Keywords: Android;Music player;Application development基于 Android 平台的手机音乐播放器的设计与实现III目 录摘 要 IAbstractII1. 引言 11.1 选题目的及意义 .11.2 国内外的研究现状 .11.3 可行性分析 .22. Android 项目介绍 32.1 什么是 Android .32.1.1 Android 简介 32.1.2 Android 的基本框架 42.1.
8、3 Android 系统的四大组件 62.2 Android 开发环境的搭建 .72.3 Android 音乐播放器工程结构 133. 系统需求分析 .153.1 构成模块 .153.2 系统流程 .163.3 系统结构 .163.4 系统需求 .173.4.1 系统界面需求 173.4.2 系统性能需求 173.4.3 运行环境需求 174. 详细设计及功能实现 .184.1 播放器界面的设计 184.1.1 歌曲列表界面设计 184.1.2 播放界面设计 184.2 各模块详细设计 194.2.1 歌曲列表功能 194.2.2 播放/暂停模块 .214.2.3 播放进度模块 234.2.4
9、 播放模式模块 254.2.5 上一首/下一首模块 .28基于 Android 平台的手机音乐播放器的设计与实现IV4.2.6 来电暂停模块 325. 程序调试与测试 .345.1 程序的调试 .345.2 程序的测试 .356. 总结 .39致 谢 .40参考文献 41附 件 .42基于 Android 平台的手机音乐播放器的设计与实现11. 引言1.1 选题目的及意义随着科技的进步,通信技术的迅速发展,手机的功能越来越多,对我们日常生活的影响也是越来越大,甚至有着超越传统 PC 的趋势。现如今的手机不再是只能拨打电话,发送短信的通讯工具,它还可以上网,玩游戏,播放音频、视频,甚至编辑文档等
10、等。随着手机的发展,各种手机播放器也紧跟着发展起来,但是目前很多播放器一味追求外观花哨,功能庞大,对用户的手机造成了很多资源浪费。比如 CPU,内存等的占用率过高,在用户需要多任务操作时,就会有不小的影响,给用户带来了许多不便。对于大多数普通用户用来,许多功能是用不上的,形同虚设。所以开发一款实用并且小巧玲珑的手机音乐播放软件是具有良好的市场和应用前景的。当今时代是移动互联网时代,360 董事长周鸿祎曾说过, “谁输在了移动互联网上,谁就输了未来,谁抓住了移动互联网的机会,谁就有了未来成功的门票。 ”足见移动互联网的重要性。所以本课题致力于开发一款基于Android 平台的手机音乐播放器,抓住
11、移动互联网的机会,以此学习并掌握 Android 移动平台应用开发的技能。1.2 国内外的研究现状目前国内的 Android 开发还是主要以应用开发为主,主要分成 3 类:为企业开发应用、开发通用应用以及游戏开发。第一类开发者一般身处规模较大的公司,除了根据需求对系统进行定制外,更多的工作在于为这些系统编写定制的应用。第二类开发者一般处于创业型公司或者是独立开发者,主要靠为国外公司进行外包开发和通过 Google 的移动广告点击分成。理论上是通过付费下载的形式来盈利,现在国内鲜见成功者。第三类开发者,目前和第二类开发者类似 1。基于 Android 平台的手机音乐播放器的设计与实现21.3 可
12、行性分析由于手机市场的庞大,手机操作系统也是各式各样。其中比较有代表性的手机操作系统有四个,Windows mobile,Symbian,IOS,以及谷歌的Android 操作系统。相比于 Symbian 的日落西山,以及苹果的封闭、Windows Phone 的前途未卜,Android 无疑代表了当前行业发展的主流趋势:开放平台取代了封闭平台。让参与者均能通过自己的努力而获益 1。Android 是 Google 公司历经数年和投资数亿美元开发出来并于 2007 年 11 月 5 日公布的智能手机操作系统。随着各大移动终端生产商大力开发和生产基于 Android 的移动智能设备, Andro
13、id 迅速得到业界和社会的认可,并成为整个产业的热点,基于 Android 平 台的各类人才逐渐成为各大企业竞相争夺的焦点。 而且 Android 是一个开放的系统,不管是企业还是个人都可以参与来表达自己的创意和想法。Google 公司于 2007 年 11 月 5 日宣布组建的一个全球性的联盟组织开放手机联盟,Google、中国移动、T-Mobile、三星、高通、德州仪器等领军企业将通过开放手机联盟携手开发 Android。 Android 系统采用了软件堆层(software stack,又名以软件叠层) 的架构,主要分为三部分。底层 Linux 内核只提供基本功能;其他的应用软件则 由各
14、公司自行开发,部分程序以 Java 编写。本课题应用基于 Android 框架开发,可以在 eclipse 中安装 Android 开发工具,使用 Android 模拟器,也可以使用任意 Android 终端。模拟器和真正的 Android 手机没有太大区别,人们对手机操作早已熟悉。操作起来相当方便。综合以上几方面,该应用的开发具有很高的可行性。基于 Android 平台的手机音乐播放器的设计与实现32. Android 项目介绍2.1 什么是 Android2.1.1 Android 简介Android 一词最先出现于法国作家利尔亚当(Auguste Villiers de lIsle-Ad
15、am)于 1886 年发表的科幻小说 未来夏娃 ( Lve future)中,作者将外表像人的机器起名为 Android。据说 Android 系统之父安迪鲁宾(Andy Rubin)是效仿 Linus Torvalds 命名 Linux 系统的方式来给 Android系统命名的。 2同时,它也是 Google 于 2007 年 11 月 5 日宣布的基于Linux 平台的开源手机操作系统的名称。该平台由操作系统、中间件、用户界面和应用软件组成,是首个为移动终端打造的真正开放和完整的软件平台和操作系统 3。Android 系统是一款基于 Linux 内核的综合系统平台,集合了应用程序、应用程序
16、框架、系统核心库、Dalvik 虚拟机、Linux 内核等一系统功能模块。采用了软件堆层的架构,由三个部分组成。底层以 Linux 为操作系统内核,提供进程管理、存储管理等基本功能 4。其他各公司自行开发市场需求的应用软件,部分程序以 java 编写。Android 系统最初并不是由 Google 公司研发出来的,而是由安迪 鲁宾带领的团队创立的。他曾创立两个操作系统公司,Android 为其中之一。Google 公司于 2005 收购了 Android 系统,安迪 鲁宾则成为其工程部副总裁,继续负责 Android 项目的研发工作。从此,Android 系统踏上了飞速发展的道路。2007 年
17、 11 月 5 日,Google 公司正式向外界展示了 Android 系统,并在当天宣布建立一个全球性的联盟组织开放手机联盟(Open Handset Alliance) 。该组织由 34 家手机制造商、软件开发商、电信运营商以及芯片制造商组成,支持 Google 发布的手机操作系统以及应用软件,并共同开发 Android 系统的开放源代码 5。随着时间的推移,Android 系统逐渐壮大,目前在智能手机和平板电脑市场均处于霸主地位。采用 Android 系统基于 Android 平台的手机音乐播放器的设计与实现4主要厂商包括 HTC、SAMSUNG、LG 、魅族、华为、中兴、联想、小米等。
18、目前最新 SDK 版本为 Android 4.4。2.1.2 Android 的基本框架Android 的系统架构和其操作系统一样,采用了分层的架构。从架构图看,Android 分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和 Linux 内核层。图 1 Android 系统架构图(1)应用程序层Android 不仅是操作系统,也包含了许多的应用程序。其中包括诸如SMS 短消息程序,email 客户端,地图,浏览器,联系人管理,日历程序等等。所有应用程序都是使用 JAVA 语言编写的,并且可以被开发人员所开发的其他程序替代。(2)应用程序框架层应用程序框架层是 Andr
19、oid 应用开发的基础,允许开发人员完全访问核心应用程序所使用的 API 框架。该层简化了组件的重用,开发人员可以直接使用其提供的组件进行快速的应用程序开发,也可以通过继承实现个基于 Android 平台的手机音乐播放器的设计与实现5性化的拓展。主要包括如下组件:视图系统(View System)、内容提供者(Content Providers )、资源管理器(Resource Manager)、通知管理器(Notification Manager)、活动类管理器(Activity Manager)、窗口管理器(Window Manager)、电话管理器( Telephony Manager)
20、等等。(3)系统运行库层系统运行库层主要分为系统库和 Android 运行时环境两部分。系统库 1系统库是应用程序框架的支撑,同时也是连接应用程序框架层与Linux 内核层的重要纽带,主要包含以下几部分:执行多个应用时,管理显示与存取操作之间互动,也负责 2D、3D 绘图显示合成的 Surface Manager、多媒体库 Media Framework、关系型数据库引擎 SQLite、绘图函数库 OpenGL Es、提供点阵字与向量字描绘与显示的 FreeType、浏览器引擎 WebKit、底层 2D 图形渲染引擎 SGL、安全认证 SSL、C 系统库函数Libc。Android 运行时环境
21、 2Android 应用程序在 Android 运行时环境中执行,运行时环境可以分为核心库和 Dalvik 虚拟机两部分。核心库提供了 Java 语言中所封装的大多数类和方法。如android.os、、android.media 等。Dalvik 虚拟机是 Google 公司自己设计的用于 Android 平台的 Java 虚拟机,主要有以下几个特征:所有类文件编译完成的 CLASS 文件都会整合到一个 DEX 文件中,减少了文件大小,方便 I/O 操作,也提高了类的查找速度;每一个 Android 应用程序都运行在一个相对独立的 Dalvik 虚拟机实例里,而每一个虚拟机实例都是一个独立的进
22、程空间;Dalvik 虚拟机是基于寄存器的,虽然硬件通用性比基于堆栈的虚拟机要差一些,但是代码的执行效率却更胜一筹,基于寄存器的虚拟机可以更有效地减少冗余指令的分发和减少内在的读写访问。 (4) Linux 内核层Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,网络协基于 Android 平台的手机音乐播放器的设计与实现6议栈,内存管理,驱动模型和进程管理。 Linux 内核也同时作为硬件和软件堆栈之间的硬件抽象层。同所有 Linux 内核一样,Android 内核是介于硬件层和软件组之间的一个抽象层次。2.1.3 Android 系统的四大组件Android 开发四
23、大组件分别是:Activity 活动:用于表现功能。Content Provider 内容提供者:支持在多个应用中存储和读取数据。BroadcastReceiver 广播接收器:用于接收广播。Service 服务:后台运行服务,不提供界面。Activity 1Activity 是所有程序的根本,所有程序的流程都运行在 Activity 之中,Activity 可以算是开发者遇到的最频繁,也是 Android 当中最基本的模块之一。一个 Activity 通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。一般一个 Android 应用是由多个 Activity 组
24、成的。多个 Activity 之间可以进行相互跳转和通信,主要是通过 Intent(意图)来实现的。Content Provider 2在 Android 中,数据的保护是很严密的,除了放在 SD 卡中的数据,一个应用所持有的数据库、文件等内容,都是不允许其他应用直接访问的。如果一个应用需要使用其他应用的文件要怎么办呢?这个时候就要用到Content Provider 了。应用想对外提供的数据,可以通过派生 Content Provider 类, 封装成一枚 Content Provider,每个 Content Provider 都用一个 uri 作为独立的标识,形如:content:/co
25、m.xxxxx。这样,其他应用就可以通过 ContentResolver 类 (见 ContentProviderAccessApp 例子)从该内容提供者中获取或存入数据(相当于在应用外包了一层壳)。BroadcastReceiver 3在 Android 中,Broadcast 是一种广泛运用的在应用程序之间传输信息的机制。而 BroadcastReceiver 是对发送出来的 Broadcast 进行过滤接受基于 Android 平台的手机音乐播放器的设计与实现7并响应的一类组件。应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。
26、广播接收器没有用户界面。然而,它们可以启动一个 activity 或 serice 来响应它们收到的信息,或者用 NotificationManager 来通知用户。通知可以有很多种方式来吸引用户注意力,一般来说是在状态栏上放一个持久图标,用户可以打开它获取消息。同时,应用还可以通过使用Context.sendBroadcast()将它们自己的 Intent Broadcasts 广播给其他应用程序。Service 4相信熟悉 Windows 系统的人都知道 Windows 有许多的服务,Android中的服务与 Windows 中的服务非常相似。准确一点来说,服务是可以在后台长期运行的没有界
27、面的组件。服务不能自己运行,需要通过 Contex.startService()或Contex.bindService()启动服务,两种方式主要区别就是使用 startService()启动的服务与调用者没有关系,就算调用者关闭了,服务还在后台一直运行,想要停止服务必须使用 Contex.stopService();使用 bindService()启动的服务与调用者绑定,调用者一旦关闭,服务也就终止,而且通过绑定方式启动服务时,调用者可以执行服务中的一些方法。通常情况下可以利用这两种方式混合启动服务,达到调用服务中的方法,而调用者关闭时服务又不会立刻终止的效果。2.2 Android 开发环境
28、的搭建进行 Android 应用开发之前,我们首先要搭建一个 Android 应用开发环境。下面介绍一下如何搭建 Android 应用开发环境。Android 由多个开发包组成的,其中最主要的开发包如下:JDK(Java 语言的软件开发工具包):可以到网址http:/ 下载对应系统的 JDKAndroid SDK(Android 软件开发工具包):可以到网址基于 Android 平台的手机音乐播放器的设计与实现8http:/ 下载,直接下载 ADT即可得到一个包含有 Android SDK 和 Eclipse 的开发工具。Eclipse 开发环境需要 JRE 的支持,所以必须先安装 JDK,双
29、击我们下载到的 JDK 安装包开始安装,选择好安装路径,按照提示操作即可完成 JDK 及 JRE 的安装。JDK 安装完成后需要配置环境变量,右键点击我的电脑,选择属性,选择左边的高级系统设置,再在弹出的对话框中点击环境变量,在用户变量中新建一个变量,变量名为 PATH,变量值中填上 JDK 和 JRE 的安装目录下 bin 文件夹的路径,中间以“;”隔开。不同系统设置可能有些许不同,但大体上是一致的。具体过程如以下组图所示:图 2 系统变量设置基于 Android 平台的手机音乐播放器的设计与实现9图 3 系统变量设置图 4 系统变量设置基于 Android 平台的手机音乐播放器的设计与实现
30、10图 5 系统变量设置配置好环境变量后需要测试看 JDK 是否正确安装,按 win+R 键打开运行窗口,在对话框中输入 CMD,在弹出的命令提示符窗口中输入 java按下回车键,看是否能打印出信息,再输 javac 按下回车看是否能打印出信息,能得到如下图所示的信息说明 JDK 与 JRE 都已正确安装了。图 6 验证 JDK 是否正确安装基于 Android 平台的手机音乐播放器的设计与实现11图 7 验证 JDK 是否正确安装安装完 JDK 之后,直接解压下载到的 ADT 工具包到你想安装的路径下即可得到 Eclipse 和 Android SDK 以及一个 SDK Manager 应用
31、程序。解压完成后同样需要配置环境变量,双击用户变量中的 PATH 变量,将SDK 中的 tools 和 platform-tools 路径添加到变量值中。然后打开 CMD,输入 android h 按下回车键,若能打印出帮助信息则说明 SDK 已经正确配置,可以使用了。双击打开 SDK Manager.exe 或者打开 CMD,输入命令 android 打开SDK 管理器,在这里下载安装好开发时需要用到的 Android 系统版本以及工具。基于 Android 平台的手机音乐播放器的设计与实现12图 8 SDK 管理器安装好需要的 Android 系统版本文件后,在 CMD 中输入命令 and
32、roid avd 打开 AVD 管理器,配置 Android 模拟器,点击 New 新建一个模拟器,选择好系统版本、屏幕大小、CPU、RAM 大小以及 SDCard 大小后点击OK 即可,屏幕、RAM 以及 SDCard 大小建议不要设置太大,以免造成模拟器运行卡顿。基于 Android 平台的手机音乐播放器的设计与实现13图 9 AVD 管理器2.3 Android 音乐播放器工程 结构Android 工程基本结构目录包括:src (源代码) 、gen(Android 系统自动生成的常量) 、Res(资源文件):主要存放程序界面的布局配置(.xml)文件和图片资源。AndroidMainfe
33、s.xml 是四大组件的驱动配置文件,有它的存在,Android 程序的四大组件才可以正常的跳转。Android 资源的类型和布局如下图:基于 Android 平台的手机音乐播放器的设计与实现14图 10 Android 资源类型和布局下面组图为音乐播放器代码结构和各界面的配置文件,图像资源等,图 11 为一个 Android 工程所必须的结构,图 12 为该播放器的类文件,图13 为播放器所用到的字符串,字体大小,字的颜色等配置文件,图 14 为 该播放器的各种界面的布局配置文件,图 15 为该播放器的图片资源。图 11基于 Android 平台的手机音乐播放器的设计与实现15图 12 图
34、13图 14 图 153. 系统需求分析本项目目的是开发一个可以播放 MP3 格式音乐文件的播放器,并且能够控制播放、暂停、上一首、下一首、随机播放、列表循环、单曲循环等播放模式设置,具有来电自动暂停,挂断电话自动继续播放功能,具有歌曲列表功能,具有较好的视觉外观,界面简明,操作简单。根据项目目标,我们可以获得系统的基本需求。下面将介绍系统需求。基于 Android 平台的手机音乐播放器的设计与实现163.1 构成模块本项目构成模块如右图所示。对模块的具体说明如下。(1)歌曲列表模块此模块将自动扫描扩展卡中 MP3 格式的文件并显示出来,用户点击某一歌曲后将会跳转到播放界。(2)播放控制模块此
35、模块功能是控制音乐的播放。具体功能如下。播放 1用户点击播放按钮时,播放器将播放选中歌曲。 图 16 模块结构暂停 2播放器正在播放时,用户点击暂停按钮,将暂停播放。上一首/下一首 3用户点击上一首或下一首按钮时,播放器将自动播放上一首或下一首歌曲。播放模式 4播放器默认播放模式为顺序播放,另有三个按钮,分别为随机播放、列表循环、单曲循环,用户按下相应按钮,播放器播放模式将切换到相应的播放模式。3.2 系统流程音乐播放器系统流程图如下图所示。音乐播放器歌曲列表播放控制基于 Android 平台的手机音乐播放器的设计与实现17启动程序S D 卡中有M P 3 文件 ?歌曲列表点击条目 ?播放界面
36、否是是回退退出结束程序提示没有文件否图 17 系统流程图3.3 系统结构音乐播放器系统的完整功能结构如下图所示。音乐播放器列表界面 播放界面歌曲列表扫描歌曲播放模式播放暂停上一首下一首退出程序图 18 功能结构图基于 Android 平台的手机音乐播放器的设计与实现183.4 系统需求3.4.1 系统界面需求播放器界面要求布局合理,有较好的视觉外观,界面简明,操作简单,为减少开发工作量,图片素材均为网上下载到的素材。 3.4.2 系统性能需求由于 Android 手机系统要求的无响应时间为 5 秒,故有如下性能要求:当歌曲列表与播放界面相互跳转时,程序响应时间最长不能超过 5 秒。当要求歌曲播
37、放时,程序响应时间最长不能超过 5 秒。当要求歌曲暂停时,程序响应时间最长不能超过 5 秒。当要求歌曲播放上一首、下一首歌曲时,程序响应时间最长不能超过5 秒。3.4.3 运行环境需求运行系统:Android 2.1Android4.3 版本开发环境:Eclipse 4.2.1 ADT 22.3.04. 详细设计及功能实现本音乐播放器可用 2 个 Activity 和 1 个 Service 来实现,通过 Activity来显示歌曲列表和播放界面,使用 Service 在后台播放音乐,通过一个Application 类来存放全局变量,用于 Activity 间以及 Activity 和 Ser
38、vice 之间数据的传递。基于 Android 平台的手机音乐播放器的设计与实现194.1 播放器界面的设计4.1.1 歌曲列表界面设计程序启动时首先进入歌曲列表界面,该界面通过一个 RelativeLayout布局来实现,上方使用一个 Textview 来显示标题“歌曲列表”,下方是一个Listview 控件,用于显示从 SD 卡中扫描得到的歌曲列表。效果如下图,具体代码见附件 musiclist.xml 文件。图 19 歌曲列表界面4.1.2 播放界面设计在歌曲列表中点击某一首歌曲之后程序则跳转到播放界面中,该界面需要有各种按钮可以控制音乐播放,播放模式的设置,以及显示歌名,播放进度等。界
39、面由几个 LinearLayout 布局的嵌套来完成。效果如下图,具体代码见附件 playui.xml 文件。基于 Android 平台的手机音乐播放器的设计与实现20图 20 播放界面4.2 各模块详细设计4.2.1 歌曲列表功能进入歌曲列表时需要自动扫描 SD 卡中的 MP3 文件,扫描到文件则显示歌曲列表,扫描不到文件则弹出提示,并自动退出程序。扫描歌曲代码如下。private void MusicList() File home = new File(myApp.getPath(); / 从Application中获取SD卡路径并创建一个文件夹if (home.listFiles(ne
40、w MusicFilter().length 0) / 如果文件夹下的歌曲数目大于0,则执行下面的方法for (File file : home.listFiles(new MusicFilter() / 遍历home 文件夹下面的歌曲myMusicList.add(file.getName(); / 把每一次遍历到的歌曲名字添加到myMusicList表中ArrayAdapter musicList = new ArrayAdapter(基于 Android 平台的手机音乐播放器的设计与实现21musicListActivity.this, R.layout.liststyle, myMus
41、icList);/ 调用数组适配器,myMusicList表单中的信息显示到list视图中setListAdapter(musicList); / 添加适配器 else if (home.listFiles(new MusicFilter().length = 0) Toast.makeText(musicListActivity.this, “找不到歌曲,请在SD卡中添加音乐文件后重启程序“, 0).show(); / 找不到歌曲时弹出一个Toast提示handler.postDelayed(runable, 2000); / 调用进程延迟两秒结束程序点击列表中歌曲时程序自动跳转到播放界面,
42、可在播放界面中控制播放音乐,代码如下。/监听ListItem 点击事件protected void onListItemClick(android.widget.ListView l,android.view.View v, int position, long id) super.onListItemClick(l, v, position, id);if (myApp.getNum() != position) myApp.setNum(position);replay = 1; else replay = 0;Intent intent = new Intent(musicListAct
43、ivity.this, PlayActivity.class);intent.putExtra(“replay“, replay);startActivity(intent); /跳转到播放界面基于 Android 平台的手机音乐播放器的设计与实现22;4.2.2 播放/暂停模块播放界面中,播放与暂停为同一个按钮,一个按钮实现两个功能,当歌曲正在播放时,按下按钮为暂停播放功能;当歌曲不在播放时,按下按钮则为播放功能。两个功能切换的同时需要切换到相应的按钮图片素材。代码如下。private class playListener implements OnClickListener public
44、void onClick(View v) if (myservice.isplay() if (replay = 1) myservice.play();playButton.setImageResource(R.drawable.pause);replay = 0;handler.post(runnable); else playButton.setImageResource(R.drawable.play);myservice.pause();replay = 0; else playButton.setImageResource(R.drawable.pause);if (replay
45、= 1) myservice.play();replay = 0;handler.post(runnable); else myservice.start();基于 Android 平台的手机音乐播放器的设计与实现23播放与暂停的功能实现则在 Service 中完成,代码如下。/ 播放当前音乐public void play() try myMediaPlayer.reset();myMediaPlayer.setDataSource(myApp.getSongPath();myMediaPlayer.prepare();myMediaPlayer.start(); catch (Except
46、ion e) e.printStackTrace();myApp.setIsPlay(1);/监听歌曲是否播完,播完自动播放下一首myMediaPlayer.setOnCompletionListener(new OnCompletionListener() public void onCompletion(MediaPlayer arg0) moveNext(););/ 继续播放public void start() myMediaPlayer.start();myApp.setIsPlay(1);/ 暂停播放public void pause() 基于 Android 平台的手机音乐播放器
47、的设计与实现24myMediaPlayer.pause();myApp.setIsPlay(0);4.2.3 播放进度模块播放界面中播放进度是通过一个 SeekBar 控件来完成的,通过定义一个进程来更新界面,监听播放进度的改变,实现更新进度条以及播放时间。再定义一个方法监听 SeekBar 改变,用户点击进度条时音乐将跳到该位置进行播放。具体代码如下。Handler handler = new Handler(); / 定义一个handler,主要是用于更新进度条Runnable runnable = new Runnable() / 重写run方法public void run() see
48、kbar.setMax(myservice.getDuration(); /获取歌曲时长设置进度条最大值seekbar.setProgress(myservice.getCurrentPosition(); / 获取音乐播放的时间来设定进度条的位置currentTime.setText(formatTime(myservice.getCurrentPosition(); /显示当前播放时间maxTime.setText(formatTime(myservice.getDuration(); /显示歌曲时长filename.setText(myApp.getFileName(); /显示歌名handler.postDelayed(runnable, 1000); / 每隔1秒钟更新一次;/ 格式化时间,将其变成00:00的形式public String formatTime(int time) 基于 Android 平台的手机音乐播放器的设计与实现25int secondSum = time / 1000; / 时间转化成秒int minute = secondSum / 60;