• 1.50 MB
  • 2022-04-22 13:44:51 发布

安卓智能手机推送系统毕业设计论文.doc

  • 29页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'目录安卓智能手机推送系统毕业设计论文目录第1章绪论11.1研究现状与发展趋势11.2研究意义21.3研究内容2第2章系统设计32.1系统界面设计32.2总体功能设计42.2.1具体方案选择5第3章系统实现73.1系统软硬件环境配置73.1.1Android开发环境介绍73.1.2Android开发平台搭建73.1.3Android系统架构研究83.1.4类库83.1.5Tomcat服务器83.2客户端各功能模块实现93.2.1启动模块103.2.2学习资源列表模块103.2.3学习资源细览模块113.2.4推送消息通知123.2.5推送消息客户端模块143.3服务端各功能模块实现173.3.1学习资源管理模块173.4数据提供183.5后台服务193.6推送机制以及分析19第4章结论与展望214.1结论214.2不足之处及未来展望2127 目录参考文献23致谢2527 基于安卓的学习资源推送系统的设计与实现第1章绪论1.1研究现状与发展趋势据Gartner最新数据显示(图1-1),2010年第二、三季度全球智能手机销售继续大幅增长,其中第三季度安卓占全球智能手机市场的25.5%,仅次于塞班,成为第二大智能手机系统。2010第二、三季度与去年同期相比,增度分别是15.4%及22%,增势迅猛。而塞班系统较09年的市场份额,尽管终端销量有大幅度提升,但增势下滑10%,形势非常严峻。其他操作系统的表现则要平稳很多。图1-1四年间手机系统发展状况安卓是首款开源代码的操作系统,采用Linux内核,开放手机联盟(OHA)成员可以任意使用和修改安卓的SDK软件包。系统的开源性使其具有良好的拓展性,一方面,为众多移动应用开发者提供了良好的系统性平台,有利于移动应用的集合;另一方面,终端厂商可以针对自身的特殊需要“定制化开发”。与此相比,尽管2010年2月,塞班基本完成开源工作,但由于代码臃肿,用户界面设计缺失,塞班的开源并无实际意义,错失发展良机。据Informa预测,2012年,安卓手机销量将超过诺基亚塞班手机,届时安卓将成为全球最大的智能手机平台。谷歌表示目前安卓手机每日平均激活量为20万部,销售速度加速上涨。我们认为,安卓在全球市场的成长壮大,塞班市场份额不断下跌已成不争事实。安卓操作系统发展迅猛主要得益于免费、开源和良好产业运作策略,这三点为安卓在智能手机市场赢得更多的发展机遇。系统的免费让更多的厂商加入,推动了份额的上升;代码的开源让更多的开发者进入应用开发;应用的丰富吸引了更多用户选择,这也是谷歌值得众多厂商学习的地方。此外,谷歌通过OHA联合众多厂商进行系统研发,不断更新版本,将系统应用推广到更多的终端产品中,确保用户体验持续改善。所以安卓软件的学习和开发不管在国内外都具有有很大的前景。27 Abstract27 基于安卓的学习资源推送系统的设计与实现1.2研究意义三网融合已经成为大势所趋,也是我国重点推进的国家信息化战略。在三网融合发展的过程中,电脑和移动终端早已经与互联网对接并实现了网络化。今年来,智能手机终端的普及直接推动了移动互联网和Web2.0的发展,虽然只是被动使用网络和应用的变化,但是对推动互联网的发展却起到了及其关键的作用。然而,相对于层出不穷的各种游戏应用。很多书籍,学习软件的优化普及程度却偏低。基于这种情况,开发贴近生活且实用的学习资源推送智能手机应用软件可以便捷的进行日常学习和工作。学生在学习时遇到的一个头疼的问题就是不能很好地从老师和其他同学那里获得第一手的学习资源,基于这些想到了通过这款基于Android系统的学习资源推送系统完善学校的网上课程系统,来使得同学们和老师获得一个更方便的资源共享和获得第一手信息,方便大家集思广益,有利于促进我们的学习效率。1.3研究内容随着科技的日渐发达,电子设备越来越高的科技含量,电子设备也越来越精巧,手机等移动设备将成为人们的主要获取信息的渠道。在今天的手机群雄并起时代,谷歌在2008年推出了一款名为谷歌Android开源操作系统的智能手机,它采用Linux内核,开放手机联盟(OHA)成员可以任意使用和修改SDK包,系统的开源性使其具有良好的拓展性。这款软件包括了操作系统、用户界面和应用程序,即智能手机工作所需要的全部软件。Android的最大特点是其开放性体系架构,不仅具有非常好的开发、调试环境,而且还支持各种可扩展的用户体验,包括丰富的图形组件、多媒体支持功能以及强大的浏览器。本设计的实现主题是基于Android的学习资源推送系统软件的设计和实施。27 基于安卓的学习资源推送系统的设计与实现第2章系统设计2.1系统界面设计根据需求分析可以看出系统界面设计主要包含三个部分:客户端界面设计和服务端界面设计。其中客户端的界面设计总体结构和思路如图2-1和图2-2所示:登陆界面学习资源增加学习资源管理服务端账户管理图2-1服务端界面结构设计图2-2服务端总体效果图由于服务端只做简单的学习资源管理因此上述图所展示的功能就能满足总体要求,下面是客户端的界面设计(图2-3):登陆界面学习资源列表学习资源刷新学习资源下载学习资源推送图2-3客户端总体结构设计客户端的学习资源效果图,客户端学习资源下载效果图,学习资源推送效果图(图2-4)。27 基于安卓的学习资源推送系统的设计与实现图2-4客户端总体效果图2.2总体功能设计从系统设计是一个把软件需求转换成用软件系统表示的过程。通过对目标系统的分析和研究,做出了软件工程课程网站的总体规划,这是全面开发系统的重要基础。在对软件工程课程网站全面分析调查的基础上,制定出软件工程课程网站的总体规划。系统设计包括系统总体设计、系统详细设计、系统数据库设计、系统开发工具、开发技术和开发模式等。从功能需求上分析可以看出,整个应用程序应划分为3个部分,分别是Android客户端、JSP服务端和MySql数据库,各部分之间的关系如图2-5所示。图2-5系统设计图从模块结构图中不难看出,后台服务是整个应用程序的核心,主要是JSP服务端,负责根据请求做出响应,并从MySql数据库中获取对应的信息。JSP服务端运行在Tomat上面,跟Android客户端的交互基于HTTP,返回数据格式为JSON格式,在Android客户端程序运行前先启动,启动后的JSP服务将一直保持运行状态。JSP服务端封装了所有对数据库访问操作的方法,Android客户端会通过它来实现数据库的操作。在开发之初,总体的文件结构和运行功能初步构思如图2-6所示:27 基于安卓的学习资源推送系统的设计与实现学习资源推送登陆界面资源列表资源下载推送通知登录系统资源增加用户管理资源管理服务端数据库客户端图2-6总体功能结构2.2.1具体方案选择所谓的消息推送就是从服务器端向移动终端发送连接,传输一定的信息。比如一些新闻客户端,每隔一段时间收到一条或者多条通知,这就是从服务器端传来的推送消息;还比如常用的一些IM软件如微信、GTalk等,都具有服务器推送功能。推送方法如下:1)通过SMS进行服务器端和客户端的交流通信。在Android平台上,你可以通过拦截SMS消息并且解析消息内容来了解服务器的意图,可以实现完全的实时操作。但是问题是这个方案的成本相对比较高,且依赖于运营商。2)循环主动定时获取这种方法需要客户端来做一个定时或者周期性的访问服务器端接口,以获得最新的消息。轮询的频率太慢可能导致某些消息的延迟,太快则会大量消耗网络带宽和电池。3)持久连接这个方案可以解决由轮询带来的性能问题,但是还是会消耗手机的电池。我们需要开一个服务来保持和服务器端的持久连接(苹果就和谷歌的C2DM是这种机制)。但是对于Android系统,当系统可用资源较低,系统会强制关闭我们的服务或者是应用,这种情况下连接会强制中断。(Apple的推送服务之所以工作的很好,是因为每一台手机仅仅保持一个与服务器之间的连接,事实上C2DM也是这么工作的。即所有的推送服务都是经由一个代理服务器完成的,这种情况下只需要和一台服务器保持持久连接即可。C2DM=CloudtoDeviceMessaging)。从上面的描述中我们选择第二种可以基本满足我们软件的需求:本软件是一个Android客户端+JSPServlet服务端应用程序,启动Android上的应用程序后可以查看文章的信息,包括标题、图片、文章等。Android客户端上的文章信息数据是通过后台JSPServlet服务端应用程序获取的,这个后台服务可以根据客户端发出的请求,返回文章信息。文章信息,包括图片和文字,这些信息都保存在数据库中。27 基于安卓的学习资源推送系统的设计与实现27 基于安卓的学习资源推送系统的设计与实现第3章系统实现3.1系统软硬件环境配置Android应用程序是用java语言写的,通过aapt工具把应用程序所需要的任何数据资源文件打包成apk文件,这个文件是一个将应用安装到手机上的一个载体。有很多方式,每个android应用程序存在于不同的世界;第一,默认的,每个应用在他自己的Linux进程中运行,当应用中的任何代码需要执行时android就启动相应的进程,当不需要执行时并且系统资源被其他应用请求时android就关闭相应的进程。第二,每个进程都有他自己的虚拟机对象(VM),所以应用程序代码与其他的应用运行是彼此隔离的。第三,默认的,每个应用被分配一个唯一的LinuxuserID,都被设置权限以便应用程序的文件只对用户可见或者只对应用自己可见。安排两个应用程序共享一个userID是可能的,这种情况下他们彼此之间是可以看见对方的文件的,为了保护系统资源,拥有相同ID的应用也能被安排运行在一个相同的Linux进程中,共享。3.1.1Android开发环境介绍Android的上层应用程序是用Java语言开发,同时还需要基于Dalvik虚拟机,所以,Google公司推荐使用主流的Java继承开发环境Eclipse。只有Eclipse还不够,因为是使用Java语言进行开发,还应该有由SUN公司提供的JavaSDK(其中包括JRE:JavaRuntimeEnvironment)。此外,Android的应用程序开发和Java开发有较大区别的,所以还需要有Google提供的AndroidSDK。同时,还需要在Eclipse安装ADT,为Android开发提供开发工具的升级或者变更,是Eclipse下开发工具的升级下载的工具。简言之,需要以下软件,才能搭建Android开发环境,从而进行Android应用程序的开发。(1)JavaSDK(2)Eclipse(3)AndroidSDK(4)ADT3.1.2Android开发平台搭建第一,首先到http://www.eclipse.org/downloads/下载Eclipse集成开发环境并且解压,这里推荐下载JavaEE集成版本,可以为平台的搭建省下不少工作。接着再去http://java.sun.com/javase/downloads/index.jsp站点下载SDK后安装,下载http://dl.google.com/android/android-sdk-windows-1.5_r1.zip,AndroidSDK1.5后解压。第一步下载工序就结束了。第二,双击Eclipse解压后目录中的eclipse.exe然后启动,选择Eclipse菜单中的Help->InstallNewSoftware->选项卡上的AvailableSoftware,点击右侧的“Add”输入http://dl-ssl.google.com/android/eclipse/后确定,然后在“Workwith”下拉菜单中选择刚才输入的网址。过一会就会出现一个DeveloperTools选项,勾上以后点击Next以后Eclipse会自动网上查找Android开发工具插件,然后找到AndroidDDMS和AndroidDevelopmentTools,选中这两个点击Finish,Eclipse就会自动下载并安装Android插件了,最后会提示重启Eclipse。第三,重启后选择Eclipse菜单中的Windows->Preferences在左侧的Android项目中SDK27 基于安卓的学习资源推送系统的设计与实现Location中填入AndroidSDK解压后的目录,然后点击Apply。第四,在WindowsXP的系统变量中的path变量中添加一个值,该值指向解压后的AndroidSDK目录下的tools文件夹。3.1.3Android系统架构研究在AndroidSDK中,定义了让开发者使用与核心应用程序相同API的权限应用程序框架是为了要简化组件的重新利用而设计的,应用程序可以发布功能为其它应用程序所使用。但是,这要受限于应用程序架构的安全机制,使用者以用同样的机制来新增、置换组件。目前所有的应用程序是由服务及系统来组成,包含有:(l)一套强大和可扩展的视图系统:用来建构一个应用程序的基本组件,包了在开发系统画面时,常用的列表、网格、文本框、按钮等控制项,甚至是内嵌的Web浏览器。(2)内容提供者:使应用程序可以访问另一个应用程序的数据(如联系人数库),或者共享它们自己的数据。(3)资源管理器:提供各种非程序代码的资源让应用程序去使用。例如:本字符串、图形文件或排版相关的布局文件。(4)通知管理器:提供应用程序在状态栏中显示应用程序自定义的提示信息。(5)活动管理器:管理所有应用程序的生命周期及提供常用的导航回退功能。例如:启动应用程序要用到的资源准备及关闭应用程序时释放内存及相关资源等工作。(6)视窗管理器:用来管理所有启动程序的视窗。(7)位置管理器:用来管理地图服务的相关功能。(8)电话管理器:用来管理用户拨打与接听电话的相关功能。(9)包管理器:管理所有安装在Android系统内的包。3.1.4类库在Android中包含一些C/C++的类库,这些类库能被Android系统中不同的组件来使用。开发者可以通过应用程序框架使用这些功能。部分核心类库列表如下:(1)surfaceManager:主要的功能是让开发者可以去存取/显示系统及管理的功能,在[显示]与[存取操作]间的对应、互动以及实现无接缝的2D/3D多应用程序之间的整合。例如:在2D、2D显示上的合成、叠合动作。(2)3Dlibraries:主要是依openGLES1.0规范所定义的3D绘图引擎。该库使用硬件加速(当硬件可用时),可以将硬件的3D功能做最佳化的处理显示。(3)SGL:主要是处理有关显示2D方面的绘图引擎。(4)MediaFramework:主要是以packetVideo公司的OpenCORE为基础所发展的多媒体类库,该库支持回放和录制大量流行的音视频格式和静态图片。例如:MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF等格式。(5)FreeType:主要是用来显示点阵图和处理向量字形的。3.1.5Tomcat服务器Tomcat是一个免费的开源的Servlet容器。与传统的桌面应用程序不同,Tomcat中的应用程序是一个WAR(Web27 基于安卓的学习资源推送系统的设计与实现Archive)文件。WAR是Sun提出的一种Web应用程序格式,与JAR类似,也是许多文件的一个压缩包。这个包中的文件按一定目录结构来组织:通常其根目录下包含有Html和Jsp文件或者包含这两种文件的目录,另外还会有一个WEB-INF目录,这个目录很重要。通常在WEB-INF目录下有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,而classes目录下则包含编译好的Servlet类和Jsp或Servlet所依赖的其它类(如JavaBean)。通常这些所依赖的类也可以打包成JAR放到WEB-INF下的lib目录下,当然也可以放到系统的CLASSPATH中,但那样移植和管理起来不方便。Tomcat不仅仅是一个Servlet容器,它也具有传统的Web服务器的功能:处理Html页面。但是与Apache相比,它的处理静态Html的能力就不如Apache。我们可以将Tomcat和Apache集成到一块,让Apache处理静态Html,而Tomcat处理Jsp和Servlet。这种集成只需要修改一下Apache和Tomcat的配置文件即可。基于Tomcat的开发其实主要是Jsp和Servlet的开发,开发Jsp和Servlet非常简单,可以用普通的文本编辑器或者IDE,然后将其打包成WAR即可。3.2客户端各功能模块实现客户端的主要功能可以参照以下流程图(图3-1):登陆客户端主界面动画学习资源列表结束服务器新增刷新发出请求下载成功学习资源下载成功?下载过?已存在?图3-1客户端主体流程图从以上流程图可以看出客户端的功能主要在学习资源列表,和详细信息查看以及下载资源上面。登陆成功之后会显示“学习资源”的主界面动画效果,否则会提示错误并返回重新登陆。然后点击出现学习资源列表页,在此之前客户端会向服务器发送请求,服务端从数据库中调出学习资源信息,并将列表信息返回给客户端。此时若有新的学习资源更新27 基于安卓的学习资源推送系统的设计与实现服务端会自动检测在学习资源列表是否已存在,该资源若在两分钟之内客户端刷新学习资源列表则直接返回新资源信息,若两分钟之后仍未刷新则会推送出有新学习资源的推送消息到客户端。学习资源下载则有三种情况若未曾下载过该文件则会提示已下载并返回学习资源细览界面,若未下载过,一般情况下会下载,并提示下载成功,并不排除未下载而提示错误,这种情况极少出现,在此不予赘述。客户端各个模块的效果及核心代码如下:3.2.1启动模块在工程名b_tuisong上点右键,然后选择“RunAs”,然后选择“AndroidApplication”。Android虚拟机启动后app应用。登陆界面如图3-2所示:图3-2启动模块单一的图片很容易使用户产生视觉疲劳,所以使用动画效果可以很好的弥补这一缺点,再安卓中,提供了两种方法来实现动画效果。一种是Tween,该方法通过实现控件的放大缩小以及透明度的变化来产生动画效果。另一种为Frame动画,该方法是通过播放连续的图片来产生动画效果。我采用的是第二种方法。登陆界面的学习资源弹出动画实现代码如下:protectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);//弹出动画效果显示3.2.2学习资源列表模块点击学习资源,进入学习资源列表模块,该模块的主要功能是实现学习资源列表显示,每次进入客户端都会向服务器发出请求,服务器从数据库获取实时信息更新学习资源列表,其效果图如图3-3所示:27 基于安卓的学习资源推送系统的设计与实现图3-3学习资源列表其核心实现代码如下:@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);type=(String)getIntent().getExtras().get("type");setContentView(R.layout.foods_list);//加载数据以上代码是用来加载服务端发表的各项学习资源数据,这里加载的数据只显示一个简表,具体的资源信息需点击条目后进入查看详细描述。protectedvoidonListItemClick(ListViewl,Viewv,intposition,longid){super.onListItemClick(l,v,position,id);Intentintent=newIntent(NewsList.this,NewsInfoActivity.class);intent.putExtra("food",list.get(position));startActivity(intent);}//点击每一行时跳转到NewsInfoActivity实现点击每一行时跳转到NewsInfoActivity即学习资源细览界面,在细览界面中有对该条资源的详细描述,若发表的是txt文本文档则直接显示内容全文,可用来发送各类通知等。3.2.3学习资源细览模块点击学习资源列表其中的一条,进入学习资源细览模块,显示他的详细信息,如图3-4所示:27 基于安卓的学习资源推送系统的设计与实现图3-4学习资源细览核心实现代码如下:TextViewtv_description=(TextView)this.findViewById(R.id.description);tv_description.setText(Html.fromHtml(news.description));ButtondownloadBtn=(Button)this.findViewById(R.id.download_btn);downloadBtn.setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewv){Stringurl=Constants.WEB_APP_URL+"upload/"+news.getPic();HttpDownloaderdownloader=newHttpDownloader();以上是学习资源细览界面实现具体方法。客户端下载服务端数据时先向服务器发出请求服务器返回消息判断各种情况各种情况处理如下:intresult=downloader.downFile(url,"book/",news.getPic());if(result==1){Toast.makeText(NewsInfoActivity.this,"文件已存在",Toast.LENGTH_SHORT).show();}elseif(result==0){Toast.makeText(NewsInfoActivity.this,"文件下载成功,请在/sdcard/book/下查看",Toast.LENGTH_SHORT).show();}else{Toast.makeText(NewsInfoActivity.this,"文件出错",Toast.LENGTH_SHORT).show();}}});//文件下载的判断与提示弹出3.2.4推送消息通知在jsp服务端添加新的学习资源,Android客户端会自动检测到信息,并显示在界面通知中,自动检测并实现推送设置心跳时间两分钟,其效果图如图3-5和3-6所示:27 基于安卓的学习资源推送系统的设计与实现图3-5添加学习资源视图图3-6客户端推送消息提醒视图其中核心代码实现如下:if(list.size()>0){name=(NotificationManager)context.getSystemService(context.NOTIFICATION_SERVICE);Newsobject=list.get(0);/*createIntent,调用AlarmAlert.class*/Intentintent2=newIntent(context,NewsInfoActivity.class);intent2.putExtra("food2",object);Notificationnotification=newNotification(R.drawable.ic_launcher,"有新的学习资源",System.currentTimeMillis());//闹铃提示和学习资源推送提醒后面的参数分别是显示在顶部通知栏的小图标,小图标旁的文字(短暂显示,自动消失)系统当前时间,有新的学习资源时可以出发闹钟或者震动来提示使用者。notification.defaults=Notification.DEFAULT_ALL;notification.flags=notification.FLAG_AUTO_CANCEL;这是设置通知是否同时播放声音或振动,声音为Notification.DEFAULT_SOUND振动为Notification.DEFAULT_VIBRATE;Light为Notification.DEFAULT_LIGHTS,在我的Milestone上好像没什么反应全部为Notification.DEFAULT_ALL27 基于安卓的学习资源推送系统的设计与实现如果是振动或者全部,必须在AndroidManifest.xml加入振动权限PendingIntentpt=PendingIntent.getActivity(context,0,intent2,PendingIntent.FLAG_UPDATE_CURRENT);点击通知后的动作,这里是转回main这个Acticitynotification.setLatestEventInfo(context,object.getName(),object.getDescription().substring(0,20),pt);nm.notify(notification_id,notification);}//点击通知后回到该学习资源细览其主要流程图如下:结束服务端提示客户端客户端刷新服务端推送过?图3-7推送消息流程图上图主要反映了客户端从服务器获取消息的流程,一种是在客户端执行刷新操作,直接发送向服务器请求,服务器处理并刷新学习资源列表。第二种是到了心跳时间客户端仍未执行刷新操作时,服务器发送提示消息,并推送最新资源。3.2.5推送消息客户端模块点击通知中推送到的学习资源信息其中一条通知,自动跳转到显示他的详细信息,点击下载按钮,下载到本地的sdcard上,可以用手机的软件,打开并观看。如图3-8所示:27 基于安卓的学习资源推送系统的设计与实现图3-8学习资源下载视图根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文本当中的内容。从功能要求不难发现要从以下四步实现这一功能1.创建一个URL对象2.通过URL对象,创建一个HttpURLConnection对象3.得到InputStream4.从InputStream当中读取数据其中主要代码实现如下:publicStringdownload(StringurlStr){StringBuffersb=newStringBuffer();Stringline=null;BufferedReaderbuffer=null;try{url=newURL(urlStr);HttpURLConnectionurlConn=(HttpURLConnection)url.openConnection();buffer=newBufferedReader(newInputStreamReader(urlConn.getInputStream()));while((line=buffer.readLine())!=null){sb.append(line);}}catch(Exceptione){e.printStackTrace();}finally{try{buffer.close();}catch(IOExceptione){e.printStackTrace();}27 基于安卓的学习资源推送系统的设计与实现}returnsb.toString();}以下是对下载过程运行结果的处理当运行结果为-1表示文件下载出错,当运行结果为0表示文件下载成功,当运行结果为1表示文件已经存在。出错和存在这些情况出现会弹出提示并不执行下载过程。下载好的文件会存储到手机客户端的指定位置,并可以随时查看,当下载的文件是非txt文本文档时,必须客户端中具备专门打开这种文件的软件才能实现查看。try{FileUtilsfileUtils=newFileUtils();if(fileUtils.isFileExist(path+fileName)){return1;}else{inputStream=getInputStreamFromURL(urlStr);FileresultFile=fileUtils.write2SDFromInput(path,fileName,inputStream);if(resultFile==null){return-1;}}}catch(Exceptione){e.printStackTrace();return-1;}finally{try{if(inputStream!=null)inputStream.close();}catch(IOExceptione){e.printStackTrace();}}return0;}}//文件下载判断以下是其主要流程图:27 基于安卓的学习资源推送系统的设计与实现下载请求提示已下载并结束服务端判断执行下载并提示图3-9客户端资源下载流程图以上图表反映了在客户端执行下载命令时,系统服务端做出的两种反映。对于下载出错这种情况有可能涉及到服务端的运行错误或其他原因,一般来说不会出现该情况,在此不多叙述。3.3服务端各功能模块实现由于时间有限,在客户端开发过程中我只能尽量的简易,满足基本的台管理功能,本推送系统着重点是服务端的各项功能与推送的实现方法,相信在不久的将来能有人把学校的网络课程系列变成程序的服务端,这样一来就能更方便的为大家服务。服务端的模块开发主旨是功能实用性,该模块主要包括学习资源管理和服务端密码管理模块。该模块实现的主要功能是发布和管理学习资源,以及为推送提供一个客户端。3.3.1学习资源管理模块学习资源管理模块主要分为学习资源新增与删除模块。学习资源增删操作主要实现如下:登陆以后显示有两个板块分别是学习资源新增与学习资源管理。学习资源管理点击以后会有删除学习资源选项主要是通过sql语句获取数据库中的学习资源信息然后执行删除命令。学习资源新增点击以后出现新增页面,该页面包括类别,标题,文件,和描述四个版块,通过标题和描述就能实现txt文本文档的增加,而其他文件可以通过文件版块来上传,在客户端能够看到添加的文件描述。输入好之后点击提交即可。不输入或输入有误会显示错误信息。提交成功之后会通过Tomcat服务器自动推送到客户端并通过sql语句更新数据库。可以在客户端实现下载等操作。推送到客户端会有延迟现象,导致延迟的主要原因是我们采用的推送方式是轮询式,设置的心跳时间为两分钟。若不行等待可以点击menue菜单直接刷新可以看到,其原理同上,只是省去了两分钟的等待心跳时间。学习资源模块实现的主要流程图如图3-1027 基于安卓的学习资源推送系统的设计与实现图3-10学习资源管理模块流程图3.4数据提供数据提供者,是在应用程序间调用数据的一种接口机制。应用程序在不同的进程中运行,因此,数据和文件在不同的应用程序之间是不能够直接进行访问的。而AppContext为程序员提供了较高级的数据共享方法,应用程序可以指定需要共享的数据,而其他应用程序则可以在不知数据来源、路径的情况下,对共享数据进行查询、添加、删除和更新等操作。系统的服务端正是通过这种方式来实现对数据库中的学习资源以及相关信息进行相关的操作。学校的网络课程网站也正是由于api无法开放,无法获得基本的学生教师信息所以在思考良久之后选择了自己做一个客户端,并作出共享接口,这样一来就能顺利获得服务端的各项数据从而通过客户端能向服务端发送请求来获得mysql数据库的各类信息。本系统的数据提供主要来源于基于mysql的数据库,系统客户端通过向服务端发送请求,服务端接受来箱子客户端的请求,并向相应数据库发送sql语句,调出相应的数据库,并将相应数据库消息反馈给客户端,来自客户端的请求可以是手动的刷新触发或者自动触发,自动触发有一定的时间间隔。主要通过java来编写应用程序并通过jdbc来实现向各种关系数据库发送SQL语句,只需用JDBCAPI写一个程序就够了,它可向相应数据库发送SQL语句。而且,使用Java编程语言编写的应用程序,就无须去忧虑要为不同的平台编写不同的应用程序。将Java和JDBC结合起来将使程序员只须写一遍程序就可让它在任何平台上运行。这就很好的解决了在不同平台上软件的兼容性问题。27 基于安卓的学习资源推送系统的设计与实现在系统中程序端与数据库并无直接联系,而只是是发送请求,真正从数据库调出信息,增加和删除信息都是服务端通过接口机制来访问操作数据库。3.5后台服务后台服务是b_tuisong工程的核心模块,在用户启动后响应界面的网络操作,在后台运行,直到用户停止操作。后台服务主要有二个功能,一是从JSPServlet服务端获取数据,二是将从网络获取的数据封装成Activity需要的数据格式。3.6推送机制以及分析前面有谈到关于推送机制的问题,本系统采用的是轮询式的推送方式,Android客户端上的文章信息数据是通过后台JSPServlet服务端应用程序获取的,这个后台服务可以根据客户端发出的请求,返回文章信息。通过安卓客户端间歇性的向服务器发送请求,来获得服务器的推送消息。此系统中采用的方案是利用http协议来实现轮询式推送。设置的心跳时间是两分钟,服务端更新资源以后,客户端若在两分钟之内没有刷新(刷新则服务器会判断该消息已经推送过并不再次推送),则客户端自动向服务器发送http请求查询消息,此时服务端发送推送消息给客户端。27 基于安卓的学习资源推送系统的设计与实现27 基于安卓的学习资源推送系统的设计与实现第4章结论与展望4.1结论在这次软件开发的过程当中,是我从理论开发到实际操作迈出的第一步。从一个完全不懂的安卓系统的门外汉,到第一次自己开发出属于自己的系统,虽然还有很多瑕疵和不完美,但还是相当开心,在此过程中,我对与安卓系统以及其配置环境等有了一定的了解,对于几种方式的推送也有了基本的概念,清楚了他们的推送机制,以及初步了解各自的优劣性经过了长时间的努力与指导老师的辛勤教导和许多热心同学的帮助,初步实现了基于http协议的推送系统,同时在开发过程中遇到的种种问题也使我充分认识到了软件开发人员在开发所需要注意的问题,比如严谨、认真、精益求精。还需要有坚韧不拔性格,面对困难的时候能静下心来解决,不急不躁。最后,我会向着一个合格的软件开发人员去努力。4.2不足之处及未来展望这个软件目前运行良好,但是我认为在整个工程的构思方面有不足,用户操作界面还不够灵活,这些问题还需经过思考认真解决。比如一开始接触安卓系统的时候由于没有基础感到很难搞懂,在热心的同学与老师的帮助之下,慢慢的熟悉了,在推送系统开发过程中也遇到了很多问题诸如运用哪种方式进行推送和如何进行推送。在查阅了各种资料,比较了各种推送方式之后选择了以我目前水平最适合的基于http的轮询式推送方法,但后来发现在实现过程之中有时候会出现系统崩溃的现象,尽管只是偶尔会出现但还是会影响系统的稳定性,上网查询之后发现其实基于xmpp协议的推送系统较为稳定,但是以我目前的水平只能做到如此了。与此同时,这个软件还要进一步的完善,例如加入学生和教师的数据库等,使功能更加强大,带给学生和老师更多的方便。而且目前实现的仅仅是单机版本,期待在不久的将来能有更强大的技术员来将此应用于学校的网络课程网站上,这样能真正地给学生和老师们带来极大的方便。27 基于安卓的学习资源推送系统的设计与实现27 参考文献参考文献[1]朱立编.一种基于Android系统的嵌入式数据库同步方案[J].价值工程,2011,30(16)[2]吴想想编.基于Android平台软件开发方法的研究与应用[J].北京邮电大学,2011年09期[3]徐尤华,熊传玉编.Android应用的反编译[J].电脑与信息技术,2012,20(1) [4]常芬芬,张倩著.Android的知识产权纠纷[J].世界电信,2011年9期[5]E2Ecloud工作室编著.深入浅出GoogleAndroid[M].北京:人民邮电出版社,2009.8[6]李艳丽编.Android事件处理过程剖析[J].长春理工大学学报(自然科学版),2010年03期[7]曾健平,邵艳洁编.Android系统架构及应用程序开发研究[J].微计算机信息,2011年09期[8]高兰兰编.基于Android平台的多分辨率解决方案[J].软件,2011-09-15[9]隆志坚编.Android平台基于GoogleMapApi的导航应用技术研究和实现[J].办公自动化,2011-08-15[10]赵亮,张维编.基于Android技术的界面设计与研究[J].电脑知识与技术,2009-10-15[11]朱婷婷,李惠编.基于Android的应用软件的综述[J].电脑与通信,2011,(1)[12]赵宏伟编.AndroidNDK开发环境实现与应用[J].电脑知识与技术,2010-12-15[13]白文江编.基于Android平台的移动应用开发研究[J].太原大学学报,2011年03期[14]刘枫编.Android智能手机天气预报系统设计及实现[J].计算机时代,2011年04期[15]刘鎏编.Android的架构与应用开发分析[J].计算机光盘软件与应用,2011,(14)[16]徐尤华,熊传玉编.Android移动开发优化策略[J].计算机时代,2011年12期[17]WilliamEnck.MachigarOngtangandPatrickMcdaniel,UnderstandingAndroidSecurity[J].Security&Privacy,IEEE.2009,7[18]MeierR,ProfessionalAndroidApplication[J].JohnWiley&Sons,2008[19]JoshuaBloch.ThinkinginJava[M].UpperSaddleRiver,NewJersey,USA,200027 致谢27 致谢致谢本课题的设计和论文撰写过程中,我的指导老师严大虎给予了极大的帮助,为我提供了大量的相关资料。在完成课题设计的过程中,老师在总体设计思想上给予了许多重要的实际指导,拓展了我的思路,使得我得以完成了任务。在此,我对老师的指导表示衷心的感谢。同时,我也衷心的感谢大学四年来对我的精心栽培,良好的校园环境、精良的师资队伍、浓厚的校园文化都让我深深怀念,都为我进入社会提供了莫大的帮助。27 基于安卓的学习资源推送系统的设计与实现27'