【Android源码 栏目提醒】:网学会员在Android源码 频道为大家收集整理了“基于Android的气象信息采集系统【毕业论文,绝对精品】 - 毕业设计“提供大家参考,希望对大家有所帮助!
目 录1 引言.............................................................11.1 项目背景.......................................................11.2 项目意义.......................................................12 核心技术简介.....................................................22.1
Android 平台框架 ...............................................22.2
Android 的消息机制 .............................................32.2.1 与消息机制有关的几个类 .......................................32.2.2 消息机制的实现原理 ...........................................42.3
Android XML 解析技术分析 .......................................52.3.1 DOM 解析技术 .................................................52.3.2 SAX 解析技术 .................................................62.3.3 XML pull 解析技术 ............................................73 系统开发工具.....................................................73.1 MyEclipse......................................................73.2
Android SDK....................................................83.3 集成开发环境的搭建 .............................................83.3.1 JAVA JDK 的安装配置 .........................................83.3.2
Android SDK 的配置 ..........................................103.3.3 ADT Plugin for Eclipse ......................................104 系统设计........................................................114.1 系统概述 ......................................................114.2 系统需求分析 ..................................................114.3 功能模块设计 ..................................................125 代码实现........................................................125.1 系统的命名空间 ................................................125.2 主界面实现 ....................................................135.3 天气查询 ......................................................165.4 信息员登录 ....................................................195.5 个人信息 ......................................................205.6 信息反馈 ......................................................215.7 培训信息 ......................................................255.8 手机定位 ......................................................265.9 系统设置 ......................................................285.10 发送天气信息 .................................................296 小结............................................................30致 谢.............................................................IABSTRACT..........................................................II II 基于
Android 的气象信息采集系统 南京信息工程大学计算机与软件学院 摘要:本系统主要用于各地的信息人员获取、上传和采集当地气象信息,使得服务器端人员能够根据信息员发过来的短信更加科学有效地准确的分析出当地的气象信息,提高了天气预报的准确性和及时性。
本系统采用 MyEclipse 作为开发工具,附加
android 的开发插件开发的基于
android 平台的手机应用程序。
本系统能够实现全国各地天气信息的查询,同时将信息员的气象信息通过短信的方式发送给相关服务器,也可以连接服务器获取信息员的培训信息,并能够获取信息员所在的经纬度用来定位信息员的位置。
本系统为气象信息员综合业务信息的手机终端。
关键词:
Android 手机应用 GPS 定位 手机软件 气象信息1 引言1.1 项目背景 近年来,信息员队伍的规模不断壮大,信息员在气象事业,特别是防灾减灾领域中发挥出重要作用。
气象信息员是连接气象工作和老百姓的纽带,是基层防御气象灾害的重要力量。
今年入汛以来,我国暴雨、强对流等极端灾害性天气频繁发生,汛期气象灾害防御形势不容乐观,特别是南方降雨过程偏多、强度偏大,气象及次生、衍生灾害十分严重,给广大人民群众生命财产安全带来了严重影响。
各级气象部门以保障人民群众生命安全和减轻灾害损失为目标,充分发挥气象信息员在预警信息传播、气象灾情收集、组织群众避灾转移以及气象设施维护等工作中的作用,取得了一定成效,但仍存在一些薄弱环节。
为进一步提高基层气象防灾减灾效益,切实发挥气象信息员在气象防灾减灾工作中的作用,开发一套实用现场气象信息采集手机终端,实现气象数据、气象现场图片、音视频等的传送变得尤为重要。
2011 年初数据显示,仅正式上市两年的操作系统
Android 已经超越称霸十年的塞班系统,使之跃居全球最受欢迎的智能手机平台。
现在,
Android 系统不但应用于智能手机,也在平板电脑市场急速扩张,所以本终端系统采用的是基于
android 手机操作系统。
1.2 项目意义 本系统的开发是为完善江苏省气象信息员队伍建设,实现信息员动态化管理,提高信息员的业务能力,获取信息员所在地的天气实况和气象灾情,发挥信息员在气象信息传播和信息反馈中的双重作用。
利用手机定位、手机智能终端、WEBGIS、3G 通讯等新型技术为信息员向气象部门及时反馈气象实况和灾情构建简捷渠道。
系统综合利用自动站、雷达等实况观测信息对信息员反馈信息判断,并将有效信息提供给预报员使用,使之成为气象监测的有效补充、气象灾情收集的快捷渠道,有效地提高预报的针对性、观测的全面性、服务的及时性和信息员的积极性。
通过本终端系统,能够及时了解气象信息,尤其对于农村的气象信息员来说意义重大。
通过本终端,农村气象信息员可以便捷的传递气象灾害预警信号、上报气象灾情信息,能够提高气象服务的有效性,提高广大农民群众灾害自救互救的能力。
建立农村气象信息员与气象部门的信息化气象网络能够加强农村气象防灾减灾工作,拓宽农村气象信息发布渠道,促进农业增产增收。
12 核心技术简介2.1
Android 平台框架
Android 平台下层结构的核心为嵌入式 Linux2.6 操作系统,中间是 Google 为
android 开发的 ,上层为 Application Framework(应Libraries(函数库及
Android Runtime(核心库、Dalvik 虚拟机) 1用程序框架)。
由此来开发各种不同的手机应用程序,如图 2-1 所示 : 图 2-1
Android 平台框架 (1)
Android 应用程序层
Android 会同一系列核心应用程序包一起发布,该应用程序包包括 E-mail 客户端、SMS 短消息程序、日历、地图、浏览器及联系人管理程序等。
所有的应用程序都是使用 Java 语言编写的,如图 2.1 应用程序所示。
(2)
Android 应用框架 开发人员可以完全访问
Android 核心应用程序所使用的 API 框架,如图 2.1 应用程序框架一栏 2所示 。
该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块,并且任何其他的应用程序都可以使用其所发布的功能块(不过要遵循框架的安全性限制)。
同样,该应用程序重用机制也可以使用用户方便的替换程序组件。
(3)
Android 的运行库 如图 2.1“
android 运行时”一栏所示,
Android 包括了一个核心库(Core Libraries)该核心提供了 Java 编程语言核心库的大多数功能。
Dalvik 虚拟机是一种寄存器形态的虚拟机,Google 在DVM 开发时就已经设想用最少的内存来执行,并以同时可执行多个 VM 为前提。
上述特性需要 Linu 2x 操作系统的协助才能实现,例如程序执行的控制、多线程的支持、内存管理等。
事实上,不仅 Dalvik 虚拟机如此,Java 虚拟机也同样具有操作系统依赖性,不同的操作系统需要不同的 Java 虚拟机,而虚拟机会针对操作系统再进行各项调整,以便能最佳化执行。
(4)
Android 程序库 如图 2.1“库”一栏所示,
Android 包含一些 C/C库,这些库能被
Android 系统中不同的组件使用。
它们通过
Android 应用程序框架为开发者提供服务。
(5)
Android 内核
Android 的核心系统服务依赖于 Linux2.6 内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。
Linux 内核也同时作为硬件和软件之间的抽象层,如图 2.1“Linux 内核”一栏所示。
2.2
Android 的消息机制2.2.1 与消息机制有关的几个类 (1) Message 消息对象,顾名思义就是记录消息信息的类。
这个类有几个比较重要的字段: arg1 和 arg2:我们可以使用两个字段用来存放我们需要传递的整型值,在 Service 中,我们可以用来存放 Service 的 ID。
obj:该字段是 Object 类型,我们可以让该字段传递某个多项到消息的接受者中。
what:这个字段可以说是消息的标志,在消息处理中,我们可以根据这个字段的不同的值进行不同的处理,类似于我们在处理 Button 事件时,通过 switchv.getId判断是点击了哪个按钮。
在使用 Message 时,我们可以通过 new Message创建一个 Message 实例,但是
Android 更推荐我们 3通过 Message.obtain或者 Handler.obtainMessage获取 Message 对象 。
这并不一定是直接创建一个新的实例,而是先从消息池中看有没有可用的 Message 实例,存在则直接取出并返回这个实例。
反之如果消息池中没有可用的 Message 实例,则根据给定的参数 new 一个新 Message 对象。
通过分析
源码可得知,
Android 系统默认情况下在消息池中实例化 10 个 Message 对象。
(2) MessageQueue 消息队列。
用来存放 Message 对象的数据结构,按照“先进先出”的原则存放消息。
存放并非实际意义的保存, 4而是将 Message 对象以链表的方式串联起来的 。
MessageQueue 对象不需要我们自己创建,而是有 Looper对象对其进行管理,一个线程最多只可以拥有一个 MessageQueue。
我们可以通过 Looper.myQueue获取当前线程中的 MessageQueue。
(3) Looper MessageQueue 的管理者。
在一个线程中,如果存在 Looper 对象,则必定存在 MessageQueue 对象,并且只存在一个 Looper 对象和一个 MessageQueue 对象。
在
Android 系统中,除了主线程有默认的 Looper 对象,其它线程默认是没有 Looper 对象。
如果想让我们新创建的线程拥有 Looper 对象时,我们首先应调用 Looper.prepare方法,然后再调用 Looper.loop方法。
3 (4) Handler 消息的处理者。
通过 Handler 对象我们可以封装 Message 对象,然后通过 sendMessagemsg把 Message 对象添加到MessageQueue 中;当 MessageQueue 循环到该 Message 时,就会调用该 Message 对象对应的 handler 对象的 handleMessage方法对其进行处理。
由于是在 handleMessage方法中处理消息,因此我们应该编写一个类继承自 Handler,然后在 handleMessage处理我们需要的操作。
2.2.2 消息机制的实现原理 5 (1) 首先启动服务时将会调用 onCreate方法 。
在该方法中我们 new 了一个 HandlerThread 对象,提供了线程的名字和优先级。
紧接着我们调用了start方法,执行该方法将会调用 HandlerThread 对象的 run方法,在 run方法中,系统给线程添加的 Looper,同时调用了 Looper 的 loop方法,通过
源码我们可以看到 loop方法是个死循环,将会不停的从 MessageQueue 对象中获取 Message 对象,如果 MessageQueue 对象中不存在 Message 对象,则结束本次循环,然后继续循环;如果存在 Message 对象,则执行 msg.target.dispatchMessagemsg,但是这个msg 的.target 字段的值是什么呢?我们先暂时停止跟踪
源码,返回到 onCreate方法中。
线程执行完start方法后,我们可以获取线程的 Looper 对象,然后 new 一个 ServiceHandler 对象,我们把 Looper对象传到 ServiceHandler 构造函数中将使 handler、looper 和 messageQueue 三者建立联系。
(2) 执行完 onStart方法后,将执行 onStartCommand方法。
首先我们从消息池中获取一个 Message 实例,然后给 Message 对象的 arg1、what、obj 三个字段赋值。
紧接着调用 sendMessagemsg方法,我们跟踪源代码,该方法将会调用 sendMessageDelayedmsg 0方法,而 sendMessageDelayed方法又会调用 sendMessageAtTimemsg SystemClock.uptimeMillis delayMillis方法,在该方法中我们要注意该句代码 msg.target this,msg 的 target 指向了 this,而this 就是 ServiceHandler 对象,因此 msg 的 target 字段指向了 ServiceHandler 对象,同时该方法又调用 MessageQueue 的 enqueueMessagemsg uptimeMillis方法该方法主要的任务就是把 Message 对象的添加到 MessageQueue 中。
(3) handleMessagemsg方法。
onStartCommand执行完毕后我们的 Service 中的方法就执行完毕了,那么 handleMessage是怎么调用的呢?在前面分析的 loop方法中,我们当时不知道 msg 的 target 字段代码什么,通过上面分析现 msg.target.dispatchMessagemsg则表示执行 ServiceHandler在我们知道它代表 ServiceHandler 对象,对象中的 dispatchMessage方法,该方法首先判断 callback 是否为空,我们跟踪的过程中未见给其赋值,因此 callback 字段为空,所以最终将会执行 handleMessage方法,也就是我们 ServiceHandler 类中复写的方法。
在该方法将根据 what 字段的值判断执行哪段代码。
至此,我们看到,一个 Message 经由 Handler 的发送,MessageQueue 的入队,Looper 的抽取,又再 6一次地回到 Handler 的怀抱中 。
而绕的这一圈,也正好帮助我们将同步操作变成了异步操作。
消息传递的过程如图 2-2 所示: 4 图 2-2 消息传递过程2.3
Android XML 解析技术分析2.3.1 DOM 解析技术 7 (1) DOM 的工作原理 。
Android 完全支持 DOM 解析。
DOM(Document Object Model)是文档对象模型,使用 DOM 对 XML 文件进行操作时,首先要解析文件,将文件分为独立的元素、属性和注释等,然后以节点树的形式在内存中对XML 文件进行表示,就可以通过节点树访问文档的内容,并根据需要修改文档。
DOM 实现时首先为 XML 文档的解析定义一组接口,解析器读入整个文档,然后构造一个驻留内存的树结构,这样代码就可以使用 DOM 接口来操作这个树结构。
(2) DOM 接口和类 Document:该接口定义分析并创建 DOM 文档的一系列方法,它是文档树的根,是操作 DOM 的基础。
Element:该接口继承 Node 接口,提供了获取修改 XML 元素名字和属性的方法。
Node:该接口提供处理并获取节点和子节点的值的方法。
NodeList:提供获得节点个数和当前节点的方法。
这样就可以迭代的访问各个节点。
DOMParser:该类是 Apache 的 Xcrccs 中的 DOM 解析器类,可直接解析 XML 文件。
使用 DOM 操作 XML 的代码看起来比较直观、简单。
但是,因为 DOM 需要将 XML 文件的所有内容读取到内存中,所以内存的消耗比较大。
当然,如果 XML 文件的内容比较小,采用 DOM 是可行的。
(3) DOM 解析流程 DOM 解析的流程如图 2-3 所示: 5 图 2-3 DOM 解析技术2.3.2 SAX 解析技术 8 (1) SAX 的工作原理 SAX 的工作原理简单的说就是对文档进行顺序扫描,当扫描到文档开始与结束、元素开始与结束、文档结束等地方时通知事件处理函数,由事件处理函数做相应的动作,然后继续同样的扫描,直至文档结束。
(2) SAX 接口和类 Attrbutes:用于得到属性的个数、名字和值。
ContentHandler:定义与文档本身关联的事件(例如开始和结束标记)。
大多数应用程序都注册这些事件。
DTDHandler:定义与 DTD 相关联的事件。
它没有定义足够的事件来完整的报告 DTD。
如果需要对 DTD进行语法分析,请使用可选的 DeclHandler。
它是 SAX 的扩展。
不是所有的语法分析器都支持它。
DefaultHandler:它提供了这些接口的缺省实现。
在大多数的情况下,为应用程序扩展 DefaultHandler并覆盖相关的方法要比直接实现一个接口更容易。
(3) SAX 解析流程 SAX 的处理流程如图 2-4 所示: 图 2-4 SAX 解析流程 6 本系统就用的是 SAX 解析技术对 XML 文件进行解析的。
因为 SAX 是以事件作为解析 XML 文件的模式, 9它将 XML 文件转化成为一系列的事件,由不同的事件处理器来决定如何处理 。
XML 文件较大时,选择 SAX技术是比较合理的,虽然代码量比较大,但是它不需要将所有的 XML 文件加载到内存中。
这样对于有限的
Android 内存更有效,而且
Android 提供了一种传统的 SAX 使用方法以及一个便捷的 SAX 包装器。
2.3.3 XML pull 解析技术 (1) XML pull 的工作原理 XML pull 提供了开始元素和结束元素。
当某个元素开始时,我们可以调用 parser.nextText从 XML 10文档中提取所有字符数据 。
当解释到一个文档结束时,自动生成 EndDocument 事件。
(2) XML pull 的接口和类 XmlPullParser:XML pull 解析器是一个在 XMLPULL V1 API 中提供了定义解析功能的接口。
XmlSerializer:它是一个接口,定义了 XML 信息集的序列。
XmlPullParserFactory:这个类用于在 XMLPULL V1 API 中创建 XML pull 解析器。
XmlParserException:抛出单一的 XML pull 解析器相关的错误。
(3) XML pull 的接口和类 XML pull 的解析流程如图 2-5 所示: 图 2-5 XML pull 解析流程3 系统开发工具3.1 MyEclipse Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。
就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。
幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT)。
虽然大多数用户很乐于将 Eclipse 当作 Java IDE 来使用, 7但 Eclipse 的目标不仅限于此。
Eclipse 还包括插件开发环境plug-in Development Environment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。
由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。
Eclipse 是一款非常优秀的开源 IDE,非常适合 Java 开发,由于支持插件技术,受到了越来越多的开发者的欢迎。
MyEclipse 8.6 不但界面作了很大的增强,增加了代码折叠等众多优秀功能,而且还集成了众多的插件,通过手动添加
Android SDK 使开发
Android 手机平台的应用程序更加方便快捷。
3.2
Android SDK ,DEGE 和 3G 的 语音与数据业务,支持接收语言呼叫和 SMS(短信消
Android 广泛支持 GSM(全球通)息服务),支持数据存储共享和 IPC(进程间通信)消息机制,为地理位置服务(如 GPS)、谷歌地图服 务提供易于使用的 API 函数库,提供组件复用和内置程序格式,支持的格式有 MPEG4,H264,MP3,AAC,AMR,JPG,PNG 和 GIF,为 2D 和 3D 图像处理的专用的 API 库函数。
在内存和进程管理方面, 与
Android 具有自己的运行时和虚拟机。
Java 和.NET 运行 时不同,
Android运行时还可以管理进程的生命周期。
Android 为了保证高优先级进程运.