




已阅读5页,还剩50页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
四川理工学院本科毕业设计(或论文)四川理工学院毕业设计 基于android平台的视频播放器设计学 生:徐东学 号:12021040122专 业:电气工程及其自动化班 级:2012.卓越指导教师:曾晓辉、刘兴忠 四川理工学院自动化与电子信息学院二O一六年六四川理工学院本科毕业设计(或论文)摘要:随着计算机科学和移动终端的不断发展,Android移动在终端已经成为了当今的主流,功能完善和性能优越的移动设备是用户优先选择的。因此开发出功能强大且界面美观的手机应用具有广阔的市场前景。本视频播放器是基于Android平台研究开发,具有完善美观的用户界面,除了基本的播放视频外,还能查看视频信息,视频的进度条的拖拽,手势调节屏幕亮度和声音大小。 本文设计的播放器采用Vitamio的视频解码器框架,可以播放多种常见的本地视频格式,界面简洁美观。关键词:Android,Vitamio,视频,播放器- 9 -Abstract:With the continuous development of computer science and mobile terminals, Android mobile terminal has become the mainstream of todays mainstream, functional improvement and superior performance of mobile devices is the user preferred. So it has a broad market prospect to develop the mobile phone with powerful function and beautiful interface.The video player is based on Android platform research and development, with a perfect and beautiful user interface, in addition to the basic play video, but also to see the video information, the progress of the video of the drag, gesture control screen brightness and loudness of the sounds.In this paper, the design of the player using Vitamio video decoder framework, you can play a variety of common video format, the interface is simple and beautiful.Key words: Android,Vitamio,Video ,player- II -徐东:基于android平台的视频播放器目录摘要IAbstractII第1章 前 言11.1设计的目的及意义11.2国内外发展现状11.3 视频播放器概述2第2章 Android开发技术介绍42.1 Android的架构介绍42.2 Android平台上开发技术介绍62.2.1 Android四大组件62.2.2 组件之间的调用102.2.3 Android进程和线程112.2.4 Android界面构造132.2.5 开发工具Eclipse16第3章 视频播放器需求分析173.1 视频播放器概述173.2软件功能173.2.1 视频播放器界面173.2.2 性能要求193.3视频播放流程图19第4章 视频播放器的实现214.1 启动界面214.2 列表界面224.3播放界面模块254.3.1 视频的播放254.3.2 控制菜单264.4 对话框界面294.5 其他界面模块294.5.1菜单自动隐藏模块304.5.2 Toast 界面模块304.6 退出界面304.7 本章小结31第5章 视频播放器的测试325.1解码能力325.2功能性测试335.3播放器的主观效果335.4 本章小结33第6章 结束语356.1总结356.2 问题和展望35致谢37参考文献38附录39IV徐东:基于Android平台的视频播放器设计第1章 前 言1.1设计的目的及意义随着当今科学技术的发展, 各种各样的应用被安装到移动电话上,比如视频电话,VOD视频,移动上网冲浪,在线阅读和资料共享等。为了实现这些应用,移动电话的功能变得更聪明且智能,这也表明了移动互联网到了新时代。新时代的到来,需要一个强大的开发平台来支持,因此,智能手机操作系统技术和研究已成为最活跃的领域之一。由于如今的Android具有开放性,现在的Android系统已经应用于手机和平板电脑上,许多的商家已经将Android移植到高清播放机和智能电视设备上,通过这样的方式消费者会有更多的机会使用以电视作为屏幕的Android系统,这样就把视频播放器显得更为重要了。本课题研究设计了一个基于Android系统的视频播放器,以APK的形式安装在Android手机和平板中,本应用从系统的数据库读取视频信息,显示视频列表,有相应的播放界面,查看视频信息的功能,视频比例的切换,相应的控制菜单,实现视频的删除功能和上一集下一集,以及手势控制播放界面的亮度和声音大小,应用操作简单功能全面,并且可以播放几乎是有的视频格式,让用户有良好舒适的体验。Android上面的视频播放器很多公司和个人都在开发,并且其中的一些播放器如Moboplayer、RockPlayer、RealPlayer、VPlayer等受到消费者的青睐,但是目前大多数播放器功能多样繁复,占用内存大,嵌入过多的广告使用户没有良好的用户体验,所以有必要开发出一款功能全面,操作简单,并且具有较强解码能力的视频播放器。1.2国内外发展现状Android是一种真正意义上的开放型的并且不依赖于设备的移动设备综合平台,他包括用户界面、操作系统、中间件和应用的主要部分。伴随开放的架构和优秀的研发环境,使Android的手持设备得到充分利用,他能提供有吸引力的移动应用,并且没有任何以前的块移动的独家产业创新的障碍。Android有丰富的图形系统,这使得它易于开发多媒体应用和网络浏览器的工具。自Android问世以来,全球的开发者已经做出了超过100万个应用,国内外出现了许多相当不错的视频播放器。MoboPlayer,是由济南四叶草信息技术有限公司开发的,MoboPlayer需要在Android1.6或更高的版本上运行,MoboPlayer可以兼容更多的视频格式,并且努力的实现了任何视频格式都可以直接放在手机上播放。VPlayer,最初由个人制作,后来组建了自己的团队。VPlayer是一款很较为流行的视频播放器,根据VPlayer的官方说明,其下载量已经超过了百万级,VPlayer的特点是支持多数格式的视频,启动后直接进入视频文件夹,就可是对视频进行播放,使用方便等。RockPlayer,是由上海的ChangeTec.h公司开发,RockPlayer是一款比较高性能的视频播放器,能支持多数的视频格式,具有个性化的UI布局和设计,可以和其云端的服务相配合,用户之间可以分享视频。RealPlayer,和PC上的RealPlayer是一样的,andriod上的RealPlayer也是由RealNetworks公司研究开发的,能同时播放音乐、视频、照片、但是解码能力不是很全面。1.3 视频播放器概述本次设计是基于Java语言通过eclipse进行编写的嵌入式播放器开发,该播放器结构简单并且占用空间小,但功能齐全。实现目标:1.从手机数据库获取所有视频信息。2.播放mkv,flv,MP4,RMVB等常见格式的视频。3.实现删除视频文件的功能 。4.实现手势刷新功能 。5.实现播放界面全屏播放的功能。6.播放/暂停,上一集,下一集,手势实现音量/亮度的调节。正如我国资深嵌入式系统专家沈绪榜院士的预言,“未来十年将会产生头大小、具有超过一亿次运算能力的嵌入式智能芯片”,将为我们提供无限的创造空间。总之“嵌入式微控制器或者说单片机就好像是一个黑洞,会把当今很多技术和成果吸引进来。中国应当注意发展智力密集型产业”。 嵌入式播放器的迅速发展,使影音播放对于用户更加的方便、适用和简单,具有非常广阔的市场发展前景,也是本次设计的根本。第2章 Android开发技术介绍2.1 Android的架构介绍 Android系统架构主要由5部分组成,分别是:Linux Kernel, Android Runtime, Libraries、Application Framework, Applications12。如图2-1所展示的为Android总体架构图,其主要是对Android的总体架构和包含的模块做具体的介绍。图2-1 Android系统架构图(1)应用层(applications)Android应用层是由运行在Android设备上所有应用程序共同构成的(系统预装程序以及第三方应用程序)。Applications主要是留给开发者去开发,Android只提供了一些基本的原生应用,比如日历、电子邮件客户端、联系人、浏览器、地图、音乐播放器、视频播放器、SMS程序和其他设置等,所有应用都是基于Java语言编写而成,但是也支持通过JNI的方式实现C语言编写1。(2)框架层 (Application Framework)Android 是开放的开发平台,能使Android开发者编制出极其丰富美观的应用程序。开发者可以灵活的利用设备硬件优势、运行后台服务、访问位置信息、向状态栏添加通知、设置闹钟等。所有应用程序本质都是一组服务和系统,包含如下的组成部分。视图(View) 提供丰富的、可扩展的视图集合,可以用于构建一个应用程序。包括列表、文本框、按钮、网格,或者是内嵌的网页浏览器。内容提供者(Content Providers)可使应用程序能够访问其他的应用程序(如:电话簿)的数据,或者共享自己的数据。通知管理器(Notification Manager)可以使所有的应用程序能在状态栏显示自定义的提示或警告。活动管理器(Activity Manager)用于管理应用程序的生命周期,提供了通用的导航回退功能。资源管理器(Resource Manager)使应用能够访问非代码资源,比如本地图形、字符串和布局文件。(3)LibrariesAndroid包含了一个C/C+集合库,便于Android系统的各组件使用,开发者通过Android的应用程序框架(application frameworks)调用这些功能Error! Reference source not found.,下面列举其中的一些核心库:SQLite这是一个强大而轻量级的关系数据库引擎,所有的应用程序都可以引用。FreeType位图和矢量字体的渲染。3D库基于OpenGL ES 1.0APIs的实现,该库包含高度优化的3D软件光栅或使用3D硬件加速。SGL基本的2D图形引擎。LibWebCore新型的Web浏览器引擎,用于驱动Android浏览器和内嵌的web视图。界面管理用于管理和显示系统和多个应用程序的二维和三维图形层。媒体库基于PacketVideo的OpenCore ,这些媒体库支持播放和录制主流的音频和视频格式,也包括静态的图像文件,如MPEG4、H.264、MP3、JPG、PNG。系统C库标准C系统库(libc)的BSD衍生,优化为基于嵌入式Linux设备。(4)Android 运行时(Android Runtime)Android 运行时是由两部分组成:Dalvik 虚拟机和 Android 核心类库。其中的核心类库提供了 Java 语言核心库所能使用的大部分功能,包括Java 对象库、网络通信、文件管理库等。 Dalvik 虚拟机则是提供Android 应用程序所需的运行环境,并负责动态解析执行应用、管理对象生命周期、分配空间等工作。Dalvik虚拟机依赖于Linux内核提供基本功能,如线程和底层内存管理15,Android 运行时可使得 Android 设备在本质上与一个移动的 Linux 区分开来。(5)硬件抽象层(HAL)硬件抽象层(HAL,Hardware Abstraction Layer)介于Libraries和内核层中间的,是抽象出来的一层结构。HAL 存在的目的是把Linux层与Framework 内核隔离开来,它使 Android 不会过度依赖 Linux 的内核,以此达到“内核独立”的目的。是对 Linux 驱动的封装,对上层服务提供了统一的接口,屏蔽了底层的实现细节。(6)Linux KernelAndroid是基于Linux2.6 提供的核心系统服务,比如:进程管理、内存管理、安全、驱动模型、网络堆栈。Linux Kernel 也作为软件和硬件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务6。分层的好处就是各 层各司其职,各层提供固定的SAP ( Service Access Point)努力达到高内聚、低祸合14。2.2 Android平台上开发技术介绍2.2.1 Android四大组件在Android系统中,开发者可是使用公共的API以提高开发软件的效率,也就是使用别人开发的一个组件,这是Android系统的一个很有优势的特性,例如,当开发者编写的程序需要一个ListView控件并且需要滚动时,如果别人已经开发此功能的组件,并且对外发布了供他人使用的组件,此时开发者可以在自己的程序中调用该组件,而不必自己再编写一个具有此功能的组件。在需要的时候Android会启动该组件,实现你需要实现的功能。Android应用程序从源码逻辑上可以分为四大组件,一个应用会由四大组件或者其中几个组成,四大组件分别是Activity ,BroadcastReceiver, Service和Content Provider89Error! Reference source not found.。1.Activity组件顾名思义,Activity就是活动。应用程序必须至少包含一个Activity。Activity为用户操作提供了一个可视化的用户界面。例如,一个Activity可用于展示应用的一个列表供用户选择,它可以是显示一些需要说明的文字与形象的图片。一个视频播放器应用程序可以包含一个显示视频信息列表的Activity,一个播放界面的Activity。虽然他们共同组成了一个应用,但是其中的每个Activity都和其它的保持相对的独立,每个Activity都有生命周期,Activity的生命周期如图2-2所示。图2-2 生命周期下面对图2-2中的Activity的生命周期进行简单描述onCreate()当Activity第一次创建的时候调用,在这里进行程序的初始化设置,包括创建视图和绑定数据到列表等,如果有记录的状态,则此时会传入一个Activity的以前状态作为参数。onRestart()当Activity停止后,当被再次启动之前调用。onStart()当Activity刚要变为被用户所见的时候被调用。onResume() 在Activity与用户开始交互之前被调用,在此时Activity位于堆栈的顶部, 并且接受用户的输入。onPause当系统即将要启动另外的一个Activity时调用,该方法是用来使当前的Activity暂停,该方法在短时间内完成,下一个Activity会在该方法完成后才会继续,当调用onResume()方法后,Activity回到前台。在调用onStop()方法后,当前的Activity变为用户不可见。onStop()当Activity即将为用户不可见时调用该方法,当一个Activity被销毁或者是另一个Activity回到运行状态时发生该方法的调用,调用onRestart()则是Activity再次回到前台和用户交互,调用onDestory()则是关闭当前的Activity。onDestroy()在销毁Activity前调用,该方法是Activity执行的最后的一个调用,这可能是发生在Activity的结束或者是由于系统的空间不足所以临时销毁该Activity。2.Service组件Service 与Activity的主要区别在于,Service是在后台活动的,它没有用户界面。而相同之处,它们都封装了完整的逻辑功能,Service组件一般是运行在后台,接受相关的指令,响应完成相应的事件,Android的Service与四大组件一样它的进程模型可以由开发者自由配置的,可以把该组件运行在同一进程中,或者不同的进程中。当希望吧Service运行在和调用的组件不同的进程中的时候,则需要利用Android所提供的RPC机制,部署一套进程之间通信的策略。(a)Service的周期Service的生命周期相对于Activity要简单许多。主要构成如下:onCreate():创建服务的函数。onStart(Intent intent):开启服务的函数。 onDestory(): 销毁服务的函数。 (b)Service的两种类型i本地服务(Local Service):使用于应用程序的内部。 ii远程服务(Remote Srevice):适用于Android系统内部的应用之间。本地服务用于实现应用程序本身执行的一些耗时任务,但是并不占用应用程序Activity的线程,而是自己单独开线程后台执行,用户体验较好。远程服务可以被其他的应用程序调用,因此其他的应用程序不用再写该服务,直接调用即可。(c)Service的两种使用方式i 服务启动并运行,直到它自己停止或人为将其停止,在该种方式下通过调用Context.startService()启动服务,通过调用Context.stopService()结束服务它可以通过调用Service.stopSelfResult()或Service.stopSelf()来自己停止。不管调用了几次startService()方法,只需要调用一次stopService()就可以停止服务。ii服务可以自己定义接口,然后对自己定义出来的接口进行操作。通过调用ontext.bindService()方法建立,通过调用Context.unbindService()关闭。允许多个客户端绑定至同一个服务。如果服务此时还没能加载, bindService()方法会先加载它。 3.Content Provider (内容提供者)Android平台内置了一套SQLite数据储存机制,并且包含一系列管理SQLite Database的相关方法。在应用程序中,通过Content providers访问数据库。每个Content provider都定义了一系列的相应方法用于访问它对应的数据库。应用程序在新建数据库时也可以定义相应的Content provider用于向其他应用程序共享数据。一般情况下,应用程序不直接调用Content provider定义的函数,而是通过Content Resolver间接调用。我们也可以自己来定Content Provider共享我们的数据,方便用户的访问5。这样设计的好处是一个Content Resolver可以访问任何的Content provider,统一了接口。 4.BoardcastReceiver (广播接收者)广播接收器是用于接收广播消息通知,然后做出相应的处理,很多的广播是来于系统。例如,时间的改变、电量过低、网络的改变、用户语言的改变等。应用程序也可以发送广播,例如,通知用户,某些软件可以更新。2.2.2 组件之间的调用在Android中除了有定义良好的组件,怎样把各个组件完美地组合在一起是有一定难度的。在 Android 中,Intent(意图),是连接各个组件的桥梁,是各个组件实现相互调用的重要方法。各个组件通过声明一个或多个 Intent Filter来告诉Android自己可以响应、处理哪些Intent请求。每个 Intent Filter 描述该组件意图接收何种类型的请求,以及什么类型的数据。下面将介绍Intent 和Intent Filter以及他们实现组件之间的调用过程。1.Intent(意图)(1) 显式意图:在代码中通过名字直接指明目标组件,通常情况下该组件名是不会被其他的应用开发者所了解的,所以这种意图典型被用作应用的内部消息。如,一个Activity启动一个相应的服务。(2) 隐式意图:在代码中不命名目标组件。隐式意图通常用来激活其他的应用程序组件。Android通过传递一个显式意图给一个指定目标,意图对象(Intent)中的组件的唯一的名称确定了什么组件应该来接收这个意图,而对于隐式意图则有不同的策略,当没有指定目标的情况时,Android系统需找到最适合的组件来处理这个意图或者服务来执行这个请求。该方法是通过比较意图过滤器和意图对象,过滤器提示一个组件具备的能力和限定它能处理的意图。他们使组件接收隐式意图成为可能。当一个组件没有意图过滤器,则他只能接收显式的意图,如果该组件带有意图过滤器,那么就可以同时接收显式和隐式的意图。2.Intent Filter 组件将意图(Intent)传递给系统核心层,然后Android系统从AndroidManifest.xml中的 Intent Filter里面读取组件能接受的Intent,接着隐式意图通过 Intent的动作、数据以及类别和Intent Filter进行比较,如有其中的一方面不匹配,则Android都不会把该隐式 Intent 传递给目标组件。3.Intent 传递的实现 下面介绍Activity的组件实现传递 Intent 的过程,如图2-3所示 Context StartActivityInstrumentationExecStartActivityActivityManagerServicePackageManagerService图2-3 Intent传递示意图Intent的传递从Context Start(Intent)开始,调用者通过传入构造好的Intent对象,然后通过执行者Instrumentation 对象来完成。执行者是整个的管理者,主要管理应用内所有的Activity的生命周期,ExecStart是它的一个隐藏的方法,其作用就是根据Intent 启动Activity的。它做的最重要的事情就是通过RPC的方式将此调用传递给ActivityManagerService。完成相关操作分为两步,首先把意图(Intent)传递给另一个服务 该服务则会拥有整个软件的所有信息,并且它会将已知的 Intent Filter和传入的 Intent 进行比较,如果能找到,就把相关的Component的信息反馈传回,在此会完成启动Activity的很多细节的事情。从上可知,要经过许多个服务的处理才能启动Activity。2.2.3 Android进程和线程Android中的组件与组件之间的调用,全是静态的概念。在Android应用中,组件的动态运行引入的新概念就是Task(任务)。Task的主要作用就是把组件之间的连接从进程中脱离出来,能以一种不同的模型进行配置,通过这种方式能有效的降低上层开发人员的理解难度,更好的帮助开发者进行开发和配置 。下面介绍Task的概念,线程、进程和消息机制。1.TaskTask是一组以栈的模式聚集在一起的Activity组件集合2,新加入的组件位于栈顶,而且只有当位于栈顶时才能与用户进行交互。如果栈顶的完成任务退出的时候,Task会让其退出栈,让下一个位于栈顶来与用户进行交互,如此循环知道栈中没有,则Task结束。2.进程在应用程序安装的时候,系统会给每个应用程序分配一个Linux用户id,以及设置相应的权限,这样该程序的数据和资源其他的程序就不能访问了。每个apk(Android应用程序)默认运行在自己的Linux 进程当中,当程序执行时,会启动一个新的进程来执行,所有不同的apk在相互隔离的环境中运行。另外,可以人为的给两个应用程序分派相同的用户id,从而两个应用程序可以相互访问对方的资源和数据,并且这两个应用程序能运行在同一个进程之中。在系统中,进程构造了底部的一个运行池,它不只是中的各个组件,其他三大组件Service, Content Provider, BroadcastReceiver,都是寄宿在底层某个进程中,进行运转3。在这里进程像是一个资源池,为了承载各个组件的运行。默认情况下,Android是将同一应用的各个组件和 放在同一个进程内,但是,出于效率考虑,应用也是允许开发者进行自定义的配置。在AndroidManifest.xml 中完成应用程序和相关进程的配置。3.线程模块Android在默认情况下,一个程序的各个组件(例如 Activity , BroadcastReceiver 或 Service )都是在同一个线程中执行,是由该线程的主线程负责执行, 而且主线程有一个消息队列,一直检查是否有接收到新消息,如果队列中没有消息,则主线程挂起等待。一般情况下,一个应用程序的全部组件都是运行在同一进程中的,一些复杂的的耗时任务由子线程来处理,而主线程主要是用来处理Activity 的 UI事件。因此单线程模型会因缺少上述考虑而引起应用程序的效率低下,由于所有事件都在同一个线程中处理,当处理一些耗时操作时,就会使该线程阻塞,不能及时分发事件,程序卡顿,使得用户体验差。在Android中使用多线程的有点:与用户更好的交互、耗时长的时候可以做其他事、开发利用多处理器。4.Android中的消息机制在Android中存在消息循环机制,Android通过Handler、Looper来实现该机制,这是对线程而言的,每个线程都可以有消息循环和消息队列。在Android系统 Looper 主要用于管理线程的消息循环和消息队列。通过Looper.myLooper() 方法得到该线程的Looper 对象,可以通过Looper.getMainLooper() 方法得到该进程的主线程的Looper 对象。对于一个线程消息循环和消息队列是可有可无的,默认的线程是没有消息队列和消息循环的,我们可以调用Looper.prepare() 来创建消息队列,通过Looper.loop() 方法进入消息循环。2.2.4 Android界面构造对于每个应用程序而言交互界面都是非常重要的,优秀的交互界面对提升用户体验有着很好的作用,要设计出简洁美观的界面,开发者要有良好的编程能力,同时还需要平台提供优良的UI 框架。资源和布局是Android 框架的核心,完善的控件库帮助开发者快速的搭建自己需要的界面,主要包括界面布局体系、界面控件结构和资源。1.界面布局体系Activity的界面布局体系如下图2-3所示。WindowLinearLayoutRelativeLayoutButtonImageViewTextViewWindowManager(用户操作)图2-3 Activity 界面布局图如图2-3,当你做了一个如同虚线框中结构的界面,通过Activity 中的setContentView方法,放进了Activity 中,形成图示的逻辑关系。每个 Activity 都包含一个Window 对象,表示了它在屏幕上的逻辑关系,在Android中它包含了一个FrameLayout对象,显示出来的是一个带着标题的界面,开发者的自定义控件会放入 Window的界面,在Activity 中,Window 的逻辑处理是优先的。整个控件中最顶端的是 ViewParent,它是 WindowManager 和整个控件树之间的信息翻译者,而 WindowManager 则是Android 中的一个重要服务,他能把用户的操作请求反应成指令然后传送给界面上的对应的Window。Activity会将上层的控件注册到 WindowManager 中,当用户触摸屏幕或键盘的时候,WindowManager 就会通知对应的控件,如果当空间产生一些请求的时候,也会有 ViewParent传回 WindowManager 中,从而形成通信流程。2.界面控件结构如图2-4,是用来描述Android的布局(UI)控件结构,在每个窗口(Window) 下,这个结构树都是完整而又标准的。 有一个子类,它类似于一个复合控件或一个容器类。所有的派生与ViewGroup的子类在这颗UI布局树中都可承担父节点的职责,而另外一些绕过ViewGroup直接从View通下来的,只能属于叶节点的范畴内了。我们说这是一个很标准的控件树,是由于父控件对于子控件有绝对的掌控权,每个子控件的位置和大小,都是由父控件来分配的,子类控件能够接受和能处理的事件,也是父控件派发下去的。该种结构,被许多平台和框架广泛的认可和应用,与传统的win开发和Symbian相比,虽然事件传播的途径变长了,很多事件处理的效率降低了,但是整个结构却更具有有层次性,每个子控件只需要按照父控件的指挥就好,逻辑简单,职责明确,利于开发和设计。任何一个平台的控件,都存在一些不可避免的主题,例如,每一个控件如何标识,应该如何设定空间的大小和位置,怎样接受和处理事件,以及类似的相应问题。其界面控件树如下图2-4所示。ViewGroupViewGroupViewViewViewViewView图 2-4 View 树形结构图3.资源资源是Android应用中不可缺少的部分。资源是开发者引入到应用程序中的一些外部元素,例如:图片、音频、视频、文本字符串、布局猪蹄等4。资源属于外部文件,他们作为代码的引用,并在程序编译的时候被编译到应用之中。Android 支持许多种不同的资源文件类型,例如:XML、PNG和JPEG文件。而XML文件会因为它所描述内容的不同而形式不同。布局文件通常存储子XML中,这个方法很好地简化了UI设计过程,将许多用户界面控件的静态产品和布局,以及控件属性定义移动XML中,代替了写代码 7。资源是从源代码中脱离出来的,出于对效率的考虑,文件被编译成为二进制文件、能快速加载的形式,而字符串也被压缩成为一种更高效率的储存形式。由于上诉原因,Android平台中有了不同的资源类型,最终这些资源将被编译进入APK文件中。在Android中有一个文件叫R,是一个封装类,在代码中可以通过它来引用资源。2.2.5 开发工具Eclipse 开发平台是一个基于语言,开放源代码的开发平台。本身只是一个框架和一组服务,开发者通过插件组件搭建需要的开发环境。重要的是,附带了一个标准的插件集,包括 开发工具( Development Kit,JDK )。的设计思想是:一切皆插件。核心很小,其他所有功能都以插件的形式附加于核心之上。Eclipse基于内核包括:图形API(SWT/JFace),开发环境插件(JDT),插件开发环境(PDE)等。的插件机制是轻型软件组件化架构。在富客户机平台上,使用插件来提供所有的附加功能,例如支持Java以外的其他语言。已有的分离的插件已经能够支持C/C+()和数据库开发。插件架构能够支持开发者将任意的扩展加入到现有的开发环境中,比如配置管理,而决不仅仅限于支持各种编程语言。第3章 视频播放器需求分析为了开发出用户所需要的软件产品,对将要开发的软件进行需求分析是软件开发中非常重要的环节,本章对视频播放器做相关的需求分析。需求分析的任务是定义系统应该做些什么事,完成什么样的工作,也是对目标应用程序提出准确、完整、具体、清晰的要求。3.1 视频播放器概述随着手机的叠层出新,视频播放器以成为Android智能机重要软件之一,开发出一款广大用户需求的视频播放器是很有市场前景和意义的,本次设计是基于Java语言进行嵌入式播放器开发,程序简单并且占用空间小,但功能齐全。实现目标:1.从手机数据库获取所有视频信息。2.播放mkv,flv,MP4,RMVB等常见格式的视频。3.实现删除视频文件的功能 。4.实现手势刷新功能 。5.实现播放界面全屏播放的功能。6.播放/暂停,上一集,下一集,手势实现音量/亮度的调节。3.2软件功能3.2.1 视频播放器界面视频播放器的主界面是用户在手机桌面点击图标后打开的界面,该界面显示视频列表,以及各视频的详细信息,包括视频的名称、大小和时长。播放器的播放界面则是用于视频播放的界面,该界面的组要功能包括声音的控制、亮度的调节、播放和暂停以及上/下选集,并且有进度条显示播放的进度。总之用户界面设计是以人为中心,使产品达到简单使用和愉悦使用的设计11,视频播放器的界面用图例图3-1 所示。用户进入列表播放文件退出程序播放暂停上/下一首视频详细信息删除视频亮度调节音量调节图 3-1 播放器界面图例下面对播放器的界面用图例说明。(1) 播放功能:当软件正在运行,用户可以播放列表中选中的视频。其事件流:用户单击列表中的视频 。播放器播放列表中点击的视频。(2) 暂停功能:当视频正在播放且没有暂停和停止,用户可以暂停正在播放的视频。其事件流:用户单击“暂停”按钮。播放器将暂停当前播放的视频。(3) 播放列表:当程序正在运行,用户可以进入播放清单。其事件流:用户单击启动软件。播放器进入播放列表。(4) 上/下集:当播放结束后,用户可以播放上一集/下一集。其事件流:用户单击上一集/下一集。播放器将播放上一集/下一集。(5)删除功能:当视频列表加载成功,用户可以删除清单中的视频其事件流:用户长按列表中的视频条目,选择删除按钮。播放器将删除指定的视频并刷新列表。(6)音量调节:用户可以通过在右半边播放界面屏幕上滑动调节音量。其事件流:用户在播放界面的右半屏上下滑动。上滑将调大音量,下滑将减小音量。(7)亮度调节:用户可以通过在左半边播放界面屏幕上滑动调节亮度。其事件流:用户在播放界面的左半屏上下滑动。上滑将调高亮度,下滑将降低亮度。3.2.2 性能要求1.响应速度要求软件的响应速度要求在用户可以接受的范围,且是越快越好。2.可扩展性本软件时基于Android操作系统开发,是基于Android组件的开发,以后对本软件的扩展是很方便的,具有可扩展性。3.3视频播放流程图视频播放流程图如图 3-2 所示。启动程序启动界面延时启动本地视频列表程序结束点击本地列表播放视频点击退出返回退出否否是是图3-2 视频播放流程图第4章 视频播放器的实现通过需求分析阶段,我们已经知道程序需要做些什么了。本章将对视频播放器的实现做详细的介绍。4.1 启动界面在程序启动的时候先加载启动欢迎界面,该布局应用 LinerLayout 布局,启动界面效果图如图 4-1所示。图4-1 播放器启动界面(1) 布局设计启动界面的布局为线性布局(LinerLayout),在布局中有显示图像的控件 ImageView 。布局文件 Splash.xml 内容如下: (2)代码中的实现启动界面主要是给给用户一种更好的体验,友好的人机界面让软件更让人容易接受,主要代码如下:package com.xudong.videoview;public class SplashActivity extends Activity private final int SPLASH_DISPLAY_LENGHT = 1000; / 延迟*秒Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.splash);new Handler().postDelayed(new Runnable() public void run() Intent mainIntent = new Intent(SplashActivity.this, MainActivity.class);SplashActivity.this.startActivity(mainIntent);SplashActivity.this.finish();, SPLASH_DISPLAY_LENGHT);在AndroidManifest.xml文件中通过设置android:theme=android:style/Theme.Black.NoTitleBar.Fullscreen 使启动界面无标题且显示为全屏。4.2 列表界面本设计的列表界面即是本程序的主界面,用户点击后会停留在这个界面,程序的各个可视化界面都有相应的布局文件,在布局文件中有各种布局方式以及各种资源文件,例如:图像、文字和颜色的引用。在程序运行的时候,可以通过调用不同的配置文件形成各种不同的可视化界面,列表界面是一个Activity ,在Android工程中,每个 Activity的启动都是先执行 Oncreate() 方法,其代码如下:protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);/ 使无标题setContentView(R.layout.activitymain);该段代码的主要功能是对界面的初始化操作,在代码中设置布局的方法:Context.setContentView(layoutResID),其中的参数为资源的id,该id位于工程目录中的 res/layout 下,列表的布局文件名为activitymain.xml 。在启动界面结束后则进入列表界面如图 4-2 右图所示,列表界面主要运用相对布局(RelativeLayout)。图 4-2 列表界面在Android中,有一种视图叫 ListView用来展示列表的View ,特点是它拥有BaseAdapter 属性,用来将数据映射到ListVie
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届吉林省松原市宁江区油田高中高二化学第一学期期中统考模拟试题含解析
- 2025年导游资格证模拟试题 导游英语听说能力提升
- 2025年高中物理波动光学知识冲刺试卷
- 湖南省株洲市攸县第三中学2026届化学高二上期中学业质量监测试题含解析
- 现代仓库管理培训课件
- 民法典宣传课件
- 2025年度企业员工试用期全面考核与绩效评估劳动合同
- 2025年度生态公园绿化项目油工施工管理服务合同
- 2025年场项目投标失败后全面供应链优化与升级服务合同
- 2025年度跨境电商平台供应链管理服务合作协议
- 托管老师安全知识培训课件
- 2024年长沙市公安局招聘警务辅助人员真题
- 待灭菌物品的装载
- 《急性肺栓塞诊断和治疗指南2025》解读
- QC/T 1224-2025装备空气悬架的商用车减振效果判定方法
- 《人格障碍》课件
- 部编版高一语文必修上册教学计划
- GB∕T 27011-2019 合格评定 认可机构要求
- 私企接待应酬管理制度(3篇)
- YX51-380-760型金属屋面板专项施工方案(32页)
- 国际商务(International Business)英文全套完整课件
评论
0/150
提交评论