《基于安卓影音播放器设计》说明书.docx
1前言1.1 设计的意义进入21世纪以来,社会匕速地进入到了信息时代。而信息时代最明显的特征就是信息传递加快,信息体氏巨增,高新技术越来越走近人们的生活,不仅仅是以帮助人们工作的iR要工具,而且也起先在人们的消遣、休闲中越来越得到全觇。2005年以后,智能移动的小型便携设备,起先在市场上得到人们重视,随若其性能的增加,大规模集成电路的集成,成本也下降很快。人们起先采纳这些设备,来满意自己的精神生活需求。比如人们现在越来越喜爱用手机或平板,随时随地地观看影视、观赏音乐、上网、闲聊等等。而观赏音乐、观看影视也成为人们更多的休闲选择。而作为通讯工具的手机同时也是具备消遣功能的,比起PC机、MP3播放器而言,手机具有更加便利的优势,绝大部分的人都会在空余时间点开手机上的消道程序进行放松的.Android手机开发的平台的崛起,让手机应用程序的的开发进入了更加开放的格局,让更多的程序开发人员加入了手机应用程序的开发。Android也是现在最火热的手机软件开发平台之一.当今生活中,基本上每一个人都会拥有自己的一部手机了,而且现在的智能手机上的功能都可以比拟掌上电脑了,无论是办公软件,亦或是消遣软件都可以在手机上运行。所以,开发手机的应用程序是相当有市场前景的。£我的多媒体播放器是依据人们日常生活对精神生活的追求,而设计的一款手机综合类多媒体播放软件,在学业、工作压力越来越大的今日,可以缓解我们学习、工作上的压力,只有良好的精神状态才能够更加好的面对自己的学业和工作,用一款操作简洁、同时又具有音乐与播放器功能同时也能感受到丰富多彩的精神生活。为人们的生活注入一道活力药剂,为的是让大家能以轻松的心态更加好的完成学业和工作。1.2 国内外探讨现状手机播放,始终是探讨的热门领域,也是手机的基础功能,因为它能直观地向人们展视技术的优良性,能充分满意人们感观上音乐、视觉以及由此产生的愉悦感,所以国内外探讨者从个人至团队、从民间到政府都能看到进行手机播放器开发的项目。GoogleAndorid团队在Android系统内置了播放渊功能,它的音乐可以作为服务,隐身;后台,同时还供应大址的限制行为接口,使得其它播放器可以调用这个服务,很便利地开发出更多更丰富的播放器。由美国公司开发的PoWerNlP堪称Android系统中用户体验最佳的音乐播放器,支持Android2.O以上RoM,界面美观,音痂出众,它的功能特别丰宦,囊括了常见的MP3、MP4,/M4A,无损A1.AC/F1.AC/APE、OGG、WAV,TTA.WMA、WV这些音乐格式。它运用自建解码器,因带来来可调控性的性能优化。国内开发团队和个人,也在呈现各自的才华,纷纷在移动设备上开发播放器软件.作为当前在Android设备上运行是广泛的一款播放器,MOboPIayer获得了良好的评价。它是四叶草(济南)信息技术有限公司开发的运行在移动设备上,为音频和视频供应商侦量回放的播放软件。它可以让你在移动设备上播放几乎全部的多媒体格式,将你的数字生活体验提升到新的境界“目前MoboPlayer可以运行在几乎全部的Android设备上,凭借专为移动设备优化的播放核心以及高度优化的FFmpeg解码器,MobOPlayer使得原本只能在PC上播放的多媒体文件现在同样可以在手机中流畅播放“除/进一步优化播放核心外,HoboPlayer还若亚增加了媒体库功能,更加强大易用,同时大幅扩展了播放界面中的操作方式,双击智停、上卜滑动调整音量和亮度、左右滑动跳转以及屏幕锁定功能,让你能完备享受观赏视频带来的乐趣.通观国内外对播放器发布的整个进度,发觉这些软件一起先推出时不尽如人意,甚至是荷陋的,但它们的开发者都通过不停地升级,使得软件逐步成长,起先占据市场,升级速度一般每周都供应大大小小的升级二至三次。推出原型系统,然后不停地升级它,逐步完善其功能,也是软件工程领域中灵敏开发的一个原则.从以上可以看出,一款播放器的胜利,往往都须要设计者以用户需求为最终目的,操作上的便利性往往更易于应用的全面推广。13本文探讨的内容本文主要是探讨在Android2.2SDK"完成以卜任务:1、依据系统需求,进行技术可行性分析:2、依据收集的资料进行多媒体播放开发的难点整理与探讨:3、进行的软件的用户友好界面的设计:4、播放器的界面设计与编码:5, Activity自由切换;6、音乐播放的进度限制问题;7、视频播放线程限制问题。在这些任务中,主要存在以下难点须要解决:1、Android程序设计步骤;2、如何实现对多媒体文件的获得;3、怎么实现时音乐的调控:4、tabhosi的建立与运用:5,视频的播放实力。1.4章节支配第一章:设计的意义和国内外探讨现状,以及本文须要实现的目标和难点。其次章:系统的介绍以及难点的分析:主要介绍探讨程序设计步骤、AndrOid对多媒体数据管理的方式、音乐与视频功能的测试。第三率:系统分析:主要是探讨本软件用户的需求、播放器的主要功能、实体间的关系。第四章:系统实现:具体实现了本文的任芬,完成了开发播放器编码阶段的全部过程。第五章:测试与实施:对开发的系统进行测试,满意用户的需求后进入实施阶段。第六堂:总结与展望。2系统的介绍及难点的分析2.1 Android系统介绍Android是由google公司推出的一种智能操作系统,它是在IinUX基础上进行开发的,具有以下优秀的特点:1、应用程序框架:支持组建的重用与替换:2、DalVik虚拟机:特地为移动设备做了优化:3、内部桀成阅读器:该阅读器基于开源的WebKit引擎:4、优化的图形库:包括2D和3D图形库,3D图形库基于OpenG1.ES1.0(硬件加速可选:5、SQ1.ite:用作结构化的数据存储:6、多媒体支持:包括常见的音频、视筑和抑态印象文件格式(如MPEG4,H.264,MP3,.WC1AMR,JPG,PNG,GIF);7,丰富的开发环境:包括设备模拟器,调试工具,内存及性能分析图表,和ECliPSe集成开发环境插件。Android的系统架构如图2-1所示:AppuicationbHomtConocttPhcrwBcowtetApplicationFramcwork1.iaRARICBArsiOROiDRuntimkS<XeCorvUbrartMMoc*oonMsEOPenQjESFrlypV¼KSUHKeMafUterSSlSGl1.lZUXKerneuKeypadOwtrGmeraOwtrAu<oDnvertWiFiOwer图2-1Andrcid系统架构现在,AndrOid系统已经发展到4.4,但大部分程序开发者还运用在稳定性好的SDK2.2上进行程序开发。Android应用基于JaVa,支持SQ1.,由于底层是1.inUX所以底层支持C/C+。目前有两种编程:一是基于DT的JAVA编程,官方举荐用JDK+EC1.IPSE+ADT+DK(WINDOWS)开发环境,二是基于NDK的C编程。APK是AndroidPackage的缩写,即AndrOid安装包(anapk)。.APK是类似SymbianSis或Sisx的文件格式。通过将APK文件干脆传到AndrOid模拟器或Android手机中执行即可安装。APK文件和sis一样最终把androidsdk编译的工程打包成一个安装程序文件格式为apk,APK文件其实是ZiP格式,但后缀名被修改为apk,通过UnZiP解压后,可以看到DeX文件,Dex是DalVikVMexecutes的全称,即AndrOidDalvik执行程序,并非JaVaME的字节码而是DalVik字节码。开发人员也可以完全访问核心应用程序所运用的APl框架。该应用程序的架构设计简化了组件的重用:任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以运用共所发布的功能块(不过得遵循框架的平安性限制)。同样,该应用程序重用机制也运用户可以便利的替换程序组件。隐藏在每个应用后面的是一系列的服务和系统,其中包括:I、丰富而又可扩展的视图(VieWS),可以用来构建应用程序,它包括列表(lists),网格(grids),文本框(textboxes),按钮(buttons),甚至可嵌入的Web阅读器.2,内容供应器(ConlentProviders)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据。3、资源管理潜(ResourceManager)供应非代码资源的访问,如本地字符串,图形,和布局文件(layoutfiles),4、通知管理器(NotificatiOnManager)使得应用程序可以在状态栏中显示自定义的提示信息。5,活动管理器(ActivityManager)用来管理应用程序生命周期并供应常用的导航回退功能。2.2 android多媒体开发的基本框架2.2.1 框架探讨从上节的Android的系统框架图上可以看出,八ndroid的多媒体框架UlediaFraineWOrk)处于1.ibrariCS这一层,这层的1.ibrarary不是JaVa实现,大量:运用C/C+代码,通过JaVa的INl文件调用,这是因为多媒体文件须要快速的运算实力。MediaFramework这个架构,是基于第三方PacketVideo公司的OpcnCOREplatform来实现的,它支持全部通用的音减、视频及静态图像格式。其核心是OpenCore,全部Android平台的音视频采集、播放的操作都是通过它来实现。由此,通过OPenCOre,可以文件快速地开发出想要的多媒体应用程序,例如如:音视频的采集、回放、视频会议、实时的流媒体播放等应用。以开源ndroi<l的代码为例,OpenCore的代码在以下书目中:externaIZopencore/:这是OpenCore的根书目,包含的子书目如卜所示:android:这里面是一个上层的库,它基FPVPlayer和PVAuthor的SDK实现了一个为Android运用的Player和AUlhOr:baselibs:包含数据结构和线程平安等内容的底层库:codccs,v2:这是个内容较多的库,主要包含编解码的实现,以及个OPCnMAX的实现:engines:包含PVPIayer和PVAuthor引擎的实现:extern1ibsv2:包含了khronos的OPenMAX的头文件;fileformats:文件格式的解析(ParSer)工具:nodes:供应一些PVMF的NODE,主要是编解码和文件解析方面的:oscl:操作系统兼容库:pvmi:输入输出限制的抽象接口:protocols:主要是与网络相关的RTSP、RTP、HTTP等协议的相关内容;pvconmon:pvcommon库文件的Android,mk文件,没有源文件:pvplayer:PVPIayer库文件的AndrOid.mk文件,没有源文件:PYaUlhor:PVaUIhor库文件的Android.mk文件,没有源文件;tools_v2:编译工具以及一些可注册的模块。在CXternal/oPenCore/书目中还有2个文件,如下所示:Android,mk:全局的编译文件;pvplayer.conf:配置文件。在external/OPCnCore/的各个了文件夹中包含了众多的Android,mk文件,它们之间还存在若“递归”的关系1例如根书目下的AndrOid.mk,就包含了如下的内容片断:includeS(PV_TOP)pvcommonAndroid.mkinclude$(PV_TOP)ZpvplayerZAndroid.mkincludeS(PVTOP)Zpvauthor/Android.mk这表示了要引用PVCOfnmon,pvplayer和pvauthor文件夹卜.面的Android,mk文件。exierna"。Pencore/的各个Android,mk文件可以依据排列组合进行运用,将几个AndrOid.mk内容合并在一个库当中。2.2.2 MediapIayer1APIOpenCore在底层上为开发者供应了堪础实现,但实际开发时,.Android供应了对应的API供开发人员调用,这就是Mediaplayer和MeidaRecoidereMediaPlayer供应了播放的基本接口API:公开的方法:创建:StaticMediaPlyercreate(Contextcontext,Uriuri);获得位置:intgetCurrentPostion():获得媒体文件时长:intgtDuration():获得视频高度:intgetVideoHeight();获得视频宽度:intgctVidcoWidth():状态检查:是否处于播放状态BooleanisPlaying():暂停吩咐:voidpause0;起先播放:voidstart();可以看出MediaPlayer类供应了一个多媒体播放器的基本操作功能.运用一个例子程序对这个类进行测试:McdiaPlayermp=newMcdiaPlayerO:Mp.SetDataSource(PATH_TO_FI!.E):Mp.PrePare0;Mp.start():这是一个播放文件的例子.下面来看看播放资源文件的例子:MediaPlayermp=MediaPlayer.create(context,R.raw.soundfile1);Mp.start();MeidaRCCOrder是个对多媒体文件进行录制功能的类,它U.备了对录制的输入输出管理,本文主要探讨的是多媒体文件的播放功能,所以在此对其不作介绍。Android对多媒体文件的管理Android对多媒体文件的管理基本上自动进行的,它会自动时系统进行扫描,包括系统内存、SD卡上的图片、音乐、视频,它都会对其进行扫描进入数据库,运用SqIite的基本功能进行管理。这个管理工作由一个类MediaStore来实现"MediaStore这个类是android系统供应的一个多媒体数据库,android中多媒体信息都可以从这里提取。这个MediaStore包括了多媒体数据库的全部信息,包括音频,视频和图像,android把全部的多媒体数据库接口进行/封装,全部的数据库不用白已进行创建,干脆调用利用ConlenlResolver去掉用那些封装好的接口就可以进行数据库的操作了。首先,要得到,个ContentResolver实例,ContentResolver可以这样获得,利用一个八CliYily或者SerViCe的ConIeXl即可。如下所示:ContentResolvermResolver=ctx.getContentResolver();CtX是一个COnteXt,Activity,this就是那个ConteXt,这个COnteXt就相当于一个上下文环境<,得到这个Context后就可以调用gotContentResolver接口获得COntentReSolVer实例了。COntentReSOIVer实例获得后,就可以进行各种查询。在adl>shel1中.在data/data/com.android,providers,media<latabases/卜.,我们可以找到SD卡的数据库文件(一般是一个.db的文件),在这个时候输入吩咐Sqlite3加上这个数据库的名字就可以查询到android的多媒体数据库/.table吩咐可以列出全部多媒体数据库的表,.SehCme加上表名就可以查询到表中的全部列名。在这里可以我们利用SQ1.语句来查看想要的数据,代码如卜.所示:Cursorcursor=resolver.query(_uri,prjs,selections,selectArgs,order);ContentResolver的query方法接受几个参数,参数意义如下:Uri:这个Uri参数代表要包泡的数据库的名称加上表的名称。这个Uri一般都是干脆从MCdiaStore里取得,例如我们要获得全部歌的信息,就必需利用MediaStoro.Audio.Media.EXTERMA1.CONTENTJJRl这个Uri.专辑信息要利用MediaStore.Audio.Albums.EXTERNA1.CONTENTURI这个Iri来查询,其他杳询也都类似。Prjs:这个参数代表要从表中选择的列,用一个String数组来表示。Selections:相当于SQ1.语句中的Where子句,就是代表你的杳询条件。selectArgs:这个参数是指SeIeCtiOnS参数里有?这个符号。这里可以以实际值代替这个问号。假如SeIeCtiOnS这个没有?的话,那么这个String数组可以为null。Order:说明查询结果按什么来排序。上面就是各个参数的意义,它返回的查询结果,个CUrSor,这个CUrSOr就相当于数据库查询的中ReSUIt,用法和它差不多。增加,代码如F:ContentValuesvalues=newContentValucsO;values,put(MediaStore.Audio.Playlists.Members.P1.AYORDER,0):resolver.insert(uri,ValUeS);这个insert传递的参数只有两个,一个是Uri(同查询那个Uri)另一个是ContentValuese这个ContentValuses对应于数据库的一行数据,只要用put方法把每个列的设置好之后,干脆利用insert方法去插入就好了。更新,代码如下:ContentResolverresolver=ctx.getContcntRcsolver():Vriuri=MediaSlore.Audio.Media.EXTERNA1.CONTENTURI;ContentValuesvalues=newContentValuesO;values,put(McdiaStore.Audio.Media.DATEMODIFIED,sid):resolver,update(MediaStore.Audio.Playlists.EXTERNAl.CONTENTURI,values,where,SelectionArgs);上面update方法和查询还仃增加里的参数都很类似,这里就不再重发叙述,删除,代码如下:ContentResolverresolver-ctx.getContentResolverO:resolver,deIete(MediaStore.Audio.Playlists.EXTERNA1._C0NTEN1.URI,whore,SelectionArgs);通过对MediaStore类的基本介绍,很清晰地知道Andorid是如何实现对多媒体文件进行管理的,因此,对这傩点的解决就很轻易了。我们只须要调用这个类,就可以获得播放文件的相关信息,并且进行显示.2.3 Sqlite介绍23.1 Sqlite简介MediaStOre类是通过Sqlite进行管理的,因此,要对SqIit。进行简洁的探讨。它是一款轻型的数据库,是遵守八CID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中运用了它,它占用资源特别的低,在嵌入式设备中,可能只须要几百K的内存就够了它能够支持WindowsZ1.inuxZUnix等等主流的操作系统,同时能够跟很多程序语音相结合,比如TckC#、PHP.Java等,还有ODBC接口,同样比起MysqkPostgreSQ1.这两款开源世界网名的数据库管理系统来讲,它的处理速度比他们都快>Sqlite特点如下:1 .ACID事务:2 .零配置-无需安装和管理配置:3 .储存在单一磁盘:文件中的一个完整的数据库;4 .数据库文件可以在不同字节依次的机器间自由的共享;5 .支持数据库大小至2TB:6 .足够小,大致3万行C代码,250K:7,比一些流行的数据库在大部分-股数据库操作要快:8 .简洁,轻松的API:9 .包含TCl.绑定,同时通过Wrapper支持其他语言的绑定:10 .良好注择的源代码,并且有着90%以上的测试覆盖率:11 .独立:没有额外依余:12 .SoUrCe完全的OPen,你可以用于任何用途,包括出售它:13 .支持多种开发语言,C,PHP,Perl,Java,C#,Python.SqUitC为Android原生默认采纳的数据库。23.2 Sqlite运用在AndrOid中运用SqIite特别便利简洁,Android在运行时(run-time)集成了SQ1.ite,所以每个Android应用程序都可以运用SQ1.ite数据库。对于熟识SQ1.的开发人员来时,在Android开发中运用SQ1.ite相当简洁。但是,由于JDBC会消耗太多的系统资源,所以JDBC于手机这种内存受限设备来说并不合适。因此,Android供应了一些新的APl来运用SQ1.ite数据库,Android开发中,程序员须要学运用这些APU数据库存储在data项目文件夹“databases/下。Android不自动供应数据库。在AndrOid应用程序中运用SQ1.ite,必需自己创建数据库,然后创建表、索引,填充数据。*Android供应了SQ1.itCOPenHeIPer帮助你创建一个数据库,你只要继承SQ1.ileOpenHelper类,就可以轻松的创建数据库。SQ1.iteOperiHelper类依据开发应用程序的须要,封装了创建和更新数据库运用的逻,%SQ1.itcOpenHclpcr的子类,至少须要实现三个方法:构造函数,调用父类SQ1.iIeoPenHeIPer的构造函数。这个方法须要四个参数:上下文环境(例如,一个Activity),数据库名字,一个可选的游标工厂(通常是Null),个代表你正在运用的数据库模型版本的整数。onCreateO方法,它须要一个SQ1.iteDatabase对象作为参数,依据须要对这个对象填充表和初始化数据。OnUpgrage()方法,它须要三个参数.个SQ1.iteDatabase对象,“个I口的版本号和一个新的版本号,这样你就可以清晰如何把一个数据库从旧的模型转变到新的模型。调用gotReadabIeDatabase()或getWriteab1eDatabase()方法,你可以得到SQ1.iteDatabaso实例,具体调用那个方法,取决于是否须要变更数据阵的内容。23.3 度限制一个播放器假如没有对当前多媒体文件播放的限制实力,那么会注定会失败。所以,给播放器加入进度限制是必须要有的功能。23.3.1 乐播放的进度限制通过对上几节对Andorid核心功能的简洁介绍,现在实现进度限制就比较简洁了,只须要获得当前播放文件的总时长,放置一个SeekBar类的实例对象,通过对这个对象的触摸,获得位置,然后对音乐文件发送当前点位的位置,即可实现对音乐在播放时的进度限制。在实际播放时,须要在播放时实时更新SeekBar的位置,这时只须要在播放服务器不停地刷新SeekBar的当前位置即可。23.3.2 频播放的进度限制视频播放时的进度限制,须要进行多线程的消息处理机制,在播放时,创建一个多线程,此线程获得当前媒体的播放位置,同时将这个位置信息发送给主控界面,主控界面再更新SeekBar的当前位理。2. 5歌词解析歌诃解析,是MP3类音乐文件播放器的基本功能,本播放器对此也作了探讨。Mp3歌词文件为1.RC格式,其文件后缀名也是.Ira1.RC是一个计算机文件格式用于与一个音频文件(例如MP3,Vorbis或MIDI)同步歌词。当个音频文件被某些电脑上的音乐播放器或数字音乐播放器播放时,歌词会被显示。歌词文件通常与音频文件有相同的名字。例如:song,mp3和song.lrc.1.RC格式是基于文本的并与字幕文件相像简沽1.RC格式从Kuo(Djohan)Shiang-Shiang的歌词显示罂起先运用。它是第一个电视节目,假如不是第一,试图模拟卡拉OK表演U.它常常显示整行歌词,但它可以一次显示一个词,例如现代卡拉OK机,通过为每个单词而不是每行创建时间标记。行时间标记的格式为mn:ss.xx其中nm为分钟数,ss为秒数并且XX为百分之一秒。一般示例:ran:ss.xx第一行歌词1111:SS-xx其次行歌词11mss.xx最终一行歌词ID标答可能出现在歌词前2,尽管一些播放器不会意识到或筒洁的的忽视它们。al:这首歌所在的唱片集ar:歌词作者by:本1.RC文件的创建者offset:+/-以亳秒为单位整体时间戳调留,+增加,-减小re:创建此1.RC文件的播放器或编辑器ti:歌词(歌曲)的标题ve:程序的版本ID标签的例子:li:1.et'sTwistAgainar:ChubbyCheckeroppueBeatles,Thefau:WrittenbyKalMann/DaveAppell,1961'al:HitsOfThe60's-Vol.2-Oldies00:12.OOjNakuPendaPiya-NakuTakaPiya-Mpenziwe00:15.30Somemorelyrics.编辑扩展的荷洁格式仅在WalaSOft的WaIaoke上可用。这个功能修改和指定歌词的性别通过运用:M:男性,F:女性,D:合唱.例如:00:12.00第行歌词00:17.20F:其次行歌词00:21.10M:第三行歌词00:24.00第四行歌词00:28.25D:第五行歌词00:29.02第六行歌词假设男性为蓝色,女性为红色,合唱为粉色。第一行运用默认色(蓝色),因为没仃找到标签。其次行歌词以红色起先,因为找到了F:。第三行歌诃以磕色起先,因为找到了M:。第四行歌词以篮色起先,因为没有找到标签。第五行歌词以粉色起先,因为找到了D:。第六行歌词保持粉色,因为没有找到标如编辑增加格式增加1.RC格式是一个由A2MediaPIayer3的设计者开发的简洁1.RC格式扩展。它增加了一个额外的词时间标记,格式为:(mm:ss.xx.一个增加1.RC格式文件的例子:11m:SS.xx<mm:ss.xx>第一行第一个词<mm:ss.xx>第一行其次个词<mm:ss.xx>.第一行最终个词<mm:ss.xx>mm:ss.xx<mm:ss.xx>其次行第一个词<mm:ss.xx>其次行其次个词<mm:ss.xx>.其次行最终一个词<mm:ss.xx>mm:ss.xx<nss.xx>最终一行第一个词<mtn:ss.xx>最终一行其次个词<mm:ss.xx>.最终一行最终一个词<mm:ss.xx>在Andoid中,须要对1.rc文件进行解析,然后再显示出来。经过上述对1.RC歌词的介绍,可以很轻松地按格式对音乐播放文件进行歌诃显示。2.6 android开发步512.6.1 开发项目Android系统开发的四大基本组件有:ACtiVity(活动),ServiCe(股务),BrOHdCaSlReCeiVer(广播),ConlenlProVider(内容供应者),各组件之间要进行切换须要一个意图或企图Intent类,通过启动StartIntent()方法来使各组件进行跳转。Android的五大布局方式:1.inear1.ayOUl(线性布局)Frume1.ayoui(帧布局)Tab1e1.ayout(表格布局)Absolute1.ayout(肯定布局)Relative1.ayoul(相对布局)。五种布局方式可以相互嵌套,Android各种美丽的界面都是通过嵌套布局而实现的。AndrOid的线程,以及线程之间通信的中介:Handler类。AndrOid数据库:将在第四章介绍,这里不再介绍。Android配置文件:AndroidManifesl.Xml及res资源文件中各种属性布局方式引用的资源等。Android系统将插件ADT集成到了EeIiPSe工具上,因此,一个AndrOid程序启动后,系统会启动一个模拟器(EmUlalor),该模拟器是一款手机板的样式,拥有手机硬件的基本操作。我们也可以将右边的键盘通过代码属性设置将其附藏,界面的大小可自由设定,目前最大支持800X600的辨别率。2.6.2 Android工结构AndrOid工程基本结构书目包括:SrC(源代码)、gen(AndrOid系统自动生成的常员)、Res(资源文件:主要存放程序界面的布局配置(.xml)文件和图片资源"ndroidMinfes.xml是四大组件的驱动配置.文件,有它的存在,Android程序的四大组件才可以正常的跳转。以下我们将对AndroidManirestxml文件的相关内容进行系统的介绍:Android系统的任何一个程序启动都须要AndroidManifest.xml来启动程序,任何一个新建的工程书目都会自动生成一个AndroidManifest.xml文件,此配置文件是整个程序能够正常运行的核心,它里面包含了AndroidSDK的版本,程序运行的默认Activity,当程序中的任何一个组件触发事务后,系统都会自动的去AndroidManife$l.Xnd中找寻标识来,作出相应的操作。任何一个AndroidManifest.Xml文件的格式都应为:<?xrnlversion=*1.0*encoding="Utf-8”?<naniest><application><activity><intenl-filter><action><category><intcnt-filter><activity><application><uses-sdk><uses-permission><manifest>Android系统有一个编码的规定,支持的编码是"utf-8”,当程序中出现乱码时,我们须将其编码格式转化为“utf-8"。在AndroidVanifeSt.xml中会在第一行声明一句:<?XmlVerSiOn="1.0"encoding="utf-8"?>它是该系统支持的版本和编码。在其次行定义了我们须要运用的架构,该架构来自XmIns:android="”XmInS(XM1.namespacc)是一个命名空间,它就像一条河的源头一样能让我们找到系统架构,每一个配巴文件必需有这个XmInS,否则程序中的所运用的全部资源将无法找到。在application元来我们定义android:icon="0drawableicon”android:label=*stringappname”,android:icon是程序在手机中显示的图片,我们运用®drawable/icon表示了对res/drawable书目卜.的icon.png的引用。stringappname表示了对res/valuo书目下String.Xml中定义的appname参数的引用。<activityandroid:name=".PlayerAcivity*'><intcnt-filter><actionandroid:name=*android.intent,action.MIN*><categoryandroid:namc=,android.intent,category.1.AUNCHER"><intent-filter><activity>这是系统确定的首先要启动的Activity是PlayerActivitye在intent-filter的众多选项中,有action和CategOry等等属性,通常我们须要定义action的值为android,intent.action.MAINtcategory的值为android,intent,category.1.AUNCHER,它们是系统的值,,程序在解析到这些常用后就可以确定首先耍启动的ACtiVity.当我们须要通过一个组件触发处一个组件时,我们聘设定action和category的其它属性值,系统会依据我们设定的属性值去AndroidManifest.Xml的application中找寻标识,任何一个Activity的action和CategOry是唯,所以程序在任何时候都能唯启动个Activity,这样,不同的ACIiViIy之间的跳转就实现了。在AndroidManifest.Xml中有一个根结点<uses-sdk>,它是我们须要定义的ADT版本,例如我们将其值设定为android:IninSdkYerSiOn="8",则表示此Android工程所用的版本为2.2,AndrOid还有1.I、1.5、1.6、2.0、2.1.始终到目前最新的4.4等版本。假如我们须要对某个网络进行访问,比如打开个网页,这时候我们须要设置一个网络访问权限USeS-PermiSSion,并且将这个网络访问权限的值设置为android:name-android.pe11nission.INTERNET,这样我们就可以访问网络了。当然USeS-PCrmiSSion还有很多其它的权限,例如GPS定位权限,阅读器数据存取权限com.android,browser,permission.READHISTORYB(X)KMARKS等等。当程序的任何一个组件要用到时,都必需在AndroidNanifeSt.Xml文件中声明。四大组件要运用前都须要声明,其声明方式如下:<service><service><provider><provider><activity><activity><receiver><receiver>其中声明pr。Vider时还须要声明其授权authorities,每个组件里面还有很多的属性,会依据程序的具体须要定义不同的属性。过滤intent-filter有两种启动方式来启动界面:(1)显示方式显示方式是在代码中的干脆启动组件,启动时会声明Inten3在它的构造方法Intent(组件1,组件2)中干脆指定个组件的名字,然后调用方法startintent(intent)以启动指定的组件。(2)隐式方式隐式方式是通过过滤罂来过滤完成的,启动的组件必需满意action和Categoy的条件才能够启动该组件,这些属性是在AndrOidManifeS1.Xml文件中声明的。两种启动方式都可以通过程序setction(ACTION常量)和StartActivity(intent)或配置文件两种方式来实现组件的跳转。2.7 本章小结本章对android系统进行了具体的介绍以及对开发过程的一些难点问题进行了分析,从而为下几章系统设计与实现打下了良好