基于Android电子书阅读器研究与实现方案_第1页
基于Android电子书阅读器研究与实现方案_第2页
基于Android电子书阅读器研究与实现方案_第3页
基于Android电子书阅读器研究与实现方案_第4页
基于Android电子书阅读器研究与实现方案_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于Android电子书阅读器研究与实现方案基于Android电子书阅读器研究与实现方案摘要在对Android学习中,主要做了以下的研究:首先,Android系统是一个层次的软件集,所以先从层次方面对Android进行系统研究;其次,通过对Android平台上应用的开发,更进一步了解Android这个系统。此次基于Android平台的电子书阅读器的设计与实现主要通过Eclipse开发工具,Java语言与Sqlite数据库来完成的。本阅读器实现了本地阅读,手动翻页,书签的添加、查看、删除,自动翻页,书架,快速定位,及在线下载。本文主要介绍程序的设计思路、逻辑、架构、及数据库的设计与整体的实现流程。最后进一步阐述Android电子阅读器对文化发展的影响及其市场价值。关键词Android;电子阅读器;java;sqlite;书签DesignandDevelopmentofEbookReaderBaseonAndroidPlatformABSTRACTLearning

Android,mainlyfocusesonthefollowingresearch:Firstofall,theAndroidsystemisahierarchicalsoftwareset,sodoing

systemresearchonthelevelsofAndroid

cometofirst;Secondly,leaningmoreaboutthedevelopmentofapplicationsontheAndroidplatform,abetterunderstandingoftheAndroidSystem.Thecompletedofthedesignandrealizationofe-bookreaderbasedontheAndroidplatformmainlybyusingtheEclipsedevelopmenttools,JavalanguageandSqlitedatabase.Thee-bookreaderhasrealizedthelocalityreading,manualpage,addbookmark,quiry,delete,autoflip,bookshelf,rapidpositioning,andonlinedownload.Thisarticlemainlyintroducesthethinkingandlogic,architectureoftheprogramdesign,thedesignofthedatabaseandthewholerealizationprocess.Finally,furtherelaboratestheinfluenceofAndroide-readerontheculturaldevelopmentandtheirmarketablevalue.

Android;Ebookreader;java;Sqlite;bookmark目录TOC\o"1-3"\h\u22521摘要 1背景与意义1.1Android操作系统介绍1.1.1Android的认识Android是一款以Linux为基础的开源操作系统,主要使用于便携设备,如:手机、平板电脑等。2005年被Google收购,自2007年11月,Google公司正式向外界展示Android操作系统。Android的系统架构和其它操作系统一样,采用了分层的架构。从架构图看,Android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux内核层。Android是以Linux为核心的手机操作平台,作为一款开放式的操作系统,随着Android的快速发展,如今已允许开发者使用多种编程语言来开发Android应用程序,而不再是以前只能使用Java开发Android应用程序的单一局面,因而受到众多开发者的欢迎,成为真正意义上的开放式操作系统。1.1.2Android的发展短短几年内Android手机已经风靡全球。Android的主要竞争对手是苹果公司的iOS以及RIM的BlackberryOS。从2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。2012年2月数据,Android占据全球智能手机操作系统市场52.5%的份额,中国市场占有率为68.4%。伴随着移动互联网的发展,android手机凭借良好的用户体验和广大的用户人群,使得越来越多的开发者参与到android程序开发当中。2005年,Google收购了成立仅22个月的高科技企业Android。2007年11月5日,Google公司正式向外界展示Android操作系统。2007年11月5日,Google与34家手机制造商、软件开发商、电信运营商和芯片制造商共同创建开放手持设备联盟(简称:OHA)。2008年,PatrickBrady于GoogleI/O大会上提出AndroidHAL架构图。2008年8月18日,Android获得美国联邦通信委员会的批准。2008年9月,Android1.0正式发布。2008年9月22日,美国运营商德国T-Mobile在纽约正式对外发布第一款Android手机——T-MobileG1。该款手机为台湾宏达电子(HTC)代工制造,是世界上第一部使用Android操作系统的手机。2008年10月,全球业界都表示不看好Android操作系统,并且声称最多1年,Android就会被Google关闭。2008年10月22日,T-MobileG1正式发售。2009年4月30日,Android1.5正式发布。2009年4月,HTCG1和HTCG2市场大卖成为仅次于iPhone的热门机型。2009年9月15日,Android1.6正式发布。2009年9月,HTCHeroG3广受欢迎,成为全球最受欢迎的机型。2009年10月28日,Android2.0智能手机操作系统正式发布。2009年10月,Google发布了旗下第一款自主品牌手机:Nexusone(HTCG5)。该款手机为台湾宏达电子(HTC)代工制造。2010年1月7日,NexusOne开始对外发售。2010年2月3日,Linux内核开发者GregKroah-Hartman将Android的驱动程序从Linux内核“状态树”(“stagingtree”)上除去,从此,Android与Linux开发主流将分道扬镳。2010年5月19日,Google正式对外发布Android2.2智能操作系统。2010年5月20日,Google对外正式展示了搭载Android系统的智能电视-GoogleTV,该电视为全球首台智能电视。2010年7月1日,Google宣布正式与雅虎、亚马逊合作,并且在Android上推出多项Kindle服务和雅虎服务。2010年7月9日,美国NDP集团调查显示,Android系统已占据了美国移动系统市场28%的份额,全球17%的市场份额。2010年9月,Android应用数量超过9万个。2010年9月21日,Google对外公布数据,每日销售的Android设备的新用户数达到20万。2010年10月26日,Google宣布Android达到第一个里程碑:电子市场上获得官方数字认证的Android应用数量已经达到10万个。2010年12月7日,Google正式发布Android2.3操作系统。2011年1月,Android应用数量超过20万。2011年1月,Google对外公布数据,每日Android设备的新用户数达到30万。2011年2月2日,Android3.0正式发布。2011年3月25日,谷歌暂停开源Android3.0,并将暂时阻止小型手机生产商使用其Android3.0“Honeycomb”系统,期限未定。2011年7月,Google对外公布数据,Android每天的新用户达到55万,Android设备用户总数达1.35亿。2011年8月,谷歌收购摩托罗拉移动。2011年9月,数据显示,Android应用数目已经达到48万。2011年9月,Android的市场占有率达到43%。1.2电子书阅读器介绍伴随着互联网的兴起,电子书和电子书阅读器早在上世纪90年代就已经出现,它以其环保、容量大、携带方便等特点迅速吸引广大阅读爱好者的青睐,经过多年的发展,各种不同版本的电子书相继出现,使得电子书阅读器的风格、界面更加完善接近真实,并给用户带来了非凡的体验。目前市面上Ebook选择的平台主要为WinCE和Linux,国外NOOK宣称将于感恩节上市第一台Android系统的电子阅读器,但真机始终未与大家见面。OPPO推出国内首款基于Android机器人系统的6英寸EINK屏幕电子书阅读器,命名为Enjoy。Android是Google基于Linux平台开发的开放式开源操作系统,在手机上应用日臻成熟,如HTCHERO、GoogleNexusOne。Android系统的开放性和服务免费是其最大的特色,它是一个对第三方软件完全开放的平台,开发者在开发程序时拥有最大的自由度,可以随意DIY、共享。国内厂商和运营商纷纷加入了Android的阵营,包括中国移动,中国联通,华为通讯和联想等,Android平台在电子书阅读器上的应用将为Ebook的个性化、易用性开辟更广阔的道路。功能特点:1.一书多用:一本电子书阅读器可以装载很多本电子版的图书。大多数产品可以扩充SD卡/CF卡等大容量存储,可以作为一个小型的移动图书馆。部分产品还可以作为笔记本、资料夹使用。2.省电环保:电子书阅读器用电极省,不使用传统纸张,由于使用了先进的显示技术,可以帮助人们少买纸质书,减少砍伐树木,从而保护了环境。保护视力:新型电子书阅读器的显示原理与目前的电脑和手机不同,不是主动发光,而是与传统纸张一样靠反射自然光或灯光,因此无辐射,不刺眼,对视力无损伤。3.海量存储:目前的电子阅读器大多可以扩充外置存储卡,可以存储高达8G,16G的数字图书,拥有一本电子书阅读器,相当拥了一个小型的图书馆。空格电子书阅读器比手机、PDA、笔记本电脑、PSP、MP3等的优越性:电子书阅读器与它们的区别是专业阅读与非专业阅读之分。电子书阅读器有自已的阅读格式,可以分章节、加书签;电池继航时间,阅读界面明显优越于手机、PDA等。阅读的舒适性、方便性和可持久性占优。电子书阅读器和软件电子书阅读器相比,软件通常需要安装在电脑上或者手机上才能阅读,不专业,不方便。而电子书阅读器是一个已经集成了阅读软件的硬件设备,随着发展,这一个设备所集成的功能也越来越多。比如手写、批注、朗读、网络等等!1.3Android电子书阅读器的意义这世上最有趣的事,第一是人,第二是书。因为,书可以使人抓住这个世界秘密的核心。你读什么样的书就是什么样的人。如果你什么也不读,那么你的头脑就会萎缩,你的理想将会因失去活力而动摇。书籍和阅读带给我们的不仅是对心中理想世界的坚持,更是对我们思想和心灵的升华与净化,进而改变我们的生活轨迹。阅读使文字具有了永恒的价值,它比图像更空灵,比记忆更清晰,比冥想更深邃。它让你站在巨人的肩膀之上,让你凌驾于伟人的思考之上。阅读是人社会化的重要途径,它把自然人转化为社会人。我们所认识的世界、人生、社会,很多都源于阅读。阅读虽不能改变人生的长度,但可以改变人生的宽度和厚度。通过阅读你可以视通四海,思接千古,与智者交谈,与伟人对话。对于一个生命有限的人来说,这是一件多么幸福的事啊。而阅读的意义在于,它在超越世俗生活的层面上,建立起精神生活的世界。一个人的阅读史,即是他的心灵发育史。阅读使人超越动物性,不致沦为活动木偶,行尸走肉。停止阅读就意味着切断了与世界的沟通,与心灵的沟通,人生也就是进入了死循环,可以说,是阅读拯救了我们。我们无力改变人生的起点,但却可以通过阅读改变人生的终点。Android,时下市场份额占有量最大的移动设备操作系统;电子书阅读器文化传播的利器。开发基于Android平台电子书阅读器是非常有意义的。2相关知识与技术2.1Android的应用组件一个Android应用程序一般是由四个部分构建成的:首先,活动对象Activity,广播接收者BoardcastReceiver,服务Service以及内容提供者ContentProvider,当然要想完成一个Android真正的应用项目,光靠这些是还不够的,其中还包含着许多知识及组件值得去深入学习与掌握。1.活动对象(Activity):一个Activity就代表了一个可见的界面,android应用程序的运行过程就是在不同的Activity之间相互切换的过程。每个活动对象都有自己的视图(View)及事件相应,大部分应用程序都有多个活动对象。广播接收者(BroadcastReceiver):BroadcastReceiver是一个能够接收广播消息并响应的组件。消息可以由系统产生,例如电话及短信的接收,电池电量发生变化等,同时也可以由应用程序产生,对于产生的这两种广播消息,都可以在相应的部分设置相应的过滤规则来进行接收。服务(Service)服务是具有长生命周期并且没有用户界面的一个组件。如果服务没有启动,可以使用bindService()来连接一个服务。当连接上一个服务,就能够使用服务提供的外部接口来和服务进行通讯。Android系统很多地方都用到了服务,例如:多媒体、网络、蓝牙、以及可以自定义一个服务。内容提供者(ContentProvider):一个应用程序能够把它的数据保存在文件中,也可以保存在SQLite数据库中,或者其他任何可用的存储介质中。如果应用程序之间想要进行共享数据,那就要用到ContentProvider。一个内容提供者就是一个类,它实现了一个标准的方法集合。其他的应用程序可以通过这个类调用其中的方法来进行数据的保存和查找被内容提供者处理过的数据。2.2Android的拓展在Android中,开发者可以使用Java作为编程语言来开发应用程序,也可以通过NDK使用C/C++作为编程语言来开发应用程序,也可使用SL4A来使用其他各种脚本语言进行编程(如:python、lua、tcl、php等等),还有其他诸如:Qt(qtforandroid)、Mono(monoforandroid)等一些著名编程框架也开始支持Android编程,甚至通过MonoDroid,开发者还可以使用C#作为编程语言来开发应用程序。另外,谷歌还在2009年特别发布了针对初学者的AndroidSimple语言,该语言类似Basic语言。而在网页编程语言方面,JavaScript,ajax,HTML5,jquery、sencha、dojo、mobl、PhoneGap等等都已经支持Android开发。2.3系统开发工具2.3.1开发平台:Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentTools,JDT)。Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。2.3.2开发所用到的SDK:SDK(softwaredevelopmentkit)软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。因此,AndroidSDK指的既是Android专属的软件开发工具包。2010年5月20日的谷歌I/O大会演讲中,Android2.2(代号Froyo)正式公布。紧接着没多久,Android2.2SDK就开始正式提供下载。此外,Android2.2系统新增了许多功能,比如便携式热点功能、在AndroidBrowser中增加了对AdobeFlash的支持、以及对AndroidMarket进行了一些完善。谷歌表示,除了新增加许多企业功能之外,Android2.2在性能和速度上均有提高,给Android浏览器增加了V8Java脚本引擎,另外还增加了许多新的API和服务。2.3.3开发所用到的数据库:SQLite是一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla,PHP,Python)都使用了SQLite。SQLite由以下几个组件组成::SQL编译器、内核、后端以及附件。。SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展SQLite的内核变得更加方便。SQLite内部结构如图2-1所示。图2-1SQLite内部结构SQLite基本上符合SQL-92标准,和其他的主要SQL数据库没什么区别。它的优点就是高效,Android运行时环境包含了完整的SQLite。此外,SQLite不支持一些标准的SQL功能,特别是外键约束(FOREIGNKEYconstrains),嵌套transcaction和RIGHTOUTERJOIN和FULLOUTERJOIN,还有一些ALTERTABLE功能。除了上述功能外,SQLite是一个完整的SQL系统,拥有完整的触发器,交易等等。2.3.4网络环境:Tomcat服务器:Tomcat很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断的改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入新的功能。Tomcat是一个轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache服务器,可利用它响应对HTML页面的访问请求。实际上Tomcat部分是Apache服务器的扩展,但它是独立运行的,所以当你运行tomcat时,它实际上作为一个与Apache独立的进程单独运行的。这里的诀窍是,当配置正确时,Apache为HTML页面服务,而Tomcat实际上运行JSP页面和Servlet。另外,Tomcat和IIS、Apache等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。目前Tomcat最新版本为7.0.26Released[7]。TomcatApache如图2-2所示。图2-2TomcatApache3系统分析3.1用户群体:电子书阅读器的主要用户对象是,学生、老师以及喜爱阅读的人群,主要用户年龄集中在14岁到50岁之间。用户通过电子书阅读器进行日常阅读、学习,从中获取文化知识及阅读的乐趣。3.2系统目标本阅读器围绕日常生活与学习展开,用户可以通过本阅读器进行文本阅读。主要目标是,帮助用户通过手机或便携式设备管理图书及智能保存用户阅读进度,模拟真实手动翻页,使用户得到更加完美的用户体验。此外,还可以为用户建立一个属于自己的书架,帮助用户最快的找打自己喜欢的书。用户也可以通过web服务器来在线下载自己喜爱的书,尽可能的满足用户的阅读需求。3.3电子书阅读器的需求分析3.3.1电子书阅读器基本功能需求(1)本地进行查找、阅读(2)阅读实现翻页功能(3)记录最后一次阅读位置 (4)通过设置书签,进行跳跃阅读(5)可以进行在线图书下载(6)设置字体大小颜色及主题背景(7)自动翻页功能(8)阅读位置定位系统功能模块分析如图3-1所示。图3-1功能模块图3.3.2系统维护需求系统维护工作在整个系统的生命周期中经常被忽视。人们往往热衷于系统开发,当开发工作完成以后,多数情况下开发队伍被解散或撤走,而在系统开始运行后并没有配置适当的系统维护人员。这样,一旦系统发生问题或环境发生变化,最终用户将无从下手,这就是为什么有些信息系统在运行环境中长期与旧系统并行运行不能转换,甚至最后被废弃的原因。随着信息系统应用的深入,以及使用寿命的延长,系统维护的工作量将越来越大。系统维护的任务是改正软件系统在使用过程中发现的隐含错误,扩充在使用过程中用户提出的新的功能及性能要求,其目的是维护软件系统的"正常运作"。而本电子书阅读器跟所有应用软件一样,需要通过用户需求及问题反馈,定期的对系统进行维护,是系统的运行更加健康、寿命更长。3.3.3系统的安全需求安全性对于用户来说往往是较为重视的的一点,本电子书阅读器不含任何插件,也不会牵扯到第三方软件,不会向外界发送任何有关用户的信息。3.4系统流程分析系统流程主要是对图书阅读管理流程进行详细描述,通过采用系统流程图形来描述管理业务活动、进行规范化说明。主业务流程介绍:(1)启动程序,进入开机动画,稍后跳转到主界面;(2)进入主界面后,显示一段文字介绍,主要对操作进行大致说明;(3)导航条——包括查找、书签、退出及设置等四项操作;(4)主界面包括两个子界面,可以左右滑动进行切换,第二个界面为书架界面,主要功能为对近期所阅读过的书按照阅读的时间先后顺序保存,倒序显示出来。业务流程图如图3-2所示。图3-2主业务流程图以上为系统操作的基本主流程,以下主要介绍子流程操作。在线查找:(1)进入主界面,点击查找,选择在线查找;(2)跳转到在线图书列表界面,图书信息以列表形式显示;(3)点击所选图书,进行下载。本地查找:(1)进入主界面,点击查找,选择本地查找;(2)跳转到SDcard目录界面,SDcard信息以图文列表形式显示,进行文件的下级目录查看,及文本阅读;(3)阅读完后,点击退出,将当前阅读界面信息保存到默认书签数据库中,对书架信息进行更新。查找流程如图3-3所示。图3-3查找流程创建书签操作:(1)进入到阅读界面,点击menu键,选择书签设置;(2)选择添加书签,输入书签名,点击确定(若有书签名重复提示是否覆盖已有书签,点击确定,将原有同名书签覆盖),书签信息保存到书签数据库中。查看书签操作:(1)进入主界面,点击书签选项;(2)选择查看书签,显示书签列表;(3)点击所要操作的选项,进入相应阅读界面,进行阅读。书签流程如图3-4所示。图3-4书签流程设置流程操作:(1)进入主界面,点击设置选项;(2)跳转至设置界面,对字体大小、颜色、主题进行选择;(3)点击确定对设置数据进行保存,并对相关数据进行修改。设置流程如图3-5所示。图3-5设置流程3.5系统可行性分析可行性分析的任务,并非所有问题都有简单而又明了的解决办法,事实上,有许多问题不可能在预定的系统规模之内解决。如果问题没有可行的解决方案,那么花费在这项开发工程上的时间、资源、人力和经费都将是无谓的浪费。可行性研究的目的就是要用最小的代价在尽可能短的时间内确定问题是否能够解决。必须记住,可行性研究的目的并不是解决问题,而是确定问题是否值得去解决。怎样才能达到这种目的呢?当然不能靠主观猜想,只能通过客观的分析。必须分析几种主要的可能解法的利与弊,从而判断原定的系统目标和规模是否现实,以及系统完成后所能带来的效益是否达到值得投资开发这个系统的程度。3.5.1技术可行性本电子书阅读器鉴于是基于Android操作系统平台开发的,而Android系统自2008年发布到目前为止,已有多年的历程。期间系统从最初的Android1.1版本到目前即将推出的Android5.0操作系统JellyBean(果冻豆),期间经历了10个以上不同版本的更新,其稳定性毋庸置疑。而成功的Android版的电子书阅读器早已问世,如:掌阅、iReader阅读器、掌上书院等优秀产品。技术方面在一步一步提高,但随着社会多元化的发展,只是数款风格相似的阅读工具并不能满足人满的需要。另外,Android程序开发所用到的编程语言Java更是为众多程序员所喜爱。Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。对于系统开发过程中所用到的数据库为,Android系统自带的SQLite及web开发所用到的ApacheTomcat。3.5.2硬件可行性该软件的开发是基于Android系统平台的,因此通过相关Android框架开发测试通过的软件均可以在任何手机设备上运行,但前提是手机设备必须是Android操作系统。在手机上只需要有基本的配置即可,不需要大型的系统软件和应用软件来支持。由于该软件是采用系统自带数据库存储数据,因此安装此软件要保证足够的内存空间和手机磁卡空间。所以Android手机阅读器在软硬件上是可行的。3.5.3操作可行性移动手机设备已经深入人们的日常生活,对于手机的操作人们已经不再陌生。对于日常Android应用软件,绝大多数用户都能很快掌握其操作方法,并能熟练操作。而本电子书阅读器带有基本的操作指导,简洁的风格、清晰的界面,并为用户的操作做出相应的提示。操作简单,逻辑清晰。4系统设计在软件需求分析阶段,对于用户的各种需求我们已经做好了详细地分析,并做出了软件开发所需要的技术支持,解决了软件功能性即“做什么”的问题,在软件设计阶段,要着手解决“怎么做”的问题。软件设计是一个把软件需求变换成软件表示的过程,系统设计时需注意以下几点:(1)安全性。在当今信息化时代,信息就是基础就是财富,保护信息的安全性十分必要,尤其是作为个人信息更是具有较高的安全性要求。(2)先进性。在充分满足用户需求的前提下,结合当今广泛应用的先进的方法进行设计,立足于用户需求,开发出符合市场需求的软件产品。(3)可扩展性。因为不同手机对于电子书阅读器的兼容性不同,并且,在很多方面上都需要进行改进以适应手机发展趋势及用户的应用需求,所以在软件设计阶段,要充分考虑到软件应用的可扩展性,便于将来软件升级更新,给其他系统留接口,能够比较友好地与其他系统衔接这也是软件设计的原则之一。(4)有效性。有效性主要包括功能有效性,设计的软件一定要最大限度地满足用户的需求,包括用户显式的需求和隐式的需求。4.1系统结构设计系统的设计模式采用经典的MVC模式,软件的设计思想采用面向对象的编程模式来实现。MVC(Model-View-Controller):M是指逻辑模型,V是指视图模型,C则是控制器。一个逻辑模型可以对于多种视图模型,一种视图模型也可以对于多种逻辑模型。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式,而C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新,这与《设计模式》中的观察者模式是完全一样。MVC好处:从用户的角度出发,用户可以根据自己的需求,选择自己合适的浏览数据的方式。比如说,对于一篇在线文档,用户可以选择以HTML网页的方式阅读,也可以选择以PDF的方式阅读。从开发者的角度,MVC把应用程序的逻辑层与界面是完全分开的,最大的好处是:界面设计人员可以直接参与到界面开发,程序员就可以把精力放在逻辑层上。而不是像以前那样,设计人员把所有的材料交给开发人员,由开发人员来实现界面。在Eclipes工具中开发Android采用了更加简单的方法,设计人员在DroidDraw中设计界面,以XML方式保存,在Eclipes中直接打开就可以看到设计人员设计的界面。Android中界面部分也采用了当前比较流行的MVC框架,在Android中:1.视图层(View):一般采用XML文件进行界面的描述,使用的时候可以非常方便的引入。当然,如何你对Android了解的比较的多了话,就一定可以想到在Android中也可以使用JavaScript+HTML等的方式作为View层,当然这里需要进行Java和JavaScript之间的通信,幸运的是,Android提供了它们之间非常方便的通信实现。2.控制层(Controller):Android的控制层的重任通常落在了众多的Acitvity的肩上,这句话也就暗含了不要在Acitivity中写代码,要通过Activity交割Model业务逻辑层处理,这样做的另外一个原因是Android中的Acitivity的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉。3.模型层(Model):对数据库的操作、对网络等的操作都应该在Model里面处理,当然对业务计算等操作也是必须放在的该层的。就是应用程序中二进制的数据。在AndroidSDK中的数据绑定,也都是采用了与MVC框架类似的方法来显示数据。在控制层上将数据按照视图模型的要求(也就是AndroidSDK中的Adapter)封装就可以直接在视图模型上显示了,从而实现了数据绑定。比如显示Cursor中所有数据的ListActivity,其视图层就是一个ListView,将数据封装为ListAdapter,并传递给ListView,数据就在ListView中现实。系统构架设计如图4-1所示:图4-1MVC框架4.2系统开发环境和目标平台4.2.1系统开发环境(1)Eclipse编程软件Eclipse是一个相当著名的开源JavaIDE,主要以其开放性、极为高效的GUI、先进的代码编辑器等著称,其项目包括许多各种各样的子项目组,包括Eclipse插件、功能部件等,主要采用SWT界面库,支持多种本机界面风格。(2)AndroidSDKAndroid平台的手机价格低廉,但其性能却一点也不低廉,随着Android手机的普及,Android应用的需求势必会越来越大,这是一个潜力巨大的市场,会吸引无数软件开发商和开发者投身其中。(3)JDK环境JDK(JavaDevelopmentKit)是SunMicrosystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的JavaSDK。JDK是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。JDK是学好Java的第一步。而专门运行在x86平台的Jrocket在服务端运行效率也要比SunJDK好很多。从SUN的JDK5.0开始,提供了泛型等非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高。4.2.2系统目标平台本软件的目标平台为Android2.1、Android2.2或者更高的版本。4.2.3Android开发环境搭建一JDK安装设置环境变量步骤如下:(1)我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量:(2)JAVA_HOME值为:D:\ProgramFiles\Java\jdk1.6.0_18(你安装JDK的目录)(3)CLASSPATH值为:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\bin;(4)Path:在开始追加%JAVA_HOME%\bin;安装完成之后,可以在检查JDK是否安装成功。打开cmd窗口,输入java–version查看JDK的版本信息。出现类似下面的画面表示安装成功了:如图4-2所示。图4-2Jdk安装成功二、Eclipse安装本软件安装的是EclipseIDEforJavaDevelopers的win32bit版。Eclipse版本信息如图4-3所示。图4-3Eclipse版本三、AndroidSDK安装在AndroidDevelopers下载android-sdk_r05-windows.zip,下载完成后解压到任意路径。(1)运行SDKSetup.exe,点击AvailablePackages。如果没有出现可安装的包,请点击Settings,选中Misc中的"Forcehttps://..."这项,再点击AvailablePackages。(2)选择希望安装的SDK及其文档或者其它包,点击InstallationSelected、AcceptAll、InstallAccepted,开始下载安装所选包(3)在用户变量中新建PATH值为:AndroidSDK中的tools绝对路径(4)“确定”后,重新启动计算机。重启计算机以后,进入cmd命令窗口,检查SDK是不是安装成功。运行android–h如果有类似以下的输出,表明安装成功:验证安装成功界面如图4-4所示。图4-4验证SDK安装成功四、ADT安装(1)打开EclipseIDE,进入菜单中的"Help"->"InstallNewSoftware"(2)点击Add...按钮,弹出对话框要求输入Name和Location:Name自己随便取,Location输入/android/eclipse。在workwith后的下拉列表中选择我们刚才添加的ADT,根据提示一步步next,然后选择Preferences...在左边的面板选择Android,然后在右侧点击Browse...并选中SDK路径,点击Apply、OK配置完成。五、创建AVD为使Android应用程序可以在模拟器上运行,必须创建AVD。(1)在Eclipse中。选择Windows>AndroidSDKandAVDManager;(2)点击左侧面板的VirtualDevices,再右侧点击New;(3)填入Name,选择Target的API,SDCard大小任意,Skin随便选,Hardware目前保持默认值;(4)点击CreateAVD即可完成创建AVD。4.3系统功能模块设计对于一个实用性的电子书阅读器,从功能上来讲主要分为以下几大部分:从整体功能上来看,不难想象到的是图书阅读、翻页、分页、跳转、添加书签、书签跳转、删除书签、文本设置、主题设置及自动翻页等。功能模块图如图4-5所示。图4-5功能模块图重点模块介绍:图书阅读功能模块:通过比特流形式将文本数据随机读入内存,再由输出流以GBK编码形式输出,通过Bitmap及画布将文本信息展示到手机屏幕上去。对于阅读翻页形式主要是采用模拟手动翻页形式,实现过程较为麻烦,其中主要用到PointF(浮点)、GradientDrawable(图形绘制工具)及多点触摸监听。分页是在对流文件进行分页显示时翻页即进行页码增加。阅读时将屏幕进行锁定、获取屏幕默认尺寸大小,进行背景字体大小、颜色、主题初始化。书签功能模块:此模块主要是对阅读的进度位置以数值形式保存,方便用户进行阅读定位。其主要内容包括书签添加(图书名称、添加时间、添加位置、自定义书签名称),查看书签(书签名称、保存日期、添加书目),删除书签(将书签从数据库中删除)。阅读时,当退出时系统会默认添加一个书签标记当前阅读位置,方便下次进行阅读。自动翻页模块:自动翻页主要是针对用户需求而定,用户可以根据个人实际情况将自动翻页的间隔时间设为10、20、30、60秒不等,主要实现方法是使用线程控制。但翻页时无法进行手动触摸,因此多点监听无法获取数据,从而无法显示翻页效果,但自动翻页依然可以进行。本地查找模块:用户在第一次使用时,可以通过本地查找SDcard内容,来寻找自己喜欢的书籍。在用户使用本电子书阅读器进行阅读后,系统会自动记录所读过的书籍,将为用户建立一个属于用户个人的本地书架。用户可以根据书架所存放的图书来进行日常阅读,省去每次查找的麻烦。在线查找模块:本电子书阅读器将提供一个在线访问机制,用户通过上网形式来浏览网上最新的图书,及选择下载自己喜欢的图书。Web端访问时,系统将以列表形式返回web端信息。4.4系统UML图UML是UnifiedModelingLanguage的缩写是用来对软件密集系统进行可视化建模的一种语言。UML为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言,利用UML可以很直观的显示整个系统的功能和流程,现在就对本电子书阅读器进行UML建模分析,UML用例图如图4-64-7所示。图4-6主UML用例图图4-7书签UML用例图4.5数据库详细设计考虑到本电子书阅读器在使用过程中所产生的需要记录的数据量较少,综合资源、经济、方便,易用等多方面因素,确定采用Android自带的轻量级关系型数据库SQLite作为开发中所使用到的数据存储介质。由于本数据库是手机等便携式移动设备系统自带的数据库,在使用过程中可能会发生遗失、损坏的一系列突发情况,所以建议用户将一些重要的数据通过USB接口导出备份到PC机上去,以免给自身带来不必要的麻烦。4.5.1数据库表关系设计明确了在开发过程中只用到了与书签有关的一些记录型数据,所以在数据库的设计及数据间的关系上的处理上要紧密贴合用户需求,及保证表及表中字段的合理性。表中主要记录的是书签的详细信息。数据库名称:FlyReader。表名:mark_table。数据库表如图4-8所示。图4-8数据库表4.5.2数据库表字段设计(1)_id:代表书签的ID,类型为整型(int),同时也是一个自增长的主键字段。(2)mark_name:记录书签名称,其中存储时分为两种一种为用户自定义的书签名,主要供用户主动添加使用;另外一种为默认书签,帮助用户记录当前的阅读进度,方便下次阅读。类型为文本型(text)。(3)book_name:记录书签所添加的书籍名称,类型为文本型(text)。(4)author:记录书籍的作者,类型为文本型(text)。(5)progress:记录阅读的进度,类型为文本型(text)。(6)pageNumber:记录书签所添加的页码。类型为文本型(text)。(7)body:字体大小,类型为整型(int)。(8)color:记录字体颜色,类型为文本型(text)。(9)theme:记录主题,类型为文本型(text)。(10)mark_time:记录书签添加的时间,类型为长整型(long)。5编码与实现由于在整个实现过程中,牵扯到了许许多多的控件、方法、类与接口。所以在编码与实现方面,本文主要是对重要的过程、类与方法进行介绍。电子书阅读器的实现主要分为以下几个阶段:5.1主界面主界面主要是通过导航条的方式,引导用户进行相关的操作。相关代码如下://导航条信息 privatevoidloadButtomMenu(){ gv_menu=(GridView)this.findViewById(R.id.gv_menu); gv_menu.setBackgroundResource(R.drawable.channelgallery_bg); gv_menu.setGravity(Gravity.CENTER); ArrayList<HashMap<String,Object>>data=newArrayList<HashMap<String,Object>>(); HashMap<String,Object>map=newHashMap<String,Object>(); map.put("itemImage",R.drawable.ic_menu_search); map.put("itemText","查找"); data.add(map); map=newHashMap<String,Object>(); map.put("itemImage",R.drawable.ic_menu_book_flag); map.put("itemText","书签"); data.add(map); map=newHashMap<String,Object>(); map.put("itemImage",R.drawable.ic_menu_exit); map.put("itemText","退出"); data.add(map); map=newHashMap<String,Object>(); map.put("itemImage",R.drawable.ic_menu_manage); map.put("itemText","设置"); data.add(map); //使用ViewFlipper进行欢迎界面与本地书架的切换 publicbooleanonFling(MotionEvente1,MotionEvente2,floatvelocityX, floatvelocityY){ if(e1.getX()-e2.getX()>FLING_MIN_DISTANCE&&Math.abs(velocityX)>FLING_MIN_VELOCITY) { viewFlipper.setInAnimation(inFromRightAnimation()); viewFlipper.setOutAnimation(outToLeftAnimation()); viewFlipper.showNext(); intchild=viewFlipper.getDisplayedChild(); switch(child){ case0: local_img_btn.setIcon(R.drawable.local_view); main_img_btn.setIcon(R.drawable.main_click_view); break; case1: local_img_btn.setIcon(R.drawable.local_click_view); main_img_btn.setIcon(R.drawable.mian_view); break;} }5.2书签数据库的实现数据库操作主要是针对书签的增删查进行操作,目标明确思路清晰。代码如下:publicclassDbHelperextendsSQLiteOpenHelper{ privatestaticStringDBNAME="FlyReader";//数据库名称 privatestaticintVERSION=1;//版本号 privatestaticStringTABLE="book_mark";//表名 publicDbHelper(Contextcontext){ super(context,DBNAME,null,VERSION); //TODOAuto-generatedconstructorstub }/** //建表语句及字段 @Override publicvoidonCreate(SQLiteDatabasedb){ Stringsql="createtable"+TABLE+"(_idINTEGERPRIMARYKEYAUTOINCREMENT,"+ "flagVARCHAR(20),book_NameVARCHAR(20),"+ "page_NumVARCHAR(10),progressVARCHAR(20),pathVARCHAR(30),"+ "bodyinteger,colorinteger,themeVARCHAR(20));"; db.execSQL(sql); } //添加书签publicvoidaddMark(Markmark){ db=openHelper.getWritableDatabase(); ContentValuesvalue=newContentValues(); value.put("flag",mark.getFlag()); value.put("book_Name",mark.getBook_Name()); value.put("page_Num",mark.getPage_Num()); value.put("progress",mark.getProgress()); value.put("path",mark.getPath()); value.put("body",mark.getBody()); value.put("color",mark.getColor()); value.put("theme",mark.getTheme()); db.insert(TABLE,null,value); db.close(); } //获取用户书签 publicList<HashMap<String,Object>>getAllData(){ //TODOAuto-generatedmethodstub db=openHelper.getReadableDatabase(); ArrayList<HashMap<String,Object>>list=newArrayList<HashMap<String,Object>>(); cursor=db.rawQuery("select*from"+TABLE+"orderby_iddesc;",null); while(cursor.moveToNext()){ HashMap<String,Object>map=newHashMap<String,Object>(); map.put("_id",cursor.getInt(0)); map.put("flag",cursor.getString(1)); map.put("book_Name",cursor.getString(2)); map.put("page_Num",cursor.getString(3)); map.put("progress",cursor.getString(4)); map.put("path",cursor.getString(5)); map.put("body",cursor.getString(6)); map.put("color",cursor.getString(7)); map.put("theme",cursor.getString(8)); if(!cursor.getString(2).contains("defult")){ list.add(map); } } cursor.close(); db.close(); returnlist; } //删除书签 publicvoiddel_mark(){ db=openHelper.getWritableDatabase(); db.execSQL("deletefrom"+TABLE+"whereflag!=?",newString[]{"defult"}); db.close(); }5.3分页及书签的实现分页是通过对以流形式的文本进行分段读取与显示,显示内容的多少主要是根据字体大小及设备屏幕大小来进行计算的。代码如下: publicBookPageFactory(intw,inth){//构造函数 pageNum=1; mWidth=w; mHeight=h; mPaint=newPaint(Paint.ANTI_ALIAS_FLAG); mPaint.setTextAlign(Align.LEFT); mPaint.setTextSize(m_fontSize); mPaint.setColor(m_textColor); mVisibleWidth=mWidth-marginWidth*2; mVisibleHeight=mHeight-marginHeight*2; mLineCount=(int)(mVisibleHeight/m_fontSize);//可显示的行数 } publicvoidopenbook(StringstrFilePath)throwsIOException{ book_file=newFile(strFilePath); bookTitle=strFilePath.substring(strFilePath.lastIndexOf("/")+1,strFilePath.lastIndexOf(".")); longlLen=book_file.length(); m_mbBufLen=(int)lLen; m_mbBuf=newRandomAccessFile(book_file,"r").getChannel().map( FileChannel.MapMode.READ_ONLY,0,lLen); }5.4主要的业务逻辑本程序的核心主要是对手动翻页的实现、文件读取、网络下载等三方面问题进行解决。主要代码如下: //网络下载实现核心代码classDownloadThreadextendsThread{//通过线程进行下载 privateHashMap<String,String>bookInfo; privateFilesaveDir; publicDownloadThread(HashMap<String,String>bookInfo,FilesaveDir){ this.bookInfo=bookInfo; this.saveDir=saveDir; } @Override publicvoidrun(){ //下载地址78:8080/web/src/* Stringtemp=bookInfo.get("id"); StringbookName=temp.substring(temp.indexOf(":")+1); StringbookUrl="9:8080/web/src/"+bookName +".txt";URLurl; try{ url=newURL(bookUrl); HttpURLConnectionconn=(HttpURLConnection)url .openConnection(); conn.setConnectTimeout(5000); conn.setRequestMethod("GET"); inStream=conn.getInputStream(); progressLength=conn.getContentLength(); RandomAccessFileaccessFile=newRandomAccessFile(saveDir, "rwd"); accessFile.setLength(progressLength); byte[]buffer=newbyte[1024]; intlen=0; intcountLen=0; while((len=inStream.read(buffer))!=-1){ accessFile.write(buffer,0,len); countLen+=len; Messagemsg=handler.obtainMessage(); msg.arg1=countLen; System.out.println("len="+len); msg.sendToTarget(); Thread.sleep(1000);//service中下载进度条的更新时间间隔 } accessFile.close(); }catch(Exceptione){ e.printStackTrace(); } } }} //手动翻页实现算法代码 publicPageWidget(Contextcontext){ super(context); //TODOAuto-generatedconstructorstub mPath0=newPath(); mPath1=newPath(); createDrawable(); mPaint=newPaint(); mPaint.setStyle(Paint.Style.FILL); ColorMatrixcm=newColorMatrix(); floatarray[]={0.55f,0,0,0,80.0f,0,0.55f,0,0,80.0f,0,0, 0.55f,0,80.0f,0,0,0,0.2f,0}; cm.set(array); mColorMatrixFilter=newColorMatrixColorFilter(cm); mMatrix=newMatrix(); mScroller=newScroller(getContext()); mTouch.x=0.01f;//不让x,y为0,否则在点计算时会有问题 mTouch.y=0.01f; } /** *Author:hmg25Version:1.0Description:计算拖拽点对应的拖拽脚 */ publicvoidcalcCornerXY(floatx,floaty){ if(x<=mWidth/2) mCornerX=0; else mCornerX=mWidth; if(y<=mHeight/2) mCornerY=0; else mCornerY=mHeight; if((mCornerX==0&&mCornerY==mHeight) ||(mCornerX==mWidth&&mCornerY==0)) mIsRTandLB=true; else mIsRTandLB=false; }5.5系统运行效果主界面显示布局,上部为主界面、及书架两个字界面切换按钮,下部为操作导航。大方简洁的六个按钮可以一目了然知晓如何操作电子书,很人性化的提示按钮让人快速步入阅读的快乐体验中,本地书架如图5-2所示。图5-1本地书架翻页动画的实现效果,这里是本电子书的一个很大的亮点,还原一个阅读纸质书的感觉,翻页的效果有很强的代入感和真实体验,给人以阅读下去的乐趣体验,拉近了电子与人互动的感官体验,如图5-3所示。图5-2预读与翻页效果自动翻页操纵选项,这个功能可以满足读者只需要动动眼皮,就能轻松阅读的体验,让电子书的便利得到最大彰显,如图5-4所示。图5-3自动翻页书签列表显示效果,可以让读者对自己感兴趣的章节进行记录,可以反复阅读,或者为上次阅读遗留的部分进行快速找寻和回顾,如图5-5所示。图5-4查看书签在线图书显示列表,互联网的时代从网上获取源源不断的电子书资源才是本电子书可以让读者长期利用下去的动力,随时随地下载自己喜欢的书目就显得尤为重要,如图5-6所示。图5-5在线查看在线图书下载进度提示,这个也是比较人性化的小设计,可以让读者知道下载的进度,此时可以利用这个时间做些别的事情,不用盲目等待电子书的下载,如图5-7所示。 图5-6在线下载6系统测试与运行6.1系统测试的目的从软件开发者的角度出发,表明软件产品中不存在错误的过程,验证该手机软件达到要求,确立人们对软件质量的信心。符合需求设计的要求;符合一些应用标准的要求,比如不同用户的操作习惯和要求,项目工程中的可维护性、可测试性等要求。在真实系统工作环境下通过与系统的需求定义作比较,检验完整的软件配置项能否和系统正确连接,发现软件与系统设计文档不符合或与之矛盾的地方。从用户角度出发,在实际运行(使用)环境下,对手机软件系统进行的使用测试,暴露软件中存在的错误和缺陷。从客户的需求出发,从客户角度去看产品,客户会怎么去使用这个产品,使用过程中会遇到什么样的问题,只有这些问题都解决了,软件产品的质量才可以说是上去了。验证系统的正确性,可用性、稳定性、兼容性和易用性等等,对用户需求做出有效答复。根据测试进度、资源、问题、风险以及其他组件的协调等进行评估,总结测试活动的成功经验与不足,以便今后更好的版本更新。6.2系统测试范围基于Android电子书阅读器,是一款图书阅读软件,所以测试仅依据用户需求以及相应的设计文档进行系统测试,包括功能测试、性能测试、用户界面测试等,主要功能包括:用户图书阅读测试,书签测试,自动翻页测试,设置测试。6.3软件测试方法概述系统测试方法分为:功能测试,一致性测试,性能测试,压力测试,容量测试,安全性测试,恢复性测试,备份测试,GUI测试,健壮性测试,兼容性测试,可用性测试,可安装性测试,文档测试,在线帮助测试以及数据转换测试等。从手机软件系统测试的角度分为:功能模块测试,交叉事件测试,压力测试,容量性能测试,性能测试和用户手册测试等。等价类分析方法是把所有可能的输入数据划分成若干部分,针对手机状态大致可以归几个大类:1.按键类(等价法):有效输入和无效输入(有效输入指UM和菜单指示;无效输入指测试菜单功能此时没有定义的按键和用户动作);2.外部中断类(等价法):常用包括来电和来消息(短信、彩信、push消息);掀合盖;侧键;耳机、FM;情景模式;电量不足,不常用包括充电;闹钟、记事本、关机时间、整点报时提示;Icon动画显示;Icon动画刷新;编辑界面pop显示框输入为空或满;编辑界面pop显示框状态输入法默认字符编码默认;失效SIM卡;大容量等SIM卡兼容;排序;号码识别,以及无效;6.4软件性能测试流程测试系统的正确性采用白盒测试,根据系统的设计书,说明书等了解系统的具体设计方法,检查系统每一部分的代码,查看有无错误,然后运行调试,找出Bug,修改。测试系统的可用性采用黑盒测试方法,根据软件产品的功能设计规格,在计算机上进行测试,以证实每个已经实现的功能是否符合要求。测试系统的稳定性、兼容性测试得采用系统测试,将通过确认测试的软件,作为整个基于计算机系统的一个元素,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。除此之外可以故意采用错误的操作方法,以检测系统的在操作失误的情况下的稳定性,比如登录时反复输入错误的用户名和密码会出现什么结果等等。对于系统的易用性测试需请客户前来使用,在使用中改进,以提高系统易用性。6.5测试内容及结果6.5.1内容与功能检查(1)检查整个页面布局是否完整;(2)检查有无文字被覆盖现象或其它控件显示对象;(3)检查有无超过边界的控件;(4)检查页面之间切换是否流畅,切换对象是否正确;(5)检查系统相关操作功能是否正确;检查页面上是否有功能疏漏,核心功能为:(1)查询与显示功能;(2)输入、修改、删除功能;(3)检查总体的业务流程和全局功能;6.5.2容错性与易用性测试容错性测试是功能测试的一部分,可以检查软件系统对合法输入的处理能力,即检查在正常情况下功能是否能够实现,即为功能测试。检查系统对非法输入的处理能力,即检查在非正常情况下系统是否能够正确地处理,即为容错性测试。其主要检查:系统是否能够自主处理遇到的错误而保证功能不失效;易用性测试主要检查:(1)命令、提示、信息是否具有协调的含义;(2)导航操作是否简单清晰,易于操作;7总结与展望总结整个开发过程,从前期的选题、开题报告到需求分析,系统功能、架构分析及整个系统的设计、编码与实现。期间,遇到了很多问题,其中包括:手动翻页效果、在线下载、自动翻页及书签分类存储的实现。但在经过一番思考及网上下载参考经典的Demo实例最终将问题一一解决,并且整个过程中自己也创作了几个有关的Demo,并上传至CSND,以供他人参考。虽然现在整个程序运行已经很稳定了,但不敢保证没有BUG的存在,希望通过以后的使用及用户反馈将BUG一一解决,使整个程序更加趋于完美。本电子书阅读器现暂时只支持TXT文本,但在以后的更新及升级阶段,将对PDF、UMD等压缩格式的文本进行解析,并提供给用户阅读使用。经过近两个月的学习与工作,终于完成了《基于Android电子书阅读器》的设计与论文。从开始选题,到程序的实现,再到论文的完成,每一步都有新的尝试与挑战。然而,可以说这是我大学期间独立完成的最大的一个项目,也将是我大学期间完成的最后一个项目。在此期间,我不仅学到了很多关于Android的知识,同样也对项目开发有了更深一步的了解。从框架的搭建,到程序的编写、运行与测试每一步都遇到了不同程度的难题,但在自己的努力下,与老师的点拨下,最终将难题一一解决。虽然这是我第一次编写电子书阅读器,有可能还有很多漏洞与不足的存在。但我可以很自信的说,不论是个人想法、网络借鉴,还是老师的点拨,每一行代码都是我的劳动成果。这次论文完成的过程,使我受益匪浅。我真切的感受到了只要用心去做一件事,就一定能从中获得终身受益的东西。论文重在研究、探讨、学习。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论