《基于Android的视频播放器的设计与实现毕业论文.doc》由会员分享,可在线阅读,更多相关《基于Android的视频播放器的设计与实现毕业论文.doc(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 基于Android的视频播放器的设计与实现毕业论文目 录中文摘要IABSTRACTII目 录III第一章 绪论11.1课题的来源与意义11.2 ANDROID发展现状与前景11.3项目的主要工作和解决的问题21.4系统设计的目标与基本思路31.5论文组织结构3第二章 ANDROID视频播放器相关技术介绍42.1 ANDROID介绍42.2 ANDROID开发平台与相关技术52.2.1 ANDROID-WINDOWS开发环境52.2.2 MEDIAPLAYER视频技术62.2.3 SURFACE、SURFACEVIEW、SURFACEHOLDER三者之间的关系9第三章 系统分析与系统结构设计与
2、实现113.1系统分析113.1.1系统可行性分析113.1.2 系统需求分析113.2系统结构设计12第四章 测试164.1测试环境和条件164.2测试164.3测试结果分析24结 论25参考文献26附 录2833 / 34 第一章 绪论1.1课题的来源与意义在这个信息化的时代, IT业已经成为世界发展的主流,我们对信息技术的依赖远远超过了对我们自己的依赖,计算机和手机已经成为我们日常生活中不可缺少的获得信息的渠道。正因为如此,各种各样的软件层出不穷,我们的生活也因为各种各样的软件变的更有滋有味。不缺乏娱乐性,也不缺乏教育意义,让我们从这些软件中受益匪浅,使我们看到了相比以前的巨大进步。同时
3、,随着科技的发展,计算机越来越精致,手机也越来越智能化,所以我们的依赖性也越来越大,越来越离不开这些给我们提供日常信息的工具。手机也已不再仅仅是简单的人与人通话的工具,而是在很大程度上成为了我们获取信息的一个更好的渠道。一个好的软件,能够标志一个手机品牌的地位。所以,开发一款好的手机软件是相当必要的。以前我们看电影,看视频,都要去电影院或者是影吧,而且时间有限,很不方便;而现在是在电脑上或者手机上看视频,看小说,文档等等。以此看来,一个好的手机视频播放器软件的开发是相当有必要的。作为集通讯与娱乐消费为一体的智能手机,播放器是其中一个必不可少的重要功能,一个贴近用户,方便用户的多功能的播放器也是
4、用户所渴望的,更是开发人员应当致力于的。随着Google推出的Android手机的不断更新换代,技术方面也日趋成熟,一个良好的视频播放器的设计与实现已经成为可能。目前,作为Android的手机用户而言,都有视频播放器的实体应用。但是,对于绝大多少而言,其界面单调,功能单一。比如,界面与其他非智能的手机没有大的区别,而功能上面,也就除了基本的播放控制流程之外,多上一个视频基本信息的显示,同时加上一个对预设定路径的播放列表的展示。因此,开发一款界面友好、炫丽、功能更多的视频播放器,更好的贴近用户,满足用户需求,其应用前景也是相当乐观的。1.2Android发展现状与前景Android是一种基于Li
5、nux的自由与开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导与开发。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商与电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。Android逐渐扩展到平板电脑与其他领域上,如电视、数码相机、游戏机等。2011年第一季度,Android在全球的市
6、场份额首次超过塞班系统,跃居全球第一。 2012年11月数据显示,Android占据全球智能手机操作系统市场76%的份额,中国市场占有率为90%。由此可见,Android占有非常可观的市场前景。具有开源特性的Android平台打破了之前Symbian、Windows mobile等操作系统收取高额授权费用的模式,使得智能手机成本大大的降低。而正是由于它开放源代码,使得手机产生更多个性化的应用。同时,合作方能够在这里得到利润或者创造价值,手机软件行业得到维护协调发展。以Google、苹果和诺基亚为中心各自形成的生态链将以原来数倍的速度推动移动互联网的发展,这正是Google发布Android平台
7、的意义,也是Android平台存在的使命所在。作为Android平台成员之一的中国移动也投资成立了一家通讯公司,专门从事G oogle手机软件的应用以与本地化的软件的开发,比如将在Google手机平台上添加飞信、 输入法等一系列符合国用户使用特色的功能。国众多企业也将眼光投入到Android上面,并启动了相关的计划来深入的理解并发展Android。更多的手机软件开发企业已经或者筹备着将公司进行转型,从其他方向的开发转向到Android的开发。由此可见,无论是在国还是在国外,Android平台对手机软件行业和移动手机平台 将发挥极大地推动作用,而在未来的几年时间里,Android将越发的凸显自己
8、的重要性1。目前国的Android开发还是主要以应用开发为主,主要分成3类:为企业开发应用、开发通用应用(放到Android Market或者其他App Market销售)以与游戏开发(放到Android Market或者其他App Market销售)。第一类开发者一般身处规模较大的公司,这些公司主要为自有品牌或者其他品牌设计手机或者平板电脑的总体方案。除了根据需求对系统进行定制外,更多的工作在于为这些系统编写定制的应用。第二类开发者,一般处于创业型公司或者是独立开发者,他们的盈利方式主要是2种:为国外公司进行外包开发,或者通过Google的移动广告(AdMob)通过广告点击分成。而理论上的通
9、过付费下载的形式来盈利的,现在国鲜见成功者。第三类开发者,目前和第二类开发者类似3。1.3项目的主要工作和解决的问题本课题的研究目的就是要通过对基于Android的多功能视频播放的系统设计与实现,探讨该系统的实现过程,以有效满足Android手机用户在视频播放中常见的需求。本课题的主要容为:(1)根据对Android手机视频播放器功能的了解和分析,从功能和实用的角度出发,设计并实现Android视频播放器;(2)对Android视频播放器进行模块划分;(3)对各模块分析并设计、实现;(4)从功能多样性角度考虑,尽可能添加一些附加的设计方案并实现。1.4系统设计的目标与基本思路本次毕业设计使用E
10、clipse + ADT插件 + DDMS插件搭建的Android开发平台环境,开发语言为Java语言。需要开发出基于Android平台的视频播放器应用程序,并能够在Android手机上运行。基本思路介绍如下:第一步:程序运行时进入主Activity,通过更新或查看文件列表,选择一个视频文件;第二步:读入视频文件,调用Mediaplayer.setDataSource()方法设置文件路径,并通过Mediaplayer.prepare()方法将Mediaplayer对象置为准备状态;第三步:调用Mediaplayer.start()方法播放视频,此时可以调节音量、进度,暂停播放,重置播放等等操作
11、;第四步:播放完成后,Mediaplayer对象进入了PlaybackCompleted状态,此时可以选择其他视频文件进入下一个视频的播放或者退出程序。1.5论文组织结构本文主要由:中英文摘要、目录、绪论、课题相关技术介绍、系统可行性分析、系统需求分析、程序实现、测试、完毕语、参考文献、致谢语以与附录构成。第一章绪论主要分析和介绍背景、课题主要研究的问题以与系统设计的目标与基本思路。第二章主要介绍课题的相关技术。第三章是系统分析以与系统功能的设计与实现,其中包括系统可行性分析和系统需求分析。第四章是程序测试和结果的分析与研究等。最后对全文进行了总结和展望,附录部分为主要功能的函数源代码。第二章
12、 Android视频播放器相关技术介绍2.1 Android介绍Android是“机器人”的意思,是Google公司于2007年11月5日发布的一个机遇Linux平台的开源手机操作系统。该系统由底向上一共分为了4层,如图2-1。每一层对把底层实现封装,并提供调用接口给上一层。 图2-1 Android系统架构 (1) Linux核(Linux Kernel)。Android运行在Linux Kernel2.6之上,但是把Linux核GNU协议约束的部分做了取代。这样,运行在Android上的程序可以用于商业目的。Linux核是硬件和软件层之间的抽象层。 (2) 中间件。中间件包括两部分:核心库
13、和运行时环境(Libraries & Android Runtime)。核心库包括,SurfaceManager,显示系统管理库,负责把2D或3D容 显示到屏幕;MediaFramework,媒体库,负责支持图像,支持多种视频和音频的录制和回放;SQLite,数据库,一个功能十分强大的轻量级嵌入式关系数据库;WebKit浏览器引擎等。运行时环境主要包括一个Dalvik Virtual Machin,Dalvik虚拟机,区别于Java虚拟机的是,每一个Android应用程序都在自己的进程中运行,都有一个属于自己的Dalvik虚拟机,这一点可以让系统在运行时可以达到优化,程序间的影响大大降低。Da
14、lvik虚拟机并非运行Java字节码,而是运行自己的字节码。 (3)应用程序框架。丰富而又可扩展性的视图(View),可以用来构建应用程序,它包括列表(List),网格(Grids),文本框(Textboxs),按钮(Button),可嵌入的Web浏览器等。容提供者(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享他们各自的数据。资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件(LayoutFiles)。通知管理器(Notification Manager)使得应用程序可以在状态栏中显示自
15、己定义的提示信息。活动管理器(Activity Manager)用来管理应用程序的生命周期,并提供常用的导航回退功能。 (4)应用程序。Android系统会置一些应用程序包,包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理器等等。Android应用程序由强大的Java语言来编写,也支持其他一些语言如C、Perl等。其中Java应用最为广泛,其他语言已经就看不到了4。2.2 Android开发平台与相关技术2.2.1 Android-Windows开发环境(1) JDK1.6.0_16:JDK(Java Development Kit)是Sun Microsystems针对
16、Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK。JDK 是整个Java的核心,包括了Java运行环境、Java工具和Java基础类库。SE(J2SE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。EE(J2EE),enterprise edition,企业版,使用这种JDK开发J2EE应用程序,从JDK 5.0开始,改名为Java EE。ME(J2ME),micro edition,主要用于移动设备、嵌入式设备上的java应用程序,从JDK 5.0开始,改名为Java ME。没有JDK的话
17、,无法编译Java程序10。(2) Eclipse-SDK-3.6.2-win32:Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)10。 (3) Android-SDK:SDK(software development kit)称为软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。因此,Android SDK 指的是Andr
18、oid专属的软件开发工具包。(4) ADT_16:Android Development Tools-安卓开发工具。目前Android开发所用的开发工具是Eclipse,在Eclipse编译IDE环境中,安装ADT,为Android开发提供开发工具的升级或者变更,简单理解为在Eclipse下开发工具的升级下载工具2。(5) AVD:AVD的全称为:Android Virtual Device,就是Android运行的虚拟设备,他是Android的模拟器识别。建立的Android要运行,必须创建AVD,每个AVD上可以配置很多的运行项目。创建AVD的方法有两种。一是通过eclipse 开发环境,
19、二是通过命令行创建5。2.2.2 Mediaplayer视频技术在Android系统中,最简单、最常用的视频技术是Mediaplayer接口 ,通过此接口可以播放指定的音频和视频文件,另外也可以通过VideoView来播放视频,虽然VideoView比Mediaplayer简单易用,但定制性不如Mediaplayer,要视情况选择。Mediaplayer播放音频比较简单,但是要播放视频就需要SurfaceView。SurfaceView比普通的自定义View在绘图上更有优势,它支持完全的OpenGL ES库。Mediaplayer能被用来控制音频/视频文件或流媒体的回放,可以在VideoVie
20、w里找到关于如何使用这个类中的方法的例子。使用Mediaplayer时限音频和视频播放的基本步骤,首先生成Mediaplayer对象,根据播放文件从不同的地方使用不同的生成方式;得到Mediaplayer对象后,根据实际需要调用不同的方法,如start()、stop()、pause()、release()等。需要注意的是,在不需要播放的时候要与时释放掉与Mediaplayer对象相连接的播放文件7。图2-2显示了一个Mediaplayer对象被支持的播放控制操作驱动的生命周期和状态。椭圆标识代表Mediaplayer对象可能主流的状态。由一个箭头开始的弧线代表同步的方法调用,而以双箭头开头的弧
21、线代表异步调用方法。通过图2-2可以知道一个Mediaplayer对象有如下状态。当一个MediaPlayer对象被刚刚用new操作符创建或是调用了reset()方法后,它就处于Idle状态。当调用了release()方法后,它就处于End状态。这两种状态之间的时间是MediaPlayer对象的生命周期。在一个新构建的MediaPlayer对象和一个调用了reset()方法的MediaPlayer对象之间有个微笑但十分重要的差别。在Idle状态时,调用getCurrentPosition()、getDuration()、getVideoHeight()、getVideoWidth()、setA
22、udioStreamType(int)、setLooping(boolean)、setVolume(float,float)、pause()、start()、stop()、seekTo(int)、prepare()或者是prepareAsync()方法都是编程错误。当一个MediaPlayer对象处于刚被创建的时候,部的播放引擎和对象的状态都没有改变,在这个时候调用以上方法,框架将无法回调客户端程序注册的OnErrorListener.onError()方法;但若这个MediaPlayer对象调用了reset()方法之后,再调用以上方法,部的播放引擎就会回调客户端注册的OnErrorListe
23、ner.onError()方法,并将错误的状态传入。图2-2 Mediaplayer对象状态所以,一旦一个MediaPlayer对象不再被使用,应立即调用release()方法来释放咋部的播放引擎中与这个MediaPlayer对象关联的资源。资源可能包括如硬件加速组件的单态组件,若没有调用release()方法可能会导致之后 dMediaPlayer对象实例无法使用这个单态硬件资源,从而运行失败。一旦MediaPlayer对象进入了End状态,它不能再被使用,也没有方法迁移到其他状态8。此外,使用new创建的MediaPlayer对象处于Idle状态,而那些通过重载的create()便利方法创
24、建 的MediaPlayer对象却不是处于Idle状态。事实上,如果成功调用了重载的create()方法,那么这些对象已经是处于Prepare状态了。在一般情况下,由于种种原因,一些播放控制操作可能会失败,如不支持视频格式,缺少隔行扫描,分辨率过高,流超时等等。因此,错误报告和回复在这种情况下是非常重要的。有时,由于编程的错误,在处于无效状态的情况下调用了一个播放控制操作可能发生。在所有可能的错误条件下,部的播放器引擎会自动的调用一个由程序自身所提供的OnErrorListener.onError()方法。程序可以通过调用Mediaplayer.setOnErrorListener()方法来注
25、册OnErrorListener。如一旦发生错误,MediaPlayer对象会进入到Error状态。为了重用一个处于Error状态的MediaPlayer对象,可以调用reset()方法把这个对象恢复成Idle状态。注册一个OnErrorListener获知部播放心情发生的错误时良好的编程习惯。在不合法的状态下调用一些方法,如prepare()、prepareAsync()和setDataSource()方法等会抛出IllegalStateException异常。调用setDataSource(FileDescription)方法、setDataSource(String)方法、或者是setD
26、ataSource(Uri)方法、setDataSource(FileDescriptor,long,long)方法,便可以使MediaPlayer对象从Idle状态迁移到Initialized状态。若此时MediaPlayer对象处于其他状态下,调用setDataSource()方法会抛出IllegalStateException异常。在开始播放前,MediaPlayer对象必须进入Prepared状态。在此有两种方法(同步和异步)可以实现。调用Prepare()方法(同步),此方法返回表示MediaPlayer对象已经进入Prepared状态。调用prepareAsync()方法(异步),
27、此方法返回表示MediaPlayer对象进入Preparing状态并返回,而部的播放引擎继续未完成的准备工作。在开始播放时,必须调用start()方法。当方法返回成功时,MediaPlayer对象应当处于Started状态。isPlaying()方法可以被调用来测试某个MediaPlayer对象是否处于Started状态。播放可以被暂停、停止,以与调整当前的播放位置。Pause()方法可以是MediaPlayer对象进入Paused状态。注意Started状态和Paused状态的相互转换在部播放引擎中是异步的。所以可能需要一点时间在isPlaying()方法中更新状态。调用stop()方法会停
28、止播放,并且还会让一个处于Started、Paused、Prepared状态的MediaPlayer对象进入Stopped状态。对一个已经处于Stopped状态的MediaPlayer对象的stop()方法没有影响。调用seekTo()方法可以调整播放的位置。seekTo(int)方法是异步执行的,所以它可以马上返回,但是实际的定位播放操作可能需要一段时间才能完成,尤其是播放流形式的音频/视频。当实际的定位操作完成之后,部播放引擎会调用程序提供的OnSeekComplete()回调方法。在此需要注意的是,seekTo(int)方法也可以在其他状态下调用,比如Prepared、Paused和Pl
29、aybackCompleted状态。此外,当前的音频/视频播放位置,实际上可以调用getCurrentPosition()方法来得到,它可以帮助播发器的应用程序不断更新播放进度。当播放到流的末尾时完成播放。如果调用setlooping(boolean)方法开启了循环模式,那么这个MediaPlayer对象会重新进入Started状态。如果没有开启循环模式,那么部播放引擎会调用OnCompletion.onCompletion()回调方法。一旦调用了该方法,说明这个MediaPlayer对象进入了PlaybackCompleted状态。此时可以再调用start()方法来让这个MediaPlaye
30、r对象进入Started状态6。2.2.3 Surface、SurfaceView、SurfaceHolder三者之间的关系(1) SurfaceSurface就是“表面”的意思。在SDK的文档中,对Surface的描述是这样的:“Handle onto a raw buffer that is being managed by the screen compositor”,翻译成中文就是“由屏幕显示容合成器(screen compositor)所管理的原生缓冲器的句柄”,这句话包括下面两个意思:通过Surface(因为Surface是句柄)就可以获得原生缓冲器以与其中的容。就像在C语言中,可
31、以通过一个文件的句柄,就可以获得文件的容一样;原生缓冲器(rawbuffer)是用于保存当前窗口的像素数据的。引伸地,可以认为Android中的Surface就是一个用来画图形(graphics)或图像(image)的地方。根据Java方面的常规知识,我们知道通常画图是在一个Canvas对象上面进行的,由此,可以推知一个Surface对象中应该包含有一个Canvas对象,事实上的确如此,而且这一点可以很容易通过debug运行程序的方式得到证明。Surface中有一个Canvas成员,专门用于画图的。所以,Surface中的Canvas成员,是专门用于供程序员画图的场所,就像黑板一样;其中的原生
32、缓冲器是用来保存数据的地方;Surface本身的作用类似一个句柄,得到了这个句柄就可以得到其中的Canvas、原生缓冲器以与其它方面的容3。(2) SurfaceViewSurfaceView,顾名思义就是Surface的View,通过SurfaceView就可以看到Surface的部分或者全部的容,下面用一个图来形象地描述一下Surface和SurfaceView的关系:图2-3 Surface与SurfaceView也就是说,Surface是用通过SurfaceView才能展示其中的容。由此来说,SurfaceView中的View之确切的含义应该是viewport即“视口”的意思,类似数据
33、库的设计,假定一个数据表有20个字段,但我们常常只用到其中的5个字段,那么就可以在原数据表的基础上,通过SQL语句CREATEVIEW来创建只包含那5个字段容的view。另一方面,SurfaceView是Android中View的子类。事实上,在Android中所有用于界面展示的类皆为View的子类,包括那些不可见的、各种各样的Layout。所以说,SurfaceView中的View有两个含义:视口(viewport)的意思和SurfaceView是View的派生类在Android中Surface是从Object派生而来,且实现了Parcelable接口。看到Parcelable就让人能很自然
34、地想到数据容器,SurfaceView就是用来展示Surface中的数据的。在这个层面上而言,Surface就是管理数据的地方,SurfaceView就是展示数据的地方3。(3)SurfaceHolderSurfaceHolder是一个接口,其作用就像一个关于Surface的监听器。提供访问和控制SurfaceView背后的Surface 相关的方法 (providingaccess and control over this SurfaceViews underlying surface),它通过三个回调方法,让我们可以感知到Surface的创建、销毁或者改变。在SurfaceView中有一
35、个方法getHolder,可以很方便地获得SurfaceView所对应的Surface所对应的SurfaceHolder。从设计模式的高度来看,Surface、SurfaceView和SurfaceHolder实质上就是广为人知的MVC,即Model-View-Controller。Model就是模型的意思,或者说是数据模型,或者更简单地说就是数据,也就是这里的Surface;View即视图,代表用户交互界面,也就是这里的SurfaceView;SurfaceHolder很明显可以理解为MVC中的Controller(控制器)。这样看起来三者之间的关系就清楚了很多9。第三章 系统分析与系统结构
36、设计与实现3.1系统分析3.1.1系统可行性分析可行性研究是为了弄清楚系统开发的项目是不是可以实现和值得进行研究的过程,实际上是一次大大简化系统分析和系统设计的过程,所以,进行可执行性的分析是非常必要的,也是很重要的,经过最初的设计目标和进行的实时调查得出以下四点的可行性分析:(1) 技术可行性:Eclipse + Android ADT的技术已经较为成熟,通过SUN公司(现被ORCEL公司收购)推出的跨平台、动态的JAVA语言进行开发。(2) 运行可行性:该系统需要Android虚拟机环境,Eclipse中安装ADT,DDMS等Google Android相关插件。其运行环境已经相当稳定,它
37、功能丰富,包括了完备的Android程序的编码、调试、测试和发布功能,其中支持所有Android应用开发相关技术,包括SQLite,Skia,3D制作,Android XML,能够很好的发布Android的应用程序APK包。(3)法律可行性:因为是自主开发设计,所以不会构成侵权,在法律上是可行的。通过以上的可行性分析,将采用Eclipse+Android ADT + DDMS技术,运用JAVA语言进行系统的开发。3.1.2 系统需求分析根据分析需求,这个系统必须实现以下的功能:(1) 实现手机支持的视频格式文件的播放功能。作为播放器,其核心就是能够流畅的播放视频文件。手机一般不会支持对解码要求
38、太高的格式,如rmvb。作为手机硬件能够承载的视频流文件,都应当能够流畅的播放。(2) 能够在手机里面定位视频文件。在本播放器设计中,一个亮点就是自定义一个文件列表,能够访问手机里面任何能够进入的文件。这样,也就能够不需要将视频文件放在一个系统固定的位置,您可以自己新建一个存放视频文件的文件夹,放在任何你想要放的地方。这样,需要播放你的视频文件的时候,直接定位再好不过。(3) 能够智能搜索出所有android sdcard中的视频文件。做视频的智能搜索,也是能够快速定位位于sdcard中的视频文件的另一个快捷的方法。在智能搜索设计中,通过mediascanner进行sdcard中的所有视频文件
39、的扫描,包括自动搜索和手动添加。同时,将其显示到界面。一般,当手机中存放的视频文件过多,但对于新添加的视频文件位置很清楚时,选择手都添加比较好。(4) 能够对视频文件常规信息信息进行读取。当播放视频文件时,视频名称、视频时间长度等信息显示在屏幕相应位置。3.2系统结构设计本次课题设计的Android视频播放器应用程序组要由4个Activity组成,分别是MediaplayerActivity,MediaListActivity,FileChooserActivity,UpdateMediaListActivity。每一个Activity实现相应部分的功能,每一个Activity对应有一个或多个
40、.xml的布局文件。在布局文件中,添加用来实现相应部分功能的各种控件。如图3-1所示。图3-1 系统结构框图(1) MeidaPlayerActivity MediaplayerActivity中包含的控件数量最多,与用户打交道也最为广泛,每个控件都对应有各自的功能,如图3-2所示。图3-2 MediaplayerActivity控件分布第一行中:CheckButton,查看列表按钮。按下此按钮之后,显示手机中存在的视频文件,并以列表的形式显示显示在手机屏幕上。关于视频文件的列表的显示,在MediaListActivity中实现。ChooserButton,添加视频按钮。按下此按钮之后,手机屏
41、幕将显示SDCard中文件列表,通过浏览不同路径,添加所需的视频文件至视频列表中。ImageButton,之后的三个ImageButton分别是volumeButton,upButton,downButton,即声音按钮,加大音量按钮,减小音量按钮。第二行中:TextView,文本视图控件。前一个TextView用来显示“视频文件:”,即一个提示信息;后一个TextView用来显示正播放的视频文件的名称。然后是ImageButton控件,这里添加一个声音的小图标。最后是一个ProgressBar控件,该控件是一个进度条。当我们加大或者减小音量时,该进度条会相应的发生变化。第三行中:一个Surf
42、aceView控件加上一个ImageView控件。SurfaceView用来将视频画面投放到手机屏幕上,而ImageView用来显示视频是否处于播放状态。即当暂停视频播放时,ImageView处于Visible(可见)状态,当继续之前暂停的视频播放时,ImageView处于InVisible(不可见)状态。第四行中:两个TextView分别用来显示当前正杂播放的视频的时间信息,前者显示当前播放时间长度,后者显示视频文件的最大时间长度。第五行中:SeekBar,另一种进度条,随着视频播放进度而变化。第六行中:六个ImageButton控件,分别为play,pause,reset,stop,las
43、t,next,即播放按钮,暂停按钮,重置按钮,停止按钮,上一个按钮,下一个按钮。(2) MediaListActivity接下来是MediaListActivity。该Activity引用的是medialist.xml布局文件。由于只需要显示视频文件列表,所以在medialist.xml布局文件中只添加了一个ListView控件用来实现视频列表的显示功能,如图3-3所示。图3-3 MediaList(3) FilechooserActivity然后是FileChooserActivity,当按下添加视频Button时,由MediaplayerActivity跳转到此Activity,并根据用户
44、操作来完成添加视频文件的操作。该Activity引用fileselect.xml布局文件。该布局文件中包含一个TextView,一个ListView,和两个Button控件。TextView用来显示当前正在浏览的路径,ListView用来显示当前路径下存在的文件或者文件夹。当选中视频文件后,单击确认Button即可。若不打算添加,则取消即可,如图3-4所示。图3-4FileChooserActivity布局(4) UpdateMediaListActivity最后是UpdateMediaListActivity。当用户通过Menu菜单点击“更新列表”选项时,程序跳转到此Activity。该Ac
45、tivity引用updatelist.xml布局文件。该布局文件中也仅仅只包含一个ListView控件,用来显示更新选项。如图3-5所示。图3-5 更新列表第四章 测试4.1测试环境和条件本次软件测试环境在AVD(Android Virtual Device)和真机中测试。真机硬件配置:手机型号:ZTE V889D;Android版本;4.0.4;核版本号:3.0.8-perf-svn22921zte-kernelZdroid-SMT;RAM:512M;CPU:800MHz。4.2测试系统运行的流程如下运行程序后,首先进入的是主Activity,即MediaPlayer Activity。如图
46、4-1。图4-1程序运行时主界面当点击菜单Menu时,会出现三个选项:播放列表,更新列表,退出。如图4-2所示。图4-2 菜单项选择项选择更新列表操作,进入UpdateMediaListActivity,如图4-3所示。图4-3 更新列表操作单击选择自动搜索,程序自行扫描SDCard中的文件,并将扫描到的视频文件添加到视频列表中去。如图4-4和图4-5所示。图4-4 自动搜索视频文件图4-5 自动更新结果搜索完成后点击产看列表查看视频文件列表,也可以通过菜单中的播放列表选项查看。查看结果如图4-6所示。图4-6 查看视频文件列表在更新列表界面下,用户也可以通过手动添加来添加视频文件。如图4-7
47、所示,被选中的视频文件会被打上对勾,以表示选中。图4-7手动添加视频文件单击确定按钮完成添加。添加后显示图4-8。图4-8 添加视频文件完成接下来从视频列表中选择一个视频文件来播放。如图4-9所示。图4-9 播放视频文件由上图可知,视频播放时,可以获得一些视频文件信息。如视频名称,播放进度,视频时长,视频后缀名。当按下暂停按钮时,视频暂停播放,并且Image View显示出来。如图4-10所示。图4-10 暂停视频播放再按下play按钮即可继续视频播放,若按下reset按钮,怎视频从头开始播放。视频的进度可以通过进度条直接进行拖拽。通过调节音量的3个Button可以对音量进行调节。按下Volu
48、meButton时,视频静音,此时VolumeButton也改变。按下加大或者减小按钮时,声音进度条显示并发生相应的变化。如图4-11和图4-12所示。图4-11 静音操作图4-12 声音进度条变化在视频播放过程中,若将手机屏幕横置,并不能实现视频的自动旋转,原因在于重力感应功能没有能够实现,如图4-13所示。图4-13 手机屏幕横置关于重力感应这部分功能,Android中的很多游戏的游戏都使用了重力感应的技术,简单来说,Android重力感应系统的坐标系下,以屏幕的左下方为原点箭头指向的方向为正。从-10到10,以浮点数为等级单位,如图4-14所示。手机屏幕向上(z轴朝天)水平放置的时侯,(x,y,z)的值分别为(0,0,10);手机屏幕向下(z轴朝地)水平放置的时侯,(x,y,z)的值分别