android的温室远程监测系统

摘要:随着信息化社会的发展,Android智能产品已日益成为越来越多的人们选择的移动终端产品。伴随着Android智能手机与平板电脑在我们生活中的大量使用,越来越多的基于Android 开发平台的应用也随之出现。本文阐述了基于Android 的温室远程监测系统的设计与实现过程,对Android系统架构和应用开发进行了初步研究,用户主要实现的功能有登录注册、查看实时环境参数、语音播报、环境参数变化图像、参数统计等。本次毕业设计主要使用myeclipse以及ADT环境下进行开发,编程语言是Java语言,采用的数据库为MySQL,系统主要分为服务端和客户端两大部分,服务端主要用来存储以及获取数据,客户端主要用来显示数据,经过一系列设计最终实现一个界面友好、易操作、高效稳定的远程监测系统。关键字: Android ;远程监测 ;客户端 ;易操作The remote?monitoring system based on AndroidStudent majoring in computer science and technology XU Hao Tutor SHEN YiAbstract:With the development of information society,?Android intelligent?products have increasingly become the?mobile terminal products?more and more people?choose.?Along with?the extensive use of Android?intelligent?mobile phone?and tablet?computer?in our life,?more and more applications?based on Android platform?has emerged.This paper?elaborates the design and implementation of?remote monitoring?system of greenhouse?based on Android,?the Android system structure and application development?are s
 *好棒文|www.hbsrm.com +Q:  3_5_1_9_1_6_0_7_2 
tudied,?the main function of a?user?login,?view real-time?environment?parameters,?voice broadcast,?environmental parameters,?parameters of?image?statistics.The development?of this graduation?design mainly uses the MyEclipse?and?ADT environment,?the programming language?is the Java language,?using?the?MySQL?database,?server and client?system is mainly divided intotwo parts,?the server?is mainly used to?store and retrieve?data,?the client?is mainly used todisplay data,?through a series of?design and?the ultimate realization of a?friendly interface,easy to operate,?high efficiency and stability of the?remote monitoring system.第1章 引言1.1 课题背景智能手机和移动网络的发展使人与人之间随时随地都能自由的沟通交流,从最初的书信交流到现在的动几下手指,便利的同时也让沟通的方式越来越丰富有趣。Android智能手机是当前市场上的热门产品,充满活力的新产品。开放的Android系统给了用户和开发者更多的创新空间,随着Android的快速发展,如今已允许开发者使用多种编程语言来开发Android应用程序,而不是以前只能使用Java开发Android应用程序的单一局面,因而受到众多开发者的欢迎。因此,不管什么人都可能按照自己不同喜好将自己的手机系统上所有的功能进行重新编写。这也使得不断有越来越多的技术关注这个有潜力的操作系统。1.2国内外研究概况 世界各国的现代温室控制技术于20世纪60年代开始快速度发展并逐步完善,20世纪70年代,运用模拟式单元组合仪表采集现场信息并以相应的模拟式仪表进行指示、记录和控制。20世纪80年代,采用数字式单元组合仪表接收现场信息并以相应的数字式仪表进行显示、记录和控制。此后,随着计算机技术的发展,产生了计算机数据采集与控制系统。目前,世界各国的温室控制技术发展迅速,发达国家计算机智能化温室综合环境控制系统开始普及,一些国家在实现自动化的基础上向着完全自动化的方向发展。荷兰、以色列、日本、美国、英国、加拿大等国家是目前世界上设施农业最为发达的国家,其设施设备标准化程度和设施综合环境调控水平都处于世界领先水平。荷兰是世界著名的园艺强国,早在1974年就将计算机作为温室气候控制系统使用商品的核心部分出现在荷兰和世界市场上,并不断开发模拟控制软件,全国现有玻璃温室1万多公顷,全部由计算机操控。国内许多研究人员在农业监控方面做了许多研究,以提高农业生产的自动化、信息化水平。国家农业信息化工程技术研究中心研究的温室娃娃是一种环境监测仪器,他具有报警方式新颖、功能齐全、测量精度高、操作简单、价格低廉、实用性强等优势,受到了广大农民用户的青睐,可对温室、大棚、食用菌栽培室的空气温度、空气湿度、露点温度、土壤温度、光照强度、土壤湿度、选配等重要的环境参数进行实时监测。同时可根据用户设置的适宜条件判断当前环境因素是否符合用户所种植作物的当前生长阶段,并通过语音方式把所测环境参数值、管理作物方法及仪器本身的工作情况等信息通知用户。从以上表明,近年来国内外温室监测技术都得到了不同程度的发展,温室环境的发展也得到了较多国家的重视,技术的不断推陈出新,温室环境监测技术也趋于高智能化发展。另外,网络数据库应用技术是目前进行信息管理的有效技术,它借助互联网的硬件资源以及软件资源,提供了一种开放式的信息加工处理方法,为人们提供了一种及时的、快捷的信息管理技术,因此网络数据库的应用越来越普遍。本设计正是建立在网络数据库的基础上的,温室远程监测系统与数据库相结合,将温室环境监测终端平台搬至Android智能手机,提供更加便捷和经济的温室远程监测系统。1.3选题意义随着农业科学技术的发展与种植结构的调整,设施化农业得到了前所未有的发展,温室作为设施化农业的典型代表,突破了传统农业模式,避免了农作物种植受地域、自然环境、气候等诸因素的限制,从而成为一种新的农作物种植技术,对农业的发展具有重要意义。近些年来,智能温室的研究已经成为我国科学技术人员的一个重要课题,而智能温室的核心是能时刻对温室环境进行监测,譬如温度、湿度、土壤温度、土壤水分、光照强度、CO2浓度等,并采取相应的控制措施来保证温室环境均处在作物生长最适合的环境里。温室工程是以综合国力的强盛为背景,以农用工业的发展为基础,以生物技术、工程技术、信息技术的发展为依托的高新技术产业。自20世纪70年代以来,我国温室生产己经有了很大的进步,但这些温室是在充分利用高产栽培技术和屏障技术的基础上发展起来的,其收入很难再有大的提高。要改变这种状况,将计算机科学技术等引入农业温室,实现对温室的环境监测,是最有效的途径之一。随着计算机技术和无线通信技术的蓬勃发展,温室也朝着智能化的方向发展,将先进的科学技术运用于温室的监测与管理,成为现代农业发展的助推器,手机作为人们普遍使用的一种移动设备,在人类生活中行使着越来越多的功能,此次课题旨在设计一个可以直接与温室信息网络数据库连接的手机软件,将Android手机作为温室监控的终端平台,实现对温室环境的远程访问和监测。1.4研究目标本文主要研究了如何开发一个基于Android 的温室远程监测系统,分为服务端和客户端,用户的功能有登陆注册、实时环境参数查看、语音播报、参数时间段内变化图像、统计环境参数等。本系统主要采用Myeclipse以及ADT环境下进行开发,编程语言采用面向对象的编程语言JAVA编程语言来进行编程,同时把平台所有的数据信息保存到MySQL数据库系统中。第2章 相关的理论和技术2.1 JAVA技术介绍Java语言是一种计算机编程语言,主要特性包括,跨平台,基于java虚拟机,可以做到一处编译,处处运行,同时还是面向对象的语言,面向对象的语言可以对事物进行很好的抽象和管理,一个对象拥有自己的属性,方法。可以自行管理自身的一切,这是区别于结构化的语言的优势,在web移动设备中广泛的使用。Java语言首先将源代码编译成字节码,然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编写,到处运行”的跨平台特性。Java 编程语言的风格十分接近C、C++语言。Java是一个纯的面向对象的程序设计语言,它拥有 C++ 语言面向对象技术的核心点,Java舍弃了C ++语言中容易引起错误的指针、符号重载、多个同时继承而是采用多接口实现的方式,增加了独有的垃圾回收机制,用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java SE 1.5 版本中,Java 又引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。但在 J2SE 1.4.2 发布后,Java 的执行速度有了大幅提升。与传统程序不同,Sun 公司在推出 Java 之际就将其作为一种开放的技术。全球数以万计的 Java 开发公司被要求所设计的 Java 软件必须相互兼容。“Java 语言靠群体的力量而非公司的力量”是 Sun 公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。Sun 公司对 Java 编程语言的解释是:Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。  Java 平台是基于 Java 语言的平台。这样的平台非常流行,因此微软公司推出了与之竞争的.NET平台以及模仿 Java 的?C#语言。Java的设计目的主要在两个方面,一是安全性,另外一个是可靠性。2.2 TomcatTomcat服务器是一个开源的web应用程序,意味着他的代码同样也是开源的。你可以学习tomcat中所使用到的技术。它是一个轻量级的web应用服务器。一般的使用场合是中小型的web系统。Tomcat服务器易于使用,容易上手,只需要通过简单的配置就能够进行开发使用。简单来说tomcat是一个轻量级的web容器。举个例子,如果我们想部署一个名叫MyWebApp.war的应用,该应用使用realm作为访问控制方式,我们可以使用下面这个片断:这种context片断提供了一种便利的方法来部署web应用,不需要编辑server.xml,除非想改变缺省的部署特性,安装一个新的web应用时不需要重启动Tomcat。2.3 EclipseEclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。虽然大多数用户很乐于将 Eclipse 当作 Java?集成开发环境(IDE)来使用,但 Eclipse 的目标却不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于?Java开发工具。尽管 Eclipse 是使用Java语言开发的,但它的用途并不限于 Java 语言;例如,支持诸如C/C++、COBOL、PHP、Android等编程语言的插件已经可用,或预计将会推出。Eclipse 框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。基于 Eclipse 的应用程序的一个突出例子是 IBM Rational Software Architect,它构成了?IBM?Java 开发工具系列的基础。Eclipse是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。它主要由Eclipse 项目、Eclipse 工具项目、Eclipse技术项目三个项目组成,具体包括四个部分组成——Eclipse Platform、JDT、CDT和PDE。JDT支持Java开发、CDT支持C开发、PDE用来支持插件开发,Eclipse Platform则是一个开放的可扩展IDE,提供了一个通用的开发平台。它提供建造块和构造并运行集成软件开发工具的基础。Eclipse Platform允许工具建造者独立开发与他人工具无缝集成的工具从而无须分辨一个工具功能在哪里结束,而另一个工具功能在哪里开始。2.4 mysql服务器Mysql是一个轻量级的关系型数据库管理系统。它能够关联数据库,将数据保存在不同的表中。这样分类处理,使得数据的存储和检索速度得到了大大的提高。支持sql语句,mysql分为商业版和免费版,免费版本同样功能强大,体积小,速度快。而且开放源码,这意味着你可以根据你的需要进行源代码的修改。Mysql可以配合tomcat服务器搭建出一个强大的web系统。Mysql主要的应用场景是中小型的软件系统存储。支持数据的并发存储。使用c语言和c++语言编写,使用多种编译器进行测试,保证了系统的可移植性。同时它支持多线程操作,能够充分利用系统的cpu。Mysql中的sql查询语句得到了优化,使得查询的速度大大的提高。Mysql数据库支持多种语言的编码,常见的有GB2312,BiG5等。2.5 Android基本框架介绍Android平台的基本框架。(1)ApplicationsApplication Android会同一个主要的应用程序开发包一并发布出来,这个app程序包包含了一下内容email客户端,SMS,日历功能,地图的查找,浏览器的查看,联系人进行管理等。这些的app程序必须要用JAVA编写的。(2)Application FrameWork开发者完全可以去查看只要的应用程序所用到的API framework。该application framework用来简化很多组件的软件起到重用的效果;任何一个application 都可以去发布它的相应功能块,而且任何other的application 都可以去使用其它发布的很多功能块。该application 重用的机制使得很多组建可以被user替换。所有的application都由很多的服务功能和系统里起到的功能所组成,包括:Views可以用来建application ,包括lists,网格(grids),文本框(text boxes),按钮(buttons),甚至包括一个可以内嵌到手机里的web浏览器Content Providers使得application 可以去访问另一个人的application 的数据(如联系人数据库),或者共享它们自己的数据。资源管理器可以去提供很多非代码的资源查看,如localhost string的访问,图形,和分层文件(layout files)。Notification 使得application可以在状态栏中显示客户通知信息。活动类管理器(Activity Manager)用来管理application 的activity并提供很多常用的导航进行回退的功能。2.6 Android的工程(1)Android项目Android的四大基本组件:Activity(活动),Service(服务),BroadcastReceiver(广播),ContentProvider(内容提供者),各组件之间要进行切换需要一个意图或企图Intent类,通过启动StartIntent()方法来使各组件进行跳转Android的五大布局方式:LinearLayout(线性布局) FrameLayout(帧布局) TableLayout(表格布局) AbsoluteLayout(绝对布局) RelativeLayout(相对布局)五种布局方式可以相互嵌套,Android各种漂亮的界面都是通过嵌套布局而实现的。Android的线程,以及线程之间通信的中介:Handler类Android配置文件:AndroidManifest.Xml及res资源文件中各种属性布局方式引用的资源等。Android系统将插件ADT集成到了Eclipse工具上,因此,一个Android程序启动后,系统会启动一个模拟器(Emulator)(如下图),该模拟器是一款手机板的样式,拥有手机硬件的基本操作。我们也可以将右边的键盘通过代码属性设置将其隐藏,界面的大小可自由设定。 (2). Android工程程序结构(3) .AndroidManifest.xml文件 Android系统有一个编码的规定,支持的编码是"utf-8",当程序中出现乱码是,我们须将其编码格式转化为"utf-8".在 AndroidManifest.xml中会在第一行声明一句:。它是该系统支持的版本和编码。在第二行定义了我们需要使用的架构,该架构来自xmlns:Android=http://schemas.Android.com/apk/res/Android。xmlns(XML namespace)是一个命名空间,它就像一条河的源头一样能让我们找到系统架构,每一个配置文件必须有这个xmlns,否则程序中的所使用的所有资源将无法找到。在application元素我们定义Android:icon="@drawable/icon"这是系统确定的首先要启动的Activity是PlayRackActivity。在intent-filter选项中,有action和category等等属性,我们需要定义action的值为Android.intent.action.MAIN,category的值为Android.intent.category.LAUNCHER,它们是系统的值,程序在解析到这些常用后就可以确定首先要启动的Activity。当我们需要通过一个组件触发另一个组件时,我们将设定action和category的其它属性值,系统会根据我们设定的属性值去AndroidManifest.Xml的application 中寻找标识,任何一个Activity的action和category是唯一,所以程序在任何时候都能唯一启动一个Activity,这样,不同的Activity之间的跳转就实现了。在AndroidManifest.Xml中有一个根结点,它是我们需要定义的ADT版本,例如我们将其值设定为Android:minSdkVersion="10",则表示此Android工程所用的版本为2.3,Android还有1.1、1.5、1.6、2.0、2.1、2.2、2.3、3.0、4.0这几个版本。如果我们需要对网络进行访问,比如打开一个网页,刚我还需要设置一个网络访问权限uses-permission,将其的值设置为Android:name="Android.permission.INTERNET,我们就可以访问网络了。当然uses-permission还有很多其它的权限,例如GPS定位权限,浏览器数据存取权限com.Android.browser.permission.READ_HISTORY_BOOKMARKS等等。当程序的任何一个组件要用到时,都必须在AndroidManifest.Xml文件中声明。四大组件要使用前都需要声明,其声明方式如下:其中声明provider时还需要声明其授权 authorities。每个组件里面还有很多的属性,会根据程序的具体需要定义不同的属性。过滤器intent-filter 有两种启动方式来启动界面。显示方式显示方式是在代码中的直接启动组件,启动时会声明Intent,在它的构造方法Intent(组件1,组件2)中直接指定一个组件的名字,然后调用方法startIntent(intent)以启动指定的组件。 2)隐式方式隐式方式是通过过滤器来过滤完成的,启动的组件必须满足action和category的条件才能够启动该组件。这些属性是在AndroidManifest.Xml文件中声明的。两种启动方式都可以通过程序setAction(ACTION常量)和startActivity(intent)或配置文件两种方式来实现组件的跳转。2.7j2EE(1).J2EE是一套基于web的中间插件组建,主要的作用在于简化和规范web开发。从而提高了应用的可移植性,安全性。这里主要讲的javaservlet,它是运行在服务端的web组建。由于j2ee框架中封装了很多的琐碎的方法,从而使得在整个web服务端的开发中变的更容易,更快捷,更稳定。开发人员只需要专注于软件的业务设计,而无需处理底层的实现,这些都交给j2ee开发框架。其中优势包括以下几个部分:1>.保留现存的it资产2>.高效快捷的开发3>.稳定可重用第3章 系统需求分析3.1 可行性分析现今社会,随着设备的智能化,以及网络的普及,实事的通过网络进行数据的传输,人们可以足不出户就可以了解到另外一个环境的当前状态。当然一个功能强大的移动终端是必不可少的,当android手机操作系统面世之后,这一切都成为了可能。Android手机操作系统是一个基于linux内核的手机操作系统,经过数年的发展android的系统性能已经非常完善了,能够运行大型的手机端游戏,大型交互性软件,支持是平流显示等。所以实现本系统在这个层面上是现实的,可操作的。(1) 经济上的可行性Android是一个开源的移动设备操作系统,因为操作系统的开源,让低价格的智能手机变成一种可能。本系统是基于android的远程温度监控系统,客户端是用android操作系统,服务端是开源的tomcat服务器,数据存储部分是通过开源的mysql数据库,开发环境是基于android sdk的eclipse,这些都是开源的,因为这些系统或者工具都是开源组织所共享出来让大家使用的。这让开发成本进一步的缩减。所以从经济的角度看,实现这个系统是可行的。(2) 技术上的可行性整个系统从结构方面可以分为3个组成部分,移动客户端可通过andoid的sdk进行开发,服务端是通过开源的tomcat服务器进行开发,数据存储通过mysql数据库,实现数据的持续存储。因为这些技术已经是经过长时间的使用和磨合,这样的一个系统架构在技术层面完全可以实现。 (3) 操作上的可行性从上所述,系统的架构是基于成熟的现有的框架进行搭建,实现,所以在操作上显得非常的容易。综合以上三方面,该系统具有很高的开发可行性,无论是从技术上经济上还是操作上。故此,可以设计该系统流程图,建立数据字典。3.2 功能需求概述(1).注册登录功能:用户安装完系统后可以进行注册和登录,用户填写好用户名和密码点击注册就可以进行注册,登录:当用户注册完账户以后会在后台的数据库存储注册的账户,然后用户通过注册的账户进行登录。登录后即可以开启后台服务,自动从服务端持续获取数据。如果当前室内的一些参数属性超过了正常的范围,将会在手机通知栏推送消息。(2).图表显示:用户进入本系统后,在图表选项卡可以看到历史数据,通过点击下一页查看数据的变化,并且图表可以放大缩小,移动。在这个页面中图表下方还对应的显示平均值,最大值,最小值,以及标准差。通过点击不同按钮切换不同数据的最大值,最小值,平均值,方差。这样和可以很直观的了解到温度,适度,co2,光照值得变化,对室内的参数进行调整,可以最大程度的让室内环境的参数达到一个最佳的值。这样就能够使产量达到一个最大值,从而提高经济效益。(3).首页信息显示:当用户进入系统后自动的显示2组数据,一组数据是当前最新的温度值,第二组是当前所有的平均值,通过当前的数值 能够体现出当前环境最新的数据,及时反馈给用户,让用户能够及时的针对相应的数据进行相应的处理。平均数据是一个综合值,通过这个综合值得变化,可以了解到当室内产品发生一些异常情况可以通过这个平均值进行初步的判定,及时找出原因,从而避免不必要的损失。(4).TTS功能:针对一些较少使用智能手机的用户,具体不知如何操作,我们app提供了一套智能语音系统,当用户在首页点击自动语音播报,可以实时的语音播报当前的室内环境参数,使得不会用的用户也能够轻松掌握这个系统,提高用户的体验,降低了使用的难度。从而能够使使用这个系统的用户量变多。语音播报可以播报标准的普通话,在中国通用的语言是普通话,所以这套系统的适用人群可以说变的相当的广。这个tts功能是基于一套商业的sdk接口,稳定性要好,并且能够识别数字,字母。这个功能的播报要符合正常的使用语气,以及顺序,语速。(5).后台自动获取数据:手机后台能够自动的从服务端获取到当前最新的环境检测值,避免出现异常参数后,未发现,本系统还包括当环境参数异常时候,能够及时在手机上反映出来。通过在手机栏弹出异常消息,这样用户就能够及时的对室内的异常数据进行有效的处理,从而达到了实时可控的目的。3.3 UML用例图用户的功能包括:注册登录、获取当前信息、获取平均信息、获取所有信息。自动语音播报。用户的用例图如图3-1所示。图 3-1 用户用例图第4章 系统设计4.1功能模块设计根据对系统的功能进行分析我们总结签到系统的具体功能模块包括下面的几个主要的功能模块:系统的功能模块图:如图4-1所示:图4-1 系统功能模块图4.2 程序流程图设计程序流程图如图4-2所示: 图 4-2程序流程图4.2 数据库(E-R)图设计系统的实体关系的设计是建立在需求分析、系统分析的基础上的。用户表的实体图如图4-3所示,用户实体信息主要包括:用户名、密码。图 4-3用户信息的实体图当前信息表的实体图如图4-4所示,当前信息表实体主要包括的信息有:当前温度,当前适度,当前co2浓度,当前光照强度。图 4-4当前信息实体图第5章 系统实现本章主要对系统的主要功能模块进行详细的设计,利用软件工程所学的知识来解释系统中的几个比较重要的功能模块的实现过程,以及实现方法和实现过程等信息进行描述。5.1 主要功能模块的实现5.1.1 用户注册登录的实现在手机上安装此软件,安装成功之后,打开软件,点击第三个我的选项卡,在输入框中输入用户名和密码,点击注册,当注册成功后,在输入框中输入用户名和密码,登录成功则会显示登录成功,并且显示开启自动获取数据服务。用户的注册界面如图5-1所示:图 5-1 用户注册界面在进行登陆的时候,填写已经有的或者是新注册的账号,填写完用户名和密码,点击登陆按钮,然后和数据库中存在的账号和密码进行比较,如果输入的账号和密码和数据库中的账号和密码就提示登陆成功,并把登陆信息保存到数据库中进行保存供以后在操作程序的时候使用。如果是用户名或者是密码填写错误会提示填写错了,登陆不成功,即重新填写用户名和密码,填写完点击登录即进行登录,如没有提示填写错误即登陆成功。用户的登录成功后如图5-1所示:图 5-1 用户登录界面用户登录的关键代码如下:@Override public void onClick(View arg0) { String name = login_input_name.getText().toString().trim(); String password = login_input_password.getText().toString().trim(); Log.e("==>", "onclick"); switch(arg0.getId()) { case R.id.login_comfirm_button: final String url = UrlConstanst.BASE_URL+UrlConstanst.LOGIN_URL+"name="+name+"&"+"password="+password; new Thread(){ public void run() { String resultstr = WebUtils.getHttpPostResultForUrl(url); System.out.println(resultstr); Message msg = handler.obtainMessage(); msg.what = 0x001; msg.obj = resultstr; msg.sendToTarget(); }; }.start(); break; case R.id.register_link: final String regiurl = UrlConstanst.BASE_URL+UrlConstanst.REGISTER_URL+"name="+name+"&"+"password="+password; new Thread(){ public void run() { String resultstr = WebUtils.getHttpPostResultForUrl(regiurl); System.out.println(resultstr); Message msg = handler.obtainMessage(); msg.what = 0x002; msg.obj = resultstr; msg.sendToTarget(); }; }.start(); break; case R.id.btnStartServer: Intent intent = new Intent(); intent.setClass(AboutFragment.this, MessageServer.class); AboutFragment.this.startService(intent); break; } } Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { String ret = (String)msg.obj; if(msg.what == 0x001) { if(ret.equals("0")) { Toast.makeText(AboutFragment.this, "登陆成功", Toast.LENGTH_SHORT).show(); regist_scroller_relative.setVisibility(View.GONE); llMessage.setVisibility(View.VISIBLE); } else if(ret.equals("1")) { Toast.makeText(AboutFragment.this, "密码错误", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(AboutFragment.this, "用户名不存在", Toast.LENGTH_SHORT).show(); } } else { if(ret.equals("0")) { Toast.makeText(AboutFragment.this, "注册成功", Toast.LENGTH_SHORT).show(); } else if(ret.equals("1")) { Toast.makeText(AboutFragment.this, "注册失败", Toast.LENGTH_SHORT).show(); } } } };开启后台服务代码:class GetMessageThread extends Thread{ final String url = UrlConstanst.BASE_URL+UrlConstanst.GET_CUE_DATA_URL; @Override public void run() { while(true) { String resultstr = WebUtils.getHttpPostResultForUrl(url); Message msg = handler.obtainMessage(); msg.obj = resultstr; msg.sendToTarget(); try { Thread.sleep(1000*60*3); } catch (InterruptedException e) { e.printStackTrace(); } } } } /** * 通过广播的形式传到ui界面 */ Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { String data = (String)msg.obj; Intent intent = new Intent(); intent.putExtra("message", data); intent.setAction(MyApplication.BROCAST_ACTION); sendBroadcast(intent); IndoorParams fromJson = g.fromJson(data, IndoorParams.class); if(Double.parseDouble(fromJson.getTempleture())>10) { setMsgToNotification("温度过高"); } if(Double.parseDouble(fromJson.getLux())>10) { setMsgToNotification("光照太强"); } if(Double.parseDouble(fromJson.getCo())>10) { setMsgToNotification("二氧化碳浓度过高"); } } }; private RemoteViews contentView; private int id; public void setMsgToNotification(String msg) { NotificationManager m_NotificationManager = (NotificationManager) this .getSystemService(this.NOTIFICATION_SERVICE); Notification m_Notification = new Notification( R.drawable.ic_launcher, "您有新消息", System.currentTimeMillis()); contentView = new RemoteViews(getPackageName(), R.layout.notification); m_Notification.defaults = Notification.DEFAULT_ALL; String alert = ""; // LED灯闪烁 yjx m_Notification.defaults |= Notification.DEFAULT_LIGHTS; m_Notification.defaults |= Notification.DEFAULT_SOUND; m_Notification.flags = m_Notification.flags | Notification.FLAG_AUTO_CANCEL | Notification.FLAG_SHOW_LIGHTS; Intent m_Intent = new Intent(this, MainActivity.class); m_Intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); PendingIntent m_PendingIntent = PendingIntent.getActivity(this, 0, m_Intent, PendingIntent.FLAG_UPDATE_CURRENT); setConverView(msg); m_Notification.contentView = contentView; m_Notification.contentIntent = m_PendingIntent; m_NotificationManager.notify(id++, m_Notification);// id设为自增长,才不会有相同id的notification被覆盖 }5.1.2 获取当前数据,平均数据的实现进入系统后,在首页会显示当前的属性值,包括温度,适度,co2浓度,光照的强度。显示各个属性的平均值。 获取当前的平均值,当前最新的数值如图5-2所示:图 5-2 首页界面关键代码:因为语音播报已经封装成了一个接口,只需要调用少量的代码既可以实现相应的功能。@Override public void onClick(View view) { int id = view.getId(); final String speakTxt = "当前的温度是:" + currentTemp.getText().toString() + "当前的湿度是:" + tvCurShiDu.getText().toString() + "当前的二氧化碳是:" + tvCurrentCo.getText().toString() + "当前的光照是:" + tvCurrentLux.getText().toString(); if (id == R.id.btnStartTalk) { new Thread() { public void run() { IttSpeaker speak = new XFTTS(HomeFragment.this); speak.initTTS(); speak.beginTTS(speakTxt); } }.start(); } }5.1.3图表显示的实现登录进入系统,点击直观图选项卡,可以看到所有获取的数值,并且用折线图显示,这样就可以很直观的进行数据的显示和查看,点击通过时间段获取,可以获取到一段时间内的数据,这样就可以方便查看每个不同时间段的值。并且通过图表的方式显示。底下的属性切换按钮,可以通过点击不同的属性按钮获取到不同的属性的平均值,最大值,最小值,以及标准差。很方便很直观的显示数据。直观图界面如图5-3显示:图 5-3 直观图界面关键代码如下:Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { String json = (String) msg.obj; params = JsonToObj(json); intitData(); getPage(); viewHistogram = new DrawHistogram().execute(GraphFragment.this, xvalue, mExpenseValue, mIncomeValue, abundanceValue, luxValue); layoutHistogram.removeAllViews(); layoutHistogram.setBackgroundColor(Color.TRANSPARENT); layoutHistogram.addView(viewHistogram); } };5.1.4 更多界面的实现登录进入后台管理界面,在这个界面主要是一些额外的预留模块,能够后期进行一些相应的修改,例如账号管理,可以通过账号管理,修改密码,添加修改个人信息,添加监控环境。可以搜索出,正在监控的环境,实现多环境监控。这样就方便用户可以对多个环境进行同时的监控,而不是局限于一个环境的监控。浏览记录,可以记录你上一次查看的房间,有这些记录就会帮助你记忆上一次做的工作,这样就能够便于维护。目前只实现了app的退出功能,退出系统时,要获取到所有的后台Activity,获取到这些activity后要将他们全部销毁。其中也包括后台service。更多界面的图片如图5-4 显示:图 5-4更多界面关键代码如下:public class ExitManager extends Application{ private List activityList=new LinkedList(); private static ExitManager instance; private ExitManager(){ } public static ExitManager getInstance(){ if (instance==null) { instance=new ExitManager(); } return instance; } public void addActivity(Activity activity){ activityList.add(activity); } public void exit(){ for(Activity activity:activityList){ if(!activity.isFinishing()){ activity.finish(); } } int id=android.os.Process.myPid(); if(id!=0){ android.os.Process .killProcess(id); } }}5.1.5 手机通知栏推送消息 在打开后台自动获取数据后,当温度,湿度,co2,光照强度超过了一个指定的阀值,手机通知栏自动弹出消息,提醒用户某个属性值超过了指定的阀值。这样能够很好的防范突发异常情况,能够很好的提醒用户,避免不必要的损失。手机通知栏图片如图5-4 显示:图 5-5消息推送界面总结 通过这个毕业设计,使我对android系统的开发有一个更好的了解,在实际操作中我针对java里的android应用系统开发有了更深入的研究和学习,为以后工作和学习积累了宝贵的经验。 以上是我在本次毕业设计中的过程与体会,当然我知道我作的还是不够的,在以后的日子中,我还要再提高我的实际操作能力。致 谢感谢父母在我大学以及项目期间对我的关怀,还有寝室的同学在四年中给我的帮助关怀,在我的论文中给我最近的帮助。参考文献[1]曾毅.SQL Server数据库技术大全[M].北京:清华大学出版社,2009.5[2]汪永松.Android平台开发之旅[M].北京:机械工业出版社,2010.6[3]Song X Q,Zhou D S.Development and research of application based on Android platform[J].Software Guide,2011,10(2):104[4]Pasgianos G D,Arvanitis K G,Polycarpou P,et al.Anonlinear feedback technique for greenhouse environmental control[J].Computers and Electronics in Agriculture,2003,40(10):153-177[5]劳丹凤,余礼根,滕光辉等.设施农业3G+VPN远程监控系统的设计与实现[J].中国农业大学报,2011,16(2):155-159[6]张天柱.温室工程规划、设计与建设[M].北京:中国轻工业出版社2010:147-149[7]李婷.温室的未来和未来的温室[J].农机科技推广,2004(7):43-46[8]Ahonen,Teemu;Virrankoski;Reino;Elmusrati,Mohammed.Greenhouse monitoringWith wireless sensor network.2008 IEEE/ASME International Conference on Mechatronics and Embedded Systems and Applications,MESA2008:403-408.[9]卫勇,杨延荣,单慧勇.基于手机短消息的温室环境远程监测系统设计[J].农机化研究,2011(01):129-132.[10]周长吉.现代温室工程[M].北京:化学工业出版社,2010:1-17.[11]王乃江.现代温室技术及应用[M].西北农林科技大学出版社,2008:12-19.大学学院信息科技学院计算机科学与技术姓名论文题目一、对待毕业实习的态度及实习期间遵守纪律情况优良(15—11分)一般(10—6分)较差(5—0)二、观察、收集、整理、查阅资料及运用数据的水平优良(30—21分)一般(20—11分)较差(10—0分)三、学生的独立工作能力和动手能力优良(20—16分)一般(15—11分)较差(10—0分)四、毕业论文写作的规范化程度优良(15—11分)一般(10—6分)较差(5—0分)五、毕业论文(设计)总体评价优良(20—16分)一般(15—6分)较差(5—0分)审查意见、成绩及能否提交答辩:大学学院信息科技学院计算机科学与技术姓名论文题目一、论文选题的价值与合理性优秀(15—11分)一般(10—6分)较差(5—0)二、论文的难度、工作量大小和创新性优秀(30—21分)一般(20—11分)较差(10—0分)三、数据资料分析、归纳、概括及运算的能力优秀(20—16分)一般(15—11分)较差(10—0分)四、文字表达水平、文章的逻辑性优秀(15—11分)一般(10—6分)较差(5—0分)五、论文写作的规范化程度优秀(20—16分)一般(15—6分)较差(5—0分)评阅意见、成绩及能否提交答辩:大学本科生毕业论文(设计)答辩及综合评分表(由答辩小组填写)学院信息科技学院计算机科学与技术姓名论文题目一、内容的科学性、应用性和创新性优秀(30—21分)一般(20—11分)较差(10—0)二、论文写作水平及知识面掌握程度优秀(30—21分)一般(20—11分)较差(10—0分)三、语言表达能力、逻辑思维能力、回答问题的正确性优秀(40—31分)一般(30—11分)较差(10—0分)论文答辩意见及成绩:答辩小组负责人(签名): 年 月 日
目录
摘 要 1
ABSTRACT 1
第1章 引言 2
1.1课题背景 2
1.2国内外研究概况 2
1.3选题意义 3
1.4研究目标 3
第2章 相关的理论和技术 4
2.1 JAVA技术介绍 4
2.2 Tomcat 5
2.3 Eclipse 6
2.4 mysql服务器 7
2.5 Android基本框架介绍 7
2.6 Android的工程 8
2.7 j2EE 11
第3章 系统需求分析 12
3.1 可行性分析 12
3.2 功能需求概述 12
3.3 UML用例图 13
第4章 系统设计 14
4.1功能模块设计 14
4.2程序流程图设计 15
4.3 数据库(ER)图设计 16
第5章 系统实现 18
5.1 主要功能模块的实现 18
5.1.1 用户注册登录的实现 18
5.1.2获取当前数据,平均数据的实现 25
5.1.3图表显示的实现 26
5.1.4更多界面的实现 28
5.1.5手机通知栏推送消息 30
总结 32
致 谢 33
参考文献 34
基于Android的温室远程监测系统
引言
目录
目录
目录
目录
目录
目录
目录
目录

版权保护: 本文由 hbsrm.com编辑,转载请保留链接: www.hbsrm.com/jsj/jsjkxyjs/2300.html

好棒文