2024年7月23日发(作者:桂瑞绣)
添加学校名称
本科毕业论文(设计)材料册
姓 名:
学 号:
年 级: 2010级2班
所在 院系 名称: 数学与信息工程系
专 业 名 称: 计算机科学与技术
指导教师姓名:
指导教师职称:
基于Android平台的在线音乐播放系统设计与实现
数学与信息工程系 计算机科学与技术专业 XX级 XX
指导教师:XX
摘 要:手机运用越来越广泛,人们对手机软件的要求越来越高,音乐播放器就是其中一项重
要软件.本文以Android开发平台为基础,首先介绍了Android开发平台、以及当前发展现状.然后使
用Java语言和开发工具Eclipse对音乐播放器代码进行编写,通过设计能实现音乐的播放、暂停、上
一曲、下一曲等功能。这款软件不仅可以下载网站上的音乐到本地,更主要的是它支持音乐的边下
载边播放的功能。
关键词:安卓;音乐播放器;开发与设计
Abstract:Mobile phone use more and more widely,People more and more high to the requirement of
mobile phone software,Music player is one of the important software。 This article takes the Android
development platform as a foundation. First it briefly introduces the Android development platform,as well
as the current domestic and foreign development present situation。 Then use the Java language and
Eclipse development tools to write music player code,The design can realize music play, pause, a song,
the next song and other software can not only download music on the website,but also
support the music playing while downloading more importantly.
Key words:Android:
Android; music player; The development and design
第 1页( 共18页)
目录
摘要
Abstract
1
1
第1章 绪论
1。1 研究背景及现状
1.2 研究目的
第2章 认识Android
2。1 智能手机操作系统
2.2 关于Android
5
5
5
6
6
6
6
6
5
6
4
4
2.2.1 Android基本概念
2.2。1 Android简介
2。3 Android的基本特点
2。3.1完全的开放性
2。3。2无界限的应用程序
2.3。3应用程序是在平等的条件下创建的
2。3。4应用程序可以轻松地嵌入网络功能支持
2。3。5应用程序可以并行运行
第3章 播放系统设计
3。1 Android MP3在线播放系统原理分析
3。2平台整体架构设计
3。3 UI设计与实现
3。3.1 界面设计
3。3。2 用户交互
第4章 在线播放的实现
4.1获取资源文件
7
7
7
8
9
9
第 2页( 共18页)
4.2 下载音乐和播放音乐的设计与实现
4。3 播放器播放流程
第5章 系统测试
第 6章 总结
参考文献
11
12
15
16
17
第 3页( 共18页)
1 绪论
1.1 研究背景及现状
自1983年世界上第一款商用手机发布到现在,手机已经成为人们必不可少的通信
工具.从最初没有显示屏幕到黑白显示屏,再到现在的彩色显示屏,手机显示技术已经完
成3次大的飞跃。随着达到高清电视全屏显示效果的新一代显示屏出现,手机业将掀起
又一轮革新风暴
[1]
。消费者对手机产品在商务和娱乐方面的要求越来越高,让手机成为
便携式的商务或娱乐终端。在硬件的推动下,用户对手机软件的功能需求也越来越高。
而Android系统也在不断更新以满足需求,因此手机多媒体的技术的开发也就不可避免
成为热点。
在无线网络高速接入互联网技术迅速发展的时代,网络已经渗透到社会的各个领域,
尤其是移动设备领域。通过移动设备用户可以随时随地从互联网上获取信息.随着网络
技术和智能移动设备的发展,用户的需求也越来越高,要求智能移动设备提供更多更好
的即时服务.当今时代手机尤其是智能机不再是单纯的通讯工具了,如今的手机更多的
是作为我们的娱乐工具、生活帮手。我们需要随时用手机查看天气预报、查询路线等,
也要用手机打游戏、看电影、听音乐等。
1。2 研究意义
在线音乐服务是手机用户最重要的娱乐需求之一。人们习惯在等车、坐车、排队等
人的时候用手机来听音乐;现金社会生活紧张,而欣赏音乐史也是其中最好的舒缓压力
的方式之一。这些都让音乐作为人们不可或缺的一部分,为了让人们可以随时随地享受
音乐带来的美妙享受,需要开发人员设计出好用、实用的在线播放系统。
随着4G 时代到来,在移动终端与网络互联来获取网络资源越来越受到人们欢迎,
对多媒体在线浏览或下载需求量也越来越大, 因此针对Android 系统而开发的多媒体
与网络的互联变得越来越有市场,目前android 手机在线播放功能尚未完善,为实现在
线的音乐播放,提高用户体验,本文将通过缓存和流媒体播放技术,逐步完善MP3 音乐
文件的边下载边播放功能。
第 4页( 共18页)
2 认识
Android
2.1 智能手机操作系统
智能手机系统是一种运算能力及功能比传统的手机系统更强大的系统.使用最多
的有:Android、IOS、Symbian、Windows Phone和BlackBerry OS。智能手机能够显示与
个人电脑所显示出来一致的正常网页,它具有独立的操作系统以及良好的用户界面,拥
有很强大的应用扩展性、能方便随意地安装和删除应用程序
[
2
]
.
2.2 关于Android
2。2.1 Android基本概念
Android 一次本意是指“机器人”,当然现在大家都知道它是Google推出的开源手
机操作系统.Android基于Linux平台,由操作系统、中间件、用户界面和应用软件组成,
号称是首个为移动终端打造的真正开放和完整的移动软件。它是由一个30多家科技公
司和手机公司组成的“开放手机联盟”共同研发的,这将大大降低新型手机设备的研发
成本。完全整合的全移动功能性产品成为“开放手机联盟”的最终目标
[3
]
。
2.2。2 Android简介
Android已经从最初的智能电话领域主机进入教育、医疗、军事、汽车、家居等重
要领域。它一路披荆斩棘,攻城拔寨,发展势头有目共睹,已经成为移动平台领域当之
无愧的王者。目前,已有众多设备开始使用Android系统,比如智能手机、智能电视、
平板电脑、智能相机等;相信在不就的未来,还将有更多采用Android系统的高科技术
产品进入我们的生活
[4
]
。
Android作为Google移动互联网战略的重要组成部分,将进一步推进“随时随地为
每个人提供信息"这一企业目标的实现。Google的目标是让移动通信不依赖于设备,甚
至是平台。出于这个目的,Android将完善而不是替代Google长期以来推行的移动发展
战略:通过与全球各地的手机制造商和移动运营商成为合作伙伴,开发既实用又有吸引
力的移动服务,并推广这些产品.
Android平台的研发队伍阵容强大,包括Google、HTC、T—Mobile、高通、摩托罗
第 5页( 共18页)
拉、三星、LG以及中国移动在内的30多家企业都将基于该平台开发手机的新型业务,
应用之间的通用性和互联性将在最大程度上得到保持.“开放手机联盟”表示,Android
平台可以促使移动设备的创新,让用户体验到优质的移动服务。同时,开发商也将得到
一个新的开放级别,更方便地精心协同合作,从而保障新型移动设备的研发速度.因此
Android是第一个完整、开放、免费的手机平台
[4]
。
2.3 Android 的特点
[5
]
2。3。1完全的开放性
Google与开放手机联盟合作开发了Android,Google通过与运营商、设备制造商、
开发商和其他有关各方结成深层次的合作伙伴关系,希望通过建立标准化、开放式的移
动电话软件平台,在移动产业内形成一个开放式的生态系统。
2。3。2 无界限的应用程序
Android上的应用程序可以通过标准API访问核心移动设备功能.应用程序可以访
问设备上的核心数据,如联系人信息,短消息;使用设备的任何硬件资源,如摄像头、
GPS等。通过互联网,应用程序可以声明它们的功能可供其他应用程序使用。
2。3。3 应用程序是在平等的条件下创建的
移动设备上的核心应用程序可以被替换或扩展,即使是拨号程序或主屏这样的核心
组件也一样。
2。3.4 应用程序可以轻松地嵌入网络功能支持
Android天生就是为访问互联网而生的,它内置了强大的Web浏览器引擎,支持
HTML5标准,因此应用程序可以轻松地嵌入HTML、JavaScript和样式表,还可以通过
WebView显示网络内容等.
2。3.5 应用程序可以并行运行
从1。0版本起,Android就支持多任务特性,是一种完整的多任务环境,可以像
Windows桌面应用系统一样,允许多个应用程序并行运行.而ios直到4.2版本才解决此
问题。
第 6页( 共18页)
3 播放系统设计
3.1 Android MP3在线播放系统原理分析
在线播放器并不是基于web 页面的播放,而是通过应用程序对音乐网站上的MP3
资源文件进行解析,同时将解析出来的信息显示到音乐盒界面,包括音乐文件名、音乐文
件大小、歌词文件名等,这些资源文件构成了在线播放的原始数据,通过这些数据读取
音乐文件并且下载到缓冲区或SD 卡,然后利用Android 提供的应用于多媒体操作的类
MediaPlayer 对MP3 文件进行播放,而所谓的边下载边播放,从本质上也是对文件下载
之后再在播放,只是将下载和播放两个功能分别定义在两个线程中,使得二者可以异步
进行,这里面涉及到了线程通信,即播放当前文件的时间如果小于源文件的当前播放位
置时,就把播放停止,等待下载一段时间,当下载的文件可以支持播放后在继续播放
[
6]
。
3。2 平台整体架构设计
Android 平台的在线播放器整体架构设计如图3-1 所示,首先搭建一个MP3 网站,
将MP3 基本信息定义在服务端,Android 客户端定义一些接口用来与服务器通信,主
要使用HTTP 协议读取网站内容,同时将网站的资源信息进行解析或下载,得到具体的
MP3 文件信息到本地
[
7]
.
图3-1 音乐盒与网站通信
第 7页( 共18页)
3.3 UI设计与实现
3。3.1 界面设计
首先,播放系统是用LinerLayout作为一个大框架进行总体布局。接着考虑要用的
组件依次往框架里添加.如Button、Textview等
[
12
]
。关键代码如下:
<?xml version="1。0” encoding="utf-8”?〉
android:layout_width=”match_parent” android:layout_height=”match_parent” android:orientation=”vertical” > 。。 … android:id="@+id/tableRow1" android:layout_width=”match_parent” android:layout_height="wrap_content" > 〈Button android:id="@+id/button1” android:layout_width=”wrap_content" android:layout_height=”wrap_content" android:text="上一曲" /> …。. ……。
随后调整组件的位置,组件于组件之间的距离等.最后需要设计好的音乐播放器面
展示在界面上需要用到Activity的OnCreate方法
[
13]
.重要代码如下:
super。onCreate(savedInstanceState);
第 8页( 共18页)
setContentView(R。);
设计好的播放系统如图3—2所示.
图3—2 音乐播放系统
3.3。2用户交互
要实现用户界面交互就要使用Activity和Intent。Activity是应用程序的界面框架,
负责动态加载各种用户界面视图,实现底层的消息传递等.在AVD中一个手机的界面就
是一个Activity,在众多activity中,配置了
先运行。
创建Activity要注意的是一个activity就是一个类,并且要继承android平台提供的
Activity.需要复写onCreate()方法。并且每一个activity都需要在Android。
文件中进行配置。Activity之间是通过Intent来进行页面跳转的。Intent在两个Activity
之间传送数据,这两个Activity并不要求在通一个应用程序下,在不同应用程序中也可
以。Activity之间是通过Intent来进行页面跳转的
[14]
。这两个Activity并不要求在同一个
应用程序下,在不同的应用程序中也是可以的.
4 在线播放的实现
4.1 获取资源文件
与服务器进行通信首先在AndroidManifest。xml 设置访问权限:〈uses—permissio
n android:name=”ET”/〉服务器端定义一个resourse。xml
的文件,将MP3 信息写入文件供客户端读取解析.读取资源文件之前首先要下载文件,
下载文件的过程通常使用传统的下载文件过程进行下载,将得到的资源文件保存在一个
字符串数组中,部分代码如下:
//创建一个URL对象
url=new URL(urlStr);
第 9页( 共18页)
//创建一个Http对象
HttpURLConenction urlConn=(HttpURLConnection)nnection();
//使用IO流读数据
buffer=new BufferedReader(new InputStreamReader(utStream()));
while((line = ne())! =null){
sb。append(line);}
}
将得到的字符串sb 传入到自定义的handler 中,解析内部信息,如文件名、文件大
小等,并将信息存入到实体类Mp3Info 的对象集合中.解析资源文件用到Android 类
SAXParserFactory,将自定义的ContentHandler 信息传入到该类的实例,最终将解析结果
返回给一个Mp3Info 集合
[15]
,解析器部分代码如下:
//创建一个SAXParserFactory
SAXParserFactory saxParserFactory=SAXParserFactory。newInstance();
List〈Mp3Info> infos = new ArrayList XMLReader xmlReader = Parser().getXMLReader(); Mp3ListContentHandler mp3ListContentHandler = new Mp3ListContentHandler(infos); //为XMLReader 设置内容处理器 tentHandler(mp3ListContentHandler); //开始解析文件 (new InputSource(new StringReader (xmlStr))); SAX 工作原理 [ 9] :对文档进行顺序扫描,当扫描到文档开始与结束、元素开始与结 束,产生事件通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直 至文档结束。将文件解析成功后将信息定义在一个Adapter 中,并显示在android 客户 端。 第 10页( 共18页) 4.2 下载音乐和播放音乐的设计与实现 下载和播放过程状态图如图4-1所示。 图4-1 音乐播放下载异步示意图 程序的工作原理是通过Runnable所发起的运行线程,利用运行线程的特性,在线下 载远程网站的mp3文件,通过网络传输(URLConnection)的方式进行下载。与在存储上 有些差别,这是将下载的文件存储到缓冲区或者SD 卡中,这样当播放文件的时候,可 以直接在缓冲区或者SD 卡中选择源文件进行播放 [10] ,下载文件的过程关键代码如下: downloadingMediaFile = new File (downLoadCacheDir,"downloading— Media_" + (counter++) + ”.dat"); //在缓冲区定义一个类型为。dat 的文件,用于存储下载的数据 FileOutputStream out = new FileOutputStream(downloadingMediaFile); 。.. byte buf[] = new byte[16384]; int numread = mediaCnStream。read(buf); 第 11页( 共18页) // mediaCnStream 即来自服务端的输入流 out。write(buf, 0, numread); //将输入流数据写入缓冲区里的固定文件上述下载过程应定义在一个单独的线程中, 以实现以播放的异步,关键代码如下: Runnable r = new Runnable() { public void run() { downloadStream(mediaUrl,lrcUrl);//调用下载文件函数 } }; new Thread(r)。start(); 4.3 播放器播放流程 播放器的播放涉及到与服务器通信,下载文件、存储文件、播放文件等独立功能, 同时也对下载和播放两个功能进行连带设计和实现.如流程图4-2。 第 12页( 共18页) 图 4-2 播放器详细流程图 播放文件的关键代码如下: File bufferedFile = new File(downLoadCacheDir, "playingMedia” + (counter++) + ”。dat");//缓冲区定义一个.dat 文件,用于将下 载的文件复制到该文件中 le(downloadingMediaFile,bufferedFile); //主要用于将下载的文件downloadingMediaFile 复制到bufferedFile 中,为播放提 第 13页( 共18页) 供源文件 MediaPlayer mPlayer = new MediaPlayer(); FileInputStream fis = new FileInputStream(bufferedFile); mPlayer。setDataSource(()); //此方法返回与流相关联的文件说明符。 mPlayer。setAudioStreamType(_MUSIC); // 设置播放类型为播放流文件 Runnable updater = new Runnable() { public void run() { (); }}; (updater); 播放文件被定义在一个线程中,该线程运行在主线程队列,当播放文件时间与播放 位置差距小于一定值时,如下: mediaPlayer。getDuration() — rentPosition() <= 2000 即暂停播放,等待将下载的文件覆盖播放文件后,继续执行播放,这样就基本实现 了播放与下载的异步与通信,关键代码如下: pause(); //执行暂停播放 FileSystemUtil。copyFile(downloadingMediaFile,bufferedFile); // 等待将下载的文件覆盖播放文件 mediaPlayer = MediaPlayerService。createMediaPlayer(bufferedFile); //重新创建播放文件 if(mediaPlayer。getDuration() — mediaPlayer。getCurrentPosition() 〈= 2000) start(mp3Info); //重新执行播放 第 14页( 共18页) 5 系统测试 首先打开Eclipse软件,然后开启虚拟机.可以通过多种方法来运行编写的程序 [ 16] 。 如其中一个方法是解锁虚拟机后,在虚拟机桌面上上找到编写的程序的图标,然后点击 程序图标运行。还可以用选中列表中所编写函数,点击运行按钮运行 的方法。出现如图5—1所示界面后选择Android Application,最后点击OK键,程序 就开始运行。虚拟机界面所显示效果图如5—2所示. 5-1 对话框 第 15页( 共18页) 图5-2 播放效果 6 总结 在Android 平台下开发并设计了一套C/S 标准,此标准实现了服务端与Android 客户端的通信,在客户端丰富了音乐播放的各项功能,提高了用户体验,本文重点是将音 乐的下载和播放通过线程分别处理,实现了两者同步执行、异步处理的效果。通过深入 研究Android 平台架构,以及多媒体播放和线程知识,最终完成了在Android 客户端的 播放器边下载边播放核心功能。但论文中仍然存在不足之处。如播放界面设计过于简单 也不够美观,播放器功能不够全面等问题。在后续开发中,还应努力学习,继续探索。 第 16页( 共18页) 参考文献: [1] 赵宏伟.Android NDK开发环境实现与应用[J].电脑知识与技术,2010(35)。 [2] http:// 。 [3] 李宁。Android开发完全讲义,中国水利水电出版社[M],2010.6。 [4] 韩超,梁泉.Android系统原理及开发要点详解[M],2010。1。 [5] 郝玉龙。Android程序设计基础[M].北京:清华大学出版社,北京交通大学出版社,2011。10。 [6] (美)埃克尔 著 陈翰鹏 译,Java编程思想(第4版)[M],机械工业出版社,2007。6. [7] 于志龙,王世江。Google Android SDK开发范例大全[M],人民邮电出版社,2010.6. [8] 吴亚峰,苏亚光.Android应用案例开发大全[M],北京:人民邮电出版社,2011.9。 [9] 李刚.疯狂Android讲义[M]。北京:电子工业出版社,2011.7。 [10] 杨丰盛.Android应用开发揭秘[M],机械工业出版社,2011.3。 [11] linux 公社,www。linuxidc。com。 [12] (美) Ed Burnette 著 张波,杨越等译,北京人民邮电出版社[M],2009。11. [13] 邓凡平.深入理解 Android ,北京机械工业出版社[M],2011。9。 [14] 李晓。基于 Android 平台的手持终端应用功能开发与设计[J],北京交通大学,2010。 [15] Mark ing Android2。Apress,2010。 [16] 杨丰盛。Android应用开发揭秘[M].北京:机械工业出版社,2010.4。 第 17页( 共18页)
2024年7月23日发(作者:桂瑞绣)
添加学校名称
本科毕业论文(设计)材料册
姓 名:
学 号:
年 级: 2010级2班
所在 院系 名称: 数学与信息工程系
专 业 名 称: 计算机科学与技术
指导教师姓名:
指导教师职称:
基于Android平台的在线音乐播放系统设计与实现
数学与信息工程系 计算机科学与技术专业 XX级 XX
指导教师:XX
摘 要:手机运用越来越广泛,人们对手机软件的要求越来越高,音乐播放器就是其中一项重
要软件.本文以Android开发平台为基础,首先介绍了Android开发平台、以及当前发展现状.然后使
用Java语言和开发工具Eclipse对音乐播放器代码进行编写,通过设计能实现音乐的播放、暂停、上
一曲、下一曲等功能。这款软件不仅可以下载网站上的音乐到本地,更主要的是它支持音乐的边下
载边播放的功能。
关键词:安卓;音乐播放器;开发与设计
Abstract:Mobile phone use more and more widely,People more and more high to the requirement of
mobile phone software,Music player is one of the important software。 This article takes the Android
development platform as a foundation. First it briefly introduces the Android development platform,as well
as the current domestic and foreign development present situation。 Then use the Java language and
Eclipse development tools to write music player code,The design can realize music play, pause, a song,
the next song and other software can not only download music on the website,but also
support the music playing while downloading more importantly.
Key words:Android:
Android; music player; The development and design
第 1页( 共18页)
目录
摘要
Abstract
1
1
第1章 绪论
1。1 研究背景及现状
1.2 研究目的
第2章 认识Android
2。1 智能手机操作系统
2.2 关于Android
5
5
5
6
6
6
6
6
5
6
4
4
2.2.1 Android基本概念
2.2。1 Android简介
2。3 Android的基本特点
2。3.1完全的开放性
2。3。2无界限的应用程序
2.3。3应用程序是在平等的条件下创建的
2。3。4应用程序可以轻松地嵌入网络功能支持
2。3。5应用程序可以并行运行
第3章 播放系统设计
3。1 Android MP3在线播放系统原理分析
3。2平台整体架构设计
3。3 UI设计与实现
3。3.1 界面设计
3。3。2 用户交互
第4章 在线播放的实现
4.1获取资源文件
7
7
7
8
9
9
第 2页( 共18页)
4.2 下载音乐和播放音乐的设计与实现
4。3 播放器播放流程
第5章 系统测试
第 6章 总结
参考文献
11
12
15
16
17
第 3页( 共18页)
1 绪论
1.1 研究背景及现状
自1983年世界上第一款商用手机发布到现在,手机已经成为人们必不可少的通信
工具.从最初没有显示屏幕到黑白显示屏,再到现在的彩色显示屏,手机显示技术已经完
成3次大的飞跃。随着达到高清电视全屏显示效果的新一代显示屏出现,手机业将掀起
又一轮革新风暴
[1]
。消费者对手机产品在商务和娱乐方面的要求越来越高,让手机成为
便携式的商务或娱乐终端。在硬件的推动下,用户对手机软件的功能需求也越来越高。
而Android系统也在不断更新以满足需求,因此手机多媒体的技术的开发也就不可避免
成为热点。
在无线网络高速接入互联网技术迅速发展的时代,网络已经渗透到社会的各个领域,
尤其是移动设备领域。通过移动设备用户可以随时随地从互联网上获取信息.随着网络
技术和智能移动设备的发展,用户的需求也越来越高,要求智能移动设备提供更多更好
的即时服务.当今时代手机尤其是智能机不再是单纯的通讯工具了,如今的手机更多的
是作为我们的娱乐工具、生活帮手。我们需要随时用手机查看天气预报、查询路线等,
也要用手机打游戏、看电影、听音乐等。
1。2 研究意义
在线音乐服务是手机用户最重要的娱乐需求之一。人们习惯在等车、坐车、排队等
人的时候用手机来听音乐;现金社会生活紧张,而欣赏音乐史也是其中最好的舒缓压力
的方式之一。这些都让音乐作为人们不可或缺的一部分,为了让人们可以随时随地享受
音乐带来的美妙享受,需要开发人员设计出好用、实用的在线播放系统。
随着4G 时代到来,在移动终端与网络互联来获取网络资源越来越受到人们欢迎,
对多媒体在线浏览或下载需求量也越来越大, 因此针对Android 系统而开发的多媒体
与网络的互联变得越来越有市场,目前android 手机在线播放功能尚未完善,为实现在
线的音乐播放,提高用户体验,本文将通过缓存和流媒体播放技术,逐步完善MP3 音乐
文件的边下载边播放功能。
第 4页( 共18页)
2 认识
Android
2.1 智能手机操作系统
智能手机系统是一种运算能力及功能比传统的手机系统更强大的系统.使用最多
的有:Android、IOS、Symbian、Windows Phone和BlackBerry OS。智能手机能够显示与
个人电脑所显示出来一致的正常网页,它具有独立的操作系统以及良好的用户界面,拥
有很强大的应用扩展性、能方便随意地安装和删除应用程序
[
2
]
.
2.2 关于Android
2。2.1 Android基本概念
Android 一次本意是指“机器人”,当然现在大家都知道它是Google推出的开源手
机操作系统.Android基于Linux平台,由操作系统、中间件、用户界面和应用软件组成,
号称是首个为移动终端打造的真正开放和完整的移动软件。它是由一个30多家科技公
司和手机公司组成的“开放手机联盟”共同研发的,这将大大降低新型手机设备的研发
成本。完全整合的全移动功能性产品成为“开放手机联盟”的最终目标
[3
]
。
2.2。2 Android简介
Android已经从最初的智能电话领域主机进入教育、医疗、军事、汽车、家居等重
要领域。它一路披荆斩棘,攻城拔寨,发展势头有目共睹,已经成为移动平台领域当之
无愧的王者。目前,已有众多设备开始使用Android系统,比如智能手机、智能电视、
平板电脑、智能相机等;相信在不就的未来,还将有更多采用Android系统的高科技术
产品进入我们的生活
[4
]
。
Android作为Google移动互联网战略的重要组成部分,将进一步推进“随时随地为
每个人提供信息"这一企业目标的实现。Google的目标是让移动通信不依赖于设备,甚
至是平台。出于这个目的,Android将完善而不是替代Google长期以来推行的移动发展
战略:通过与全球各地的手机制造商和移动运营商成为合作伙伴,开发既实用又有吸引
力的移动服务,并推广这些产品.
Android平台的研发队伍阵容强大,包括Google、HTC、T—Mobile、高通、摩托罗
第 5页( 共18页)
拉、三星、LG以及中国移动在内的30多家企业都将基于该平台开发手机的新型业务,
应用之间的通用性和互联性将在最大程度上得到保持.“开放手机联盟”表示,Android
平台可以促使移动设备的创新,让用户体验到优质的移动服务。同时,开发商也将得到
一个新的开放级别,更方便地精心协同合作,从而保障新型移动设备的研发速度.因此
Android是第一个完整、开放、免费的手机平台
[4]
。
2.3 Android 的特点
[5
]
2。3。1完全的开放性
Google与开放手机联盟合作开发了Android,Google通过与运营商、设备制造商、
开发商和其他有关各方结成深层次的合作伙伴关系,希望通过建立标准化、开放式的移
动电话软件平台,在移动产业内形成一个开放式的生态系统。
2。3。2 无界限的应用程序
Android上的应用程序可以通过标准API访问核心移动设备功能.应用程序可以访
问设备上的核心数据,如联系人信息,短消息;使用设备的任何硬件资源,如摄像头、
GPS等。通过互联网,应用程序可以声明它们的功能可供其他应用程序使用。
2。3。3 应用程序是在平等的条件下创建的
移动设备上的核心应用程序可以被替换或扩展,即使是拨号程序或主屏这样的核心
组件也一样。
2。3.4 应用程序可以轻松地嵌入网络功能支持
Android天生就是为访问互联网而生的,它内置了强大的Web浏览器引擎,支持
HTML5标准,因此应用程序可以轻松地嵌入HTML、JavaScript和样式表,还可以通过
WebView显示网络内容等.
2。3.5 应用程序可以并行运行
从1。0版本起,Android就支持多任务特性,是一种完整的多任务环境,可以像
Windows桌面应用系统一样,允许多个应用程序并行运行.而ios直到4.2版本才解决此
问题。
第 6页( 共18页)
3 播放系统设计
3.1 Android MP3在线播放系统原理分析
在线播放器并不是基于web 页面的播放,而是通过应用程序对音乐网站上的MP3
资源文件进行解析,同时将解析出来的信息显示到音乐盒界面,包括音乐文件名、音乐文
件大小、歌词文件名等,这些资源文件构成了在线播放的原始数据,通过这些数据读取
音乐文件并且下载到缓冲区或SD 卡,然后利用Android 提供的应用于多媒体操作的类
MediaPlayer 对MP3 文件进行播放,而所谓的边下载边播放,从本质上也是对文件下载
之后再在播放,只是将下载和播放两个功能分别定义在两个线程中,使得二者可以异步
进行,这里面涉及到了线程通信,即播放当前文件的时间如果小于源文件的当前播放位
置时,就把播放停止,等待下载一段时间,当下载的文件可以支持播放后在继续播放
[
6]
。
3。2 平台整体架构设计
Android 平台的在线播放器整体架构设计如图3-1 所示,首先搭建一个MP3 网站,
将MP3 基本信息定义在服务端,Android 客户端定义一些接口用来与服务器通信,主
要使用HTTP 协议读取网站内容,同时将网站的资源信息进行解析或下载,得到具体的
MP3 文件信息到本地
[
7]
.
图3-1 音乐盒与网站通信
第 7页( 共18页)
3.3 UI设计与实现
3。3.1 界面设计
首先,播放系统是用LinerLayout作为一个大框架进行总体布局。接着考虑要用的
组件依次往框架里添加.如Button、Textview等
[
12
]
。关键代码如下:
<?xml version="1。0” encoding="utf-8”?〉
android:layout_width=”match_parent” android:layout_height=”match_parent” android:orientation=”vertical” > 。。 … android:id="@+id/tableRow1" android:layout_width=”match_parent” android:layout_height="wrap_content" > 〈Button android:id="@+id/button1” android:layout_width=”wrap_content" android:layout_height=”wrap_content" android:text="上一曲" /> …。. ……。
随后调整组件的位置,组件于组件之间的距离等.最后需要设计好的音乐播放器面
展示在界面上需要用到Activity的OnCreate方法
[
13]
.重要代码如下:
super。onCreate(savedInstanceState);
第 8页( 共18页)
setContentView(R。);
设计好的播放系统如图3—2所示.
图3—2 音乐播放系统
3.3。2用户交互
要实现用户界面交互就要使用Activity和Intent。Activity是应用程序的界面框架,
负责动态加载各种用户界面视图,实现底层的消息传递等.在AVD中一个手机的界面就
是一个Activity,在众多activity中,配置了
先运行。
创建Activity要注意的是一个activity就是一个类,并且要继承android平台提供的
Activity.需要复写onCreate()方法。并且每一个activity都需要在Android。
文件中进行配置。Activity之间是通过Intent来进行页面跳转的。Intent在两个Activity
之间传送数据,这两个Activity并不要求在通一个应用程序下,在不同应用程序中也可
以。Activity之间是通过Intent来进行页面跳转的
[14]
。这两个Activity并不要求在同一个
应用程序下,在不同的应用程序中也是可以的.
4 在线播放的实现
4.1 获取资源文件
与服务器进行通信首先在AndroidManifest。xml 设置访问权限:〈uses—permissio
n android:name=”ET”/〉服务器端定义一个resourse。xml
的文件,将MP3 信息写入文件供客户端读取解析.读取资源文件之前首先要下载文件,
下载文件的过程通常使用传统的下载文件过程进行下载,将得到的资源文件保存在一个
字符串数组中,部分代码如下:
//创建一个URL对象
url=new URL(urlStr);
第 9页( 共18页)
//创建一个Http对象
HttpURLConenction urlConn=(HttpURLConnection)nnection();
//使用IO流读数据
buffer=new BufferedReader(new InputStreamReader(utStream()));
while((line = ne())! =null){
sb。append(line);}
}
将得到的字符串sb 传入到自定义的handler 中,解析内部信息,如文件名、文件大
小等,并将信息存入到实体类Mp3Info 的对象集合中.解析资源文件用到Android 类
SAXParserFactory,将自定义的ContentHandler 信息传入到该类的实例,最终将解析结果
返回给一个Mp3Info 集合
[15]
,解析器部分代码如下:
//创建一个SAXParserFactory
SAXParserFactory saxParserFactory=SAXParserFactory。newInstance();
List〈Mp3Info> infos = new ArrayList XMLReader xmlReader = Parser().getXMLReader(); Mp3ListContentHandler mp3ListContentHandler = new Mp3ListContentHandler(infos); //为XMLReader 设置内容处理器 tentHandler(mp3ListContentHandler); //开始解析文件 (new InputSource(new StringReader (xmlStr))); SAX 工作原理 [ 9] :对文档进行顺序扫描,当扫描到文档开始与结束、元素开始与结 束,产生事件通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直 至文档结束。将文件解析成功后将信息定义在一个Adapter 中,并显示在android 客户 端。 第 10页( 共18页) 4.2 下载音乐和播放音乐的设计与实现 下载和播放过程状态图如图4-1所示。 图4-1 音乐播放下载异步示意图 程序的工作原理是通过Runnable所发起的运行线程,利用运行线程的特性,在线下 载远程网站的mp3文件,通过网络传输(URLConnection)的方式进行下载。与在存储上 有些差别,这是将下载的文件存储到缓冲区或者SD 卡中,这样当播放文件的时候,可 以直接在缓冲区或者SD 卡中选择源文件进行播放 [10] ,下载文件的过程关键代码如下: downloadingMediaFile = new File (downLoadCacheDir,"downloading— Media_" + (counter++) + ”.dat"); //在缓冲区定义一个类型为。dat 的文件,用于存储下载的数据 FileOutputStream out = new FileOutputStream(downloadingMediaFile); 。.. byte buf[] = new byte[16384]; int numread = mediaCnStream。read(buf); 第 11页( 共18页) // mediaCnStream 即来自服务端的输入流 out。write(buf, 0, numread); //将输入流数据写入缓冲区里的固定文件上述下载过程应定义在一个单独的线程中, 以实现以播放的异步,关键代码如下: Runnable r = new Runnable() { public void run() { downloadStream(mediaUrl,lrcUrl);//调用下载文件函数 } }; new Thread(r)。start(); 4.3 播放器播放流程 播放器的播放涉及到与服务器通信,下载文件、存储文件、播放文件等独立功能, 同时也对下载和播放两个功能进行连带设计和实现.如流程图4-2。 第 12页( 共18页) 图 4-2 播放器详细流程图 播放文件的关键代码如下: File bufferedFile = new File(downLoadCacheDir, "playingMedia” + (counter++) + ”。dat");//缓冲区定义一个.dat 文件,用于将下 载的文件复制到该文件中 le(downloadingMediaFile,bufferedFile); //主要用于将下载的文件downloadingMediaFile 复制到bufferedFile 中,为播放提 第 13页( 共18页) 供源文件 MediaPlayer mPlayer = new MediaPlayer(); FileInputStream fis = new FileInputStream(bufferedFile); mPlayer。setDataSource(()); //此方法返回与流相关联的文件说明符。 mPlayer。setAudioStreamType(_MUSIC); // 设置播放类型为播放流文件 Runnable updater = new Runnable() { public void run() { (); }}; (updater); 播放文件被定义在一个线程中,该线程运行在主线程队列,当播放文件时间与播放 位置差距小于一定值时,如下: mediaPlayer。getDuration() — rentPosition() <= 2000 即暂停播放,等待将下载的文件覆盖播放文件后,继续执行播放,这样就基本实现 了播放与下载的异步与通信,关键代码如下: pause(); //执行暂停播放 FileSystemUtil。copyFile(downloadingMediaFile,bufferedFile); // 等待将下载的文件覆盖播放文件 mediaPlayer = MediaPlayerService。createMediaPlayer(bufferedFile); //重新创建播放文件 if(mediaPlayer。getDuration() — mediaPlayer。getCurrentPosition() 〈= 2000) start(mp3Info); //重新执行播放 第 14页( 共18页) 5 系统测试 首先打开Eclipse软件,然后开启虚拟机.可以通过多种方法来运行编写的程序 [ 16] 。 如其中一个方法是解锁虚拟机后,在虚拟机桌面上上找到编写的程序的图标,然后点击 程序图标运行。还可以用选中列表中所编写函数,点击运行按钮运行 的方法。出现如图5—1所示界面后选择Android Application,最后点击OK键,程序 就开始运行。虚拟机界面所显示效果图如5—2所示. 5-1 对话框 第 15页( 共18页) 图5-2 播放效果 6 总结 在Android 平台下开发并设计了一套C/S 标准,此标准实现了服务端与Android 客户端的通信,在客户端丰富了音乐播放的各项功能,提高了用户体验,本文重点是将音 乐的下载和播放通过线程分别处理,实现了两者同步执行、异步处理的效果。通过深入 研究Android 平台架构,以及多媒体播放和线程知识,最终完成了在Android 客户端的 播放器边下载边播放核心功能。但论文中仍然存在不足之处。如播放界面设计过于简单 也不够美观,播放器功能不够全面等问题。在后续开发中,还应努力学习,继续探索。 第 16页( 共18页) 参考文献: [1] 赵宏伟.Android NDK开发环境实现与应用[J].电脑知识与技术,2010(35)。 [2] http:// 。 [3] 李宁。Android开发完全讲义,中国水利水电出版社[M],2010.6。 [4] 韩超,梁泉.Android系统原理及开发要点详解[M],2010。1。 [5] 郝玉龙。Android程序设计基础[M].北京:清华大学出版社,北京交通大学出版社,2011。10。 [6] (美)埃克尔 著 陈翰鹏 译,Java编程思想(第4版)[M],机械工业出版社,2007。6. [7] 于志龙,王世江。Google Android SDK开发范例大全[M],人民邮电出版社,2010.6. [8] 吴亚峰,苏亚光.Android应用案例开发大全[M],北京:人民邮电出版社,2011.9。 [9] 李刚.疯狂Android讲义[M]。北京:电子工业出版社,2011.7。 [10] 杨丰盛.Android应用开发揭秘[M],机械工业出版社,2011.3。 [11] linux 公社,www。linuxidc。com。 [12] (美) Ed Burnette 著 张波,杨越等译,北京人民邮电出版社[M],2009。11. [13] 邓凡平.深入理解 Android ,北京机械工业出版社[M],2011。9。 [14] 李晓。基于 Android 平台的手持终端应用功能开发与设计[J],北京交通大学,2010。 [15] Mark ing Android2。Apress,2010。 [16] 杨丰盛。Android应用开发揭秘[M].北京:机械工业出版社,2010.4。 第 17页( 共18页)