基于Android 的多媒体播放器的设计与实现
文/郑逸凡1,2
移动设备特别是智能手机,已经在人们的生活中扮演着重要的角色,听音乐看视频是所有智能手机中必备的一项功能。本文对基于Android 系统的多媒体播放器进行了技术研究和功能实现,该播放器操作简单方便,基本可以满足用户的视听需求。
【关键词】Android 播放器 多媒体 移动应用
随着智能手机的普及,越来越多的人通过手机观看视频和欣赏音乐,这给人们的生活带来很大的便捷。Android 是一种基于Linux 的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑。本文介绍的多媒体播放器就是基于Android 进行开发的,主要模块有:播放器界面、播放音乐、播放视频以及多媒体文件管理。
1 多媒体播放器界面设计
多媒体播放器界面旨在为用户提供可视的操作界面,需要在用户界面设计中提供进度控制、开始、快退、快进、暂停等控件。效果如图1 所示。
设置项目主题区域, 利用LinearLayout和TextView 两种XML 元素进行布局。媒体播放区域用于播放媒体文件, 需要使用SurfaceView 控件。SurfaceView 控件以流的方式来显示媒体文件。控制区主要由快退、暂停、开始和快进组成。设计要求:控制区域水平居中,相邻控件要有一定的间隙,开始和暂停按钮不能同时出现。进度区域要求显示媒体文件总时长、已播放时长、进度,选择LinearLayout、SeekBar 和TextView 等XML元素进行布局。主要代码为:
<SeekBar android:id=”@+id/seekbar”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:layout_weight=”1”
android:layout_marginLeft=”2.0dip”
android:layout_marginRight=”2.0dip”/>
2 播放音乐
本模块要求实现音乐文件的播放,在播放界面上显示音乐的文件名、播放的时间、总的时间、音乐播放控制等。效果如图2 所示。MediaPlayer类用于管理媒体播放的操作,android 多媒体框架支持播放不同位置存放的多媒体资源, 如: 本地资源、内部URI和外部URL。MediaPlayer 类的构造函数比较简单,只有一个无参的构造函数:MediaPlayer()。首先, 在onCreate() 方法中获取XML 布局文件中的控件,然后通过Intent获得播放媒体的位置,最后初始化MediaPlayer,设置媒体准备好的监听器和媒体播放完成的监听器,并播放音乐。开始和暂停按钮不能同时出现,当开始播放时,启动进度条更新任务线程。快进和快退都需要在播放音乐的情况下执行,改变时间的幅度都设置为10s。
时间进度栏的更新主要通过TimerTask 任务线程发送UI 消息来实现。TimerTask 类表示一个任务,在TimerTask 子类中需要实现run方法,首先要定义一个TimerTask 的子类,然后在主程序中分别定义一个Timer 对象和TimerTask 对象,把TimerTask 对象作为Timer对象的schedule() 方法的参数进行任务调度。主要代码为:
public class MyTask extends TimerTask
{
public void run(){
Message message=new Message();
message.what=1;
handler.sendMessage(message);3 播放视频
本模块要求实现视频文件的播放,在播放界面上显示视频文件的名称、视频图像、播放的时间、总的时间、视频播放控制等。效果如图3 所示。
VideoView 是SurfaceView 的子类,用于显示一个视频文件。VideoView 类能够加载来自不同数据源的图像,并可以设置视频的控制栏,能够对视频进行计算测量,使其可以应用
在各种布局管理器中。
首先给SurfaceView 添加CallBack 监听,然后设置MediaPlayer 在指定的Surface 中利用prepareAsync 进行播放。为了可以播放视频或者使用Camera 预览,需要指定其Buffer 类型。当prepare 完成后,触发onPrepared 方法,在该方法内实现视频播放。首先获取视频的宽度和高度,如果超出了当前屏幕的大小,则需要进行缩放。主要代码为:
vWidth=player.get Video Width();
vHeight=player.get Video Height();
i f ( v W i d t h > c u r r D i s p l a y .
getWidth()||vHeight>currDisplay.getHeight()){
f loa t wRa t io=( f loa t )vWidth/ ( f loa t )
currDisplay.getWidth();
f loa t hRa t io=( f loa t )vHe ight / ( f loa t )
currDisplay.getHeight();
}
4 管理多媒体文件
本模块要求浏览手机目录下的音频和视频文件,以便可以在多媒体播放器上选择播放。主要的原理是:首先定义一个数组用来存放可支持的多媒体文件的后缀,然后使用listFiles()方法查找出当前目录下的文件,最后将这些文件的后缀和数组中的元素进行比较,检查是否属于多媒体文件。效果如图4 所示。
定义列出多媒体文件的界面布局文件,使用一个EditText 表示查询目录,使用一个Button 表示查询按键,使用一个ListView 来显示文件。在onCreate 方法中加载布局文件,获得相关的控件对象。打开指定路径的文件夹,获得多媒体文件和文件夹信息,将其保存在集合中,并传人到ListView 中进行显示。定义一个BaseAdapter 的子类作为文件列表适配器,实现getCount()、getItem()、getItemId()、
getView()方法。主要代码为:
File file=new File(pathEditText.getText().
toString());
if(file.isFile()){
openFile(pathEditText.getText().toString());
}
else
g e tFi l eDi r ( p a t hEd i tTe x t . g e tTe x t ( ) .
toString());
5 总结
本文介绍了如何在Android 平台上设计多媒体播放器,本项目主要涉及的关键技术包括:播放控制条的控制、消息处理、声音的播放、视频图像的显示、多媒体文件的搜索等。
参考文献
[1] 许瑾. 基于Android 平台音乐播放器的设计与实现[D]. 北京邮电大学,2011.
[2] 李刚. 基于Android 平台的智能手机流媒体播放器的研究及实现[D]. 南京邮电大
学,2012.
[3] 聂茹,黄诚灿. 基于Android 系统的音乐播放器设计与实现[J]. 微型电脑应用,
2013,10:23-26.
[4] 李江,曹家庆,陈文生. 手机音乐播放器的设计与实现[J]. 信息通信,2013,
09:128-129.
[5] 郝俊寿,丁艳会. 基于Android 系统的影音播放器研究与实现[J]. 硅谷,2013,
22:20-21.
[6] 叶晓静,黄俊伟. 基于Android 系统的多媒体播放器解决方案[J]. 现代电子技术,
2011,24:73-76.
[7] 单俊丽. 基于Android 的流媒体客户端的研究与设计[D]. 西安电子科技大学,2013.[8] 赵金龙. 基于Android 平台音频播放系统设计与实现[D]. 西安电子科技大学,
2012.
作者简介
郑逸凡(1983-),男,现为福州外语外贸学院教师,福州大学数学与计算机科学学院研究生,主要从事Web 编程和软件开发。
作者单位
1. 福州大学数学与计算机科学学院 福建省福州市 350116
2. 福州外语外贸学院 福建省福州市 350202