02-丁同飞-屠菁-基于Android的手机天气预报系统

合肥学院

2013届 毕 业 论 文(设 计)

论文(设计)题目

院系名称

专业(班级)

姓名(学号)

基于Android的手机天气预 报系统 计算机科学与技术系 计算机科学与技术 2009级本科3班 丁同飞 (0904013004) 屠 菁 袁 暋 2013-06-02 导负成教责时师 人 间

基于Android的手机天气预报系统

中 文 摘 要

天气预报为人们了解天气状况和出行安排带来了方便,但是,大多数天气预报软件都是基于PC端,查询起来并不是很便捷。而随着智能手机的普及和3G技术的发展,手机端实现天气查询成为了可能,因此,实现手机端的天气预报系统成为了人们迫切需要且切实可行的需求。

本设计使用Android设计技术开发了一种运用在Android系统上的手机天气预报软件系统,本系统通过选择城市来获得天气,风向,温度等信息。基于手机的天气预报系统软件可以使用户对于各地的天气情况的实时掌握,极大的方便了用户的出行和行程安排,避免了不必要的麻烦,具有很强的实用性。

本论文首先进行了项目的背景介绍,开发的目的及意义,接着进行系统分析(包括需求分析、研究目标和内容),接着分析了Android系统的框架,然后介绍了本系统的用到的技术以及平台的搭建,最后论述了本系统的详细设计(包括功能模块设计、数据库设计等),接着进行了项目的测试用例分析,最后给出了结论以及展望。

关键词:天气预报;Android;linux内核

Based on the Android of mobile phone weather forecast system

ABSTRACT

Weather Forecast for people to understand weather conditions and travel arrangements to bring the convenience, however, most weather forecasts are based on the PC side software, check it is not very convenient. With the popularity of smart phones and 3G technology, mobile client queries become possible to achieve weather, therefore, realize the phone side of weather forecasting system has become an urgent need for people with practical needs.

This design uses design techniques developed an Android application in the Android system mobile weather software system, the system by selecting the city to get weather, wind direction, temperature and other information. Phone-based weather forecasting system software allows users around the weather conditions for real-time control, which greatly facilitates the user's travel and travel arrangements, to avoid unnecessary trouble, and highly practical.

This paper first introduces the background for the project, the development of purpose and meaning, followed by systems analysis (including needs analysis, research objectives and content), and then analyzes the framework of the Android system, then introduces the technology used in this system as well as platform structures, and finally discusses the detailed design of the system (including functional module design, database design, etc.), followed by analysis of the project's test cases, and finally gives the conclusion and outlook.

Keyword: android;the Linux kernel;the weather forecast

目 录

中文摘要 ...................................................................... I ABSTRACT ..................................................................... II 目 录 .................................................................... III

第一章 绪论 ................................................................... 1

1.1引言 ................................................................... 1

1.2系统开发的背景介绍 ..................................................... 1

1.3系统开发的目的 ......................................................... 2

1.4项目开发的意义 ......................................................... 2

第二章 系统分析 ............................................................... 3

2.1研究目标 ............................................................... 3

2.2需求分析 ............................................................... 3

2.3系统研究内容 ........................................................... 4

2.4项目需求分析 ........................................................... 4

第三章 系统架构分析 ........................................................... 5

3.1 Android系统的特点 ..................................................... 5

3.2 Android的功能 ......................................................... 5

3.3 Android架构 ........................................................... 6

3.3.1 Linux Kernel ..................................................... 7

3.3.2 Android Runtime .................................................. 7

3.3.3 Library .......................................................... 8

3.3.4 Application Framework ............................................ 8

3.3.5 Application ...................................................... 8

3.4系统组件 ............................................................... 9

3.4.1 Activity ......................................................... 9

3.4.2 Service .......................................................... 9

3.4.3 BroadcastReceiver ................................................ 9

3.4.4 Content Provider ................................................ 10

第四章 系统开发及其相关技术 .................................................. 11

4.1 Android开发环境介绍 .................................................. 11

4.2 Android开发平台搭建 .................................................. 11

4.3 SQlite ................................................................ 12

4.3.1 SQlite简介 ...................................................... 12

4.3.2 SQlite特性 ...................................................... 12

4.3.3 SQlite功能 ...................................................... 13

4.3.4 SQlite类型 ...................................................... 13

第五章 系统的设计与实现 ...................................................... 14

5.1技术支持 .............................................................. 14

5.2数据库的设计 .......................................................... 15

5.3主要模块 .............................................................. 16

5.3.1项目功能界面 ..................................................... 16

5.3.2项目框架 ......................................................... 17

5.4主要代码解析 .......................................................... 18

第六章 系统测试与运行 ........................................................ 27

6.1系统功能界面 .......................................................... 27

结 论 ..................................................................... 31

参考文献 ..................................................................... 32

致 谢 ..................................................................... 33

第一章 绪 论

1.1引言

手机是已经成为了生活中不可少的通信设备,没有手机有时会让人觉得寸步难行,手机将脱离传统的打电话,发短信等基本功能,而基于智能手机的处理能力和可扩展能力,基于3G网络高速数据传输,越来越多的功能和业务将被开发出来并大规模的应用。正基于此,当全世界的目光聚集在此的时候,Google于2007年11月5日宣布推出基于linux平台的开源手机操作系统,号称首个为移动终端打造的真正开发和完整的移动软析------android[1]。

现有的3G技术和移动互联网技术的快速发展,智能手机功能的不断增强,让基于Android平台的查询需求越来越多。

本软件就是利用现有的网络快速获取网络上的天气信息并显示到手机终端上,为用户提供实时的天气查询和近期天气查询服务,为工作、出行等带来便利。

1.2系统开发的背景介绍

Android是基于Linux内核的软件平台和操作系统,早期由Google开发,后由开放手机联盟(Open handset Alliance)开发。它采用了软件层(Software stack)的构架,主要分为三个部分。底层以Linux为内核作为基础,由C语言开发,只提供基础功能,中间层次包话函数库和虚拟机,由C++开发。最上层是各种应用软件,包话通话程序,短信程序。应用软件由各公司自行开发,以JAVA编写[2]。

Android这个平台对于Google对于大众的意义不在于手机本身,Android存在的目的也不在于挑起手机操作系统之间的混战,而在于推动移动互联网产业链的迅速成型。

以Google,苹果和诺基亚为中心各自形成的生态链将以原来数倍的速度推动移动互联网的发展,这正是Google发布Android平台的意义,也是Android平台存在的使命所在,而作为Android平台成员之一的中国移动也投资成立了一家通讯公司,专门从事Google手机平台上添加飞信,输入法等一系列符合国内用户使用特色的功能。国内众多个业也将目光投入了Android上面,并启动了相关的计划来深入地理解并发展Android。更多的手机软件开发企业已经或者筹备着将公司进行转型,从其主向的开发转向到Android的开发。

基于此,我们有必要通过进行相关的研究来了解Android平台,来了解开发Android的那一大批人的先进的理念和思想,并通过这些来了解手机软件行业,进而了解未来移动互联网的发展趋势,从而更好的适应时代的需要。

1.3系统开发的目的

在科技日益发达的今天,社会竞争越来越激烈,这要求人们不断的摄取信息,同时手机发展到现在已经成为广大人民群众的日常使用的通读工具,手机的功能也日趋完善。我国的通读移动通讯功能同样得到了很大的提高。手机软件可以安装在手机上的软件,完善原始系统的不足与个性化。随着科技的发展,现在手机的功能也越来越多,越来越强大。经济发展和社会进步,人们的出行更加频繁,对于天气的关注更加强烈,基于这种原因我们开发了一种运用在Android系统上的手机天气预报软件系统,本系统通过选择城市来获得天气,风向,风向,温度等信息。基于手机的天气预报系统软件可以使用户对于各地的天气情况的实时掌握,极大的方便了用户的出行和行程安排,避免了不必要的麻烦。本次设计在Android手机系统可以准确预测包括:时间,温度,风向等,并显示在手机界面上,方便准确地了解天气信息。

1.4项目开发的意义

Android平台3G手机气象软件的开发可以进一步扩大气象信息的覆盖面,让广大公众能够在第一时间方便且快捷地获取最新的气象预报(预警)信息,以便提前预防,把气象灾害造成的损失降到最低。同时也可以强化气象公共服务的职能,完善公共服务体系、改善公共服务手段、增加公共服务产品、提高公共服务质量,更好地发挥了气象事业对经济社会发展的现实性作用。

第二章 系统分析

2.1研究目标

1)了解Android应用程序的设计和开发过程;

2)使用多种组件进行Android 平台的手机气象软件的开发。

本软件是基于Eclipse的开发环境,依托国家气象局提供的气象数据接口建立气象信息数据库,开发出了针对Android平台的手机天气预报系统。

2.2需求分析

设计完成一个实用稳定的天气预报系统,同时要廉价使其能滿足大部分用户的需求,因此针对上述要本设计应滿足:

1)加载界面

程序开始运行时显示加载界面,此界面是应用程序最先展现的窗口,应尽量保持界面信息简洁。

2)天气显示界面

显示指定城市三天内的天气状况,包括日期、城市名称、温度、风力与当日的建议,用户可通过按菜单键来显示更新当前天气与设置天气显示的界面背景,以及跳转至设置预报城市界面来更换预报城市。

3)预报城市设置

由自动设置预报城市与手动设置两部分组成,自动设置实现GPS定位功能,自动确定当前用户所在地;而手动设置则通过可伸展性下拉列表单击选择系统数据库中预存的城市来进行设置,同时为了方便用户查找,支持以输入框的形式来过滤查询预报城市。当单击选中城市时跳转至天气显示界面,来显示该城市三天内的天气状况;在天气界面用户可通过菜单键选择城市,更新天气与更换背景,第一次运行时自动跳到该界面。

4)Widget桌面小部件

为了方便用户实时了解天气状况,特别添加在Android系统桌面上显示当前天气与时间的小部件,使用户拿起手机第一刻就能了解当前天气与时间的小部件,使用户拿起手机第一刻就能了解天气,同时当用户单机小部件时,自动跳转至天气显示界面,显示三天内的详细

天气。

2.3系统研究内容

1)数据源的选取

2)界面的设计

3)代码的设计

4)程序的测试

5)产品的发布

2.4项目需求分析

根据功能的需求,分析此项目的主要功能应该具有以下几点:

1)系统比较稳定,具有实用性和通用性

2)系统设计界面应尽量美观得体,操作简便明了,便于人们使用

3)可以较好的查询出人们需要查询的有关天气的相关信息,包括天气,风力,温度,建议等等。

4)可以进行对使用者所在城市的定位以及对其他城市的天气查询

5)个性化的widget桌面部件

第三章 系统架构分析

Android是一种以Linux为基础的开放源代码操作系统,主要使用于便携设备。目前尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,最初主要支持手机。2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上。Android的主要竞争对手是苹果公司的iOS以及RIM的Blackberry OS。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2012年2月数据,Android占据全球智能手机操作系统市场52.5%的份额,中国市场占有率为68.4%[3]。

Android是一个移动设备的软件平台,是由Linux+Java构成的开源软件,它提供包括SDK、Key Apps、Middleware、Linux Kernel四个部分在内的全套手机软件方案。它开放了基于Linux内核以上的开发工具,从而保证了内容的可移植性和多样性。Android平台为我们开发应用程序提供了一套很好的框架,我们可以在这个平台的基础上开发不同的应用程序,也可以开发新的组件供应用程序调用[4]。

3.1Android系统的特点

1)开放性。Google与开放性手机联盟合作开发了android,Google通过与动行商,通过与运营商,设备制造商,开发商和其他有关各方结成深层次的合作伙伴关系,希望借助建立标准化,开放式的移动电话软件平台,在移动产业内形成一个开放式生态系统。

2)应用程序无界限。Android上的应用可以通过标准API访问核心移动设备功能。通过互联网,应用程序可以声明它们的功能可提供其它应用程序使用。

3)应用程序是在平等的条件下创建的,移动设备上的应用程序可以被替换或扩展,即使是拨号或主屏幕这样的核心组件。

4)应用程序可以轻松地嵌入网络。应用程序可以轻松地嵌入HTML,javascript和样式表,还可以通过Webview显示内容。

5)应用程序可以并行运行。Android是一种完整的多任务环境,应用程序可以在其中并行运行,在后台运行时,应用程序可以生成通知引起注意[5]。

3.2Android的功能

1)支持虚拟键盘。虚拟键盘的出现意味着基于Android1.5或以上的版本的移动设备可以同时支持特理键盘和虚拟键盘。

2)使用widget实现桌面的个性化。可以用widget修饰自已的桌面。大多数小的Web应用都是从网络上获得实时数据并展示给用户的,android预装了5个桌机Widget,包括数字时钟,日历,音乐播放器,相框。

3)用在线文件快速浏览数数,类似于OSX Leopard的Quicklook特征,Android的在线文件夹可显示的数据条目,比如联系人,喜欢的应用,E-mail信息,播放列表,书签,RSS源等,并不需要运行系统程序处理特定的数据条目。

4)视频录制和分享。Android还有录制和分享视频的功能,对回放和MPEG-4,3GP等视频也有了更好的支持。可以通过E-mail,MMS或直接上传到youtube等方式来分享视频。

5)更快,更兼容的浏览器,Android的基于Webkit内核的浏览器带来了重要的调速半置,这得益于新的Wenkit渲染引擎和优化的JAVA脚本编译器。

6)Voice search语音搜索。带有语音识别技术的Google手机已于2008年11月面世,它支持语音搜索功能,该功能增强了默认的搜索能力,已超过了纯文本搜索。

7)立体蓝牙和免提电话。除了增强的免提电话体验,Android还支持立体蓝牙(A2Dphe和AVCRP),并有自动配对功能。

8)强大的GPS技术.Android内部提供了大量的GPS组件,我们可以很轻松地获得设备当前的位置等信息,让导航等功能更加完善。

9)Android系统硬件检测,android可自动检测和修复SD卡的文件系统,允许第三方应用显示Android系统的硬件特征,为了让用户下载到与自已的设备匹配的应用,我们可以检测用户设备的硬件信息,让满足应用要求的设备安装该程序,当更多的android设备建立在不同的硬件上时,这个功能显得很实用[6]。

3.3Android架构

Android的系统架构和其它操作系统一样,采用了分层的架构。android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。

图3-1 Android架构

Android是以Linux为核心的手机操作平台,作为一款开放式的操作系统,随着Android的快速发展,如今已允许开发者使用多种编程语言来开发Android应用程序,而不再是以前只能使用Java开发Android应用程序的单一局面,因而受到众多开发者的欢迎,成为真正意义上的开放式操作系统[7]。

3.3.1Linux Kernel Android基于Linux 2.6提供核心系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。 如果你学过计算机网络知道OSI/RM,就会知道分层的好处就是使用下层提供的服务而为上层提供统一的服务,屏蔽本层及以下层的差异,当本层及以下层发生了变化不会影响到上层。也就是说各层各尽其职,各层提供固定的SAP(ServiceAccess Point),专业点可以说是高内聚、低耦合。如果你只是做应用开发,就不需要深入了解Linux Kernel层。

3.3.2Android Runtime

Android包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。每一个Android应用程序是Dalvik虚拟机中的实例,运行在他们自己的进程中。Dalvik虚拟机设计成,在一个设备可以高效地运行多个虚拟机。Dalvik虚拟机可执行文件格式是.dex,dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。 大多数虚拟机包括JVM都是基于栈的,而Dalvik虚拟机则是基于寄存器的。两种架构各有优劣,一

般而言,基于栈的机器需要更多指令,而基于寄存器的机器指令更大。dx 是一套工具,可以将 Java .class 转换成 .dex 格式。一个dex文件通常会有多个.class。由于dex有时必须进行最佳化,会使文件大小增加1-4倍,以ODEX结尾。 Dalvik虚拟机依赖于Linux 内核提供基本功能,如线程和底层内存管理。

3.3.3Library Android包含一个C/C++库的集合,供Android系统的各个组件使用。这些功能通过Android的应用程序框架(application framework)暴露给开发者。下面列出一些核心库:系统C库——标准C系统库(libc)的BSD衍生,调整为基于嵌入式Linux设备媒体库——基于PacketVideo的OpenCORE。这些库支持播放和录制许多流行的音频和视频格式,以及静态图像文件,包括MPEG4、 H.264、MP3、 AAC、AMR、JPG、 PNG界面管理——管理访问显示子系统和无缝组合多个应用程序的二维和三维图形层LibWebCore——新式的Web浏览器引擎,驱动Android 浏览器和内嵌的web视图SGL——基本的2D图形引擎3D库——基于OpenGL ES 1.0 APIs的实现。库使用硬件3D加速或包含高度优化的3D软件光栅FreeType——位图和矢量字体渲染SQLite——所有应用程序都可以使用的强大而轻量级的关系数据库引擎。

3.3.4Application Framework

通过提供开放的开发平台,Android使开发者能够编制极其丰富和新颖的应用程序。开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等等,很多很多。 开发者可以完全使用核心应用程序所使用的框架APIs。应用程序的体系结构旨在简化组件的重用,任何应用程序都能发布他的功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。这一机制允许用户替换组件。 所有的应用程序其实是一组服务和系统,包括:视图(View)——丰富的、可扩展的视图集合,可用于构建一个应用程序。包括包括列表、网格、文本框、按钮,甚至是内嵌的网页浏览器内容提供者(Content Providers)——使应用程序能访问其他应用程序(如通讯录)的数据,或共享自己的数据资源管理器(Resource Manager)——提供访问非代码资源,如本地化字符串、图形和布局文件通知管理器(Notification Manager)——使所有的应用程序能够在状态栏显示自定义警告活动管理器(Activity Manager)——管理应用程序生命周期,提供通用的导航回退功能。

3.3.5Application

Android装配一个核心应用程序集合,包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人和其他设置。所有应用程序都是用Java编程语言写的。更加丰富的应用程序有待我们去开发! 从上面我们知道Android的架构是分层的,非常清晰,分工很明确。Android本身是一套软件堆叠(Software Stack),或称为「软件叠层架构」,叠层主要分成三层:操作系

统、中间件、应用程序。从上面我们也看到了开源的力量,一个个熟悉的开源软件在这里贡献了自己的一份力量。

3.4系统组件

Android开发四大组件分别是:活动(Activity): 用于表现功能。服务(Service): 后台运行服务,不提供界面呈现。广播接收器(BroadcastReceiver):用于接收广播。内容提供商(Content Provider): 支持在多个应用中存储和读取数据,相当于数据库[8]。

3.4.1Activity 应用程序的显示层。每一个画面对应于你的应用程序,将会是Activity类的扩展。Activity使用Views去构建UI来显示信息和响应用户的行为。就桌面开发而言,一个Activity相当于一张Form。

一个Activity通常展现为一个可视化的用户界面。例如,一个Activity可能展现为一个用户可以选择的菜单项列表或者展现一些图片以及图片的标题。一个消息服务应用程序可能包含一个显示联系人列表的Activity,一个编写信息的Activity,以及其它一些查看信息和修改应用程序设置的Activity。虽然这些Activity一起工作,共同组成了一个应用程序,但每一个Activity都是相对独立的。每一个Activity都是Activity(android.app.Activity)的子类。

3.4.2Service Android应用程序中不可见的“工人”。 Service组件运行时不可见,但它负责更新的数据源和可见的Activity,以及触发通知。它们常用来执行一些需要持续运行的处理,当你的 Activity已经不处于激活状态或不可见。

Service没有用户界面,但它会在后台一直运行。例如,Service可能在用户处理其它事情的时候播放背景音乐,或者从网络上获取数据,或者执行一些运算,并把运算结构提供给Activity展示给用户。每个Service都扩展自类Serivce。

应用程序可以连接到一个正在运行中的Service。当连接到一个Service后,可以使用这个Service向外暴露的接口与这个Service进行通信。对于上面提到的播放音乐的Service,这个接口可能允许用户暂停,停止或重新播放音乐。

与activity以及其它组件一样,Service同样运行在应用程序进程的主线程中。所以它们不能阻塞其它组件或用户界面,通常需要为这些Service派生一个线程执行耗时的任务。

3.4.3BroadcastReceiver

Intent广播的“消费者”。通过创建和注册一个Broadcast Receiver,应用程序可以监听符合

特定条件的广播的Intent。Broadcast Receiver 会自动的启动你的Android应用程序去响应新来的Intent。Broadcast Receiver是事件驱动程序的理想手段。

Broadcase Receiver不执行任何任务,仅仅是接受并响应广播通知的一类组件。大部分广播通知是由系统产生的,例如改变时区,电池电量低,用户选择了一幅图片或者用户改变了语言首选项。应用程序同样也可以发送广播通知,例如通知其他应用程序某些数据已经被下载到设备上可以使用。

3.4.4Content Provider 提供共享的数据存储。Content Provider(内容提供器)用来管理和共享应用程序的数据库。在应用程序间,Content Provider是共享数据的首选方式。这意味着,你可以配置自己的Content Provider去存取其他的应用程序或者通过其他应用程序暴露的Content Provider去存取它们的数据。Android设备本身包含了几个Content Provider来访问像联系人信息等有用的数据库。

应用程序可以通过Content Provider访问其它应用程序的一些私有数据,这是Android提供的一种标准的共享数据的机制。共享的数据可以是存储在文件系统中、SQLite 数据库中或其它的一些媒体中。Content Provider扩展自ContentProvider类,通过实现此类的一组标准的接口可以使其它应用程序存取由它控制的数据。然而应用程序并不会直接调用ContentProvider中的方法,而是通过类ContentResolver。ContentResolver能够与任何一个 ContentProvider通信,它与ContentProvider合作管理进程间的通信。

第四章 系统开发及其相关技术

4.1Android开发环境介绍

Android的上层应用程序是用Java语言开发,同时还需要基于Dalvik虚拟机,所以,Google公司推荐使用主流的Java继承开发环境Eclipse。只有Eclipse还不够,因为是使用Java语言进行开发,还应该有由SUN公司提供的Java SDK(其中包括JRE:Java Runtime Environment)。此外,Android的应用程序开发和Java开发有较大区别的,所以还需要有Google提供的Android SDK。同时,还需要在Eclipse安装ADT,为Android开发提供开发工具的升级或者变更,是Eclipse下开发工具的升级下载的工具。

简言之,需要以下软件,才能搭建Android开发环境,从而进行Android应用程序的开发。

1)Java SDK

2)Eclipse

3)Android SDK

4)ADT

日前,Google Android Studio 1.0 开发环境的推出,无疑给Android软件开发带来了极大的便捷。

4.2Android开发平台搭建

Android开发平台搭建步骤:

1)首先到http://www.eclipse.org/downloads/下载Eclipse集成开发环境并且解压,这里推荐下载Java EE 集成版本,可以为平台的搭建省下不少工作。接着再去http://java.sun.com/javase/downloads/index.jsp

下载工序就结束了。

2)双击Eclipse解压后目录中的eclipse.exe然后启动,选择Eclipse菜单中的Help-> Install New Software-> 选项卡上的Available Software,点击右侧的“Add”输入http://dl-ssl.google.com/android/eclipse/后确定,然后在“Work with”下拉菜单中选择刚才输入的网址。过一会就会出现一个Developer Tools选项,勾上以后点击Next以后Eclipse会自动

站点下载http://dl.google.com/android/android-sdk-windows-1.5_r1.zip,Android SDK1.5后解压。第一步

网上查找Android 开发工具插件,然后找到Android DDMS和Android Development Tools,选中这两个点击Finish,Eclipse就会自动下载并安装Android插件了,最后会提示重启Eclipse。

3)重启后选择Eclipse菜单中的Windows-> Preferences 在左侧的Android项目中SDK Location中填入Android SDK解压后的目录,然后点击Apply。

4)在WindowsXP的系统变量中的path变量中添加一个值,该值指向解压后的Android SDK目录下的tools文件夹。

4.3SQlite

4.3.1SQlite简介

SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至今已经有12个年头,SQLite也迎来了一个版本 SQLite 3已经发布。

不像常见的客户-服务器范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的[9]。

4.3.2SQlite特性 1)比一些流行的数据库在大部分普通数据库操作要快

2)简单, 轻松的API

3)包含TCL绑定, 同时通过Wrapper支持其他语言的绑定

4)良好注释的源代码, 并且有着90%以上的测试覆盖率

5)独立: 没有额外依赖

6)Source完全的Open, 你可以用于任何用途, 包括出售它

7)支持多种开发语言,C, PHP, Perl, Java, C#,Python, Ruby

4.3.3SQlite功能 SQLite虽然很小巧,但是支持的SQL语句不会逊色于其他开源数据库,它支持的SQL包括:

ATTACH DATABASE

BEGIN TRANSACTION

COMMENT

COMMIT TRANSACTION 等等。

同时它还支持事务处理功能等等。也有人说它象Microsoft的Access,有时候真的觉得有点象,但是事实上它们区别很大。比如SQLite 支持跨平台,操作简单,能够使用很多语言直接创建数据库,而不象Access一样需要Office的支持。如果你是个很小型的应用,或者你想做嵌入式开发,没有合适的数据库系统,那么你可以考虑使用SQLite。目前它的最新版本是

3.7.8 。它的官方网站是:http://www.sqlite. org或者http://www.sqlite .com .cn,能在上面获得源代码和文档。同时因为数据库结构简单,系统源代码也不是很多,也适合想研究数据库系统开发的专业人士[10]。

4.3.4SQlite类型

SQLite的数据类型,首先你会接触到一个让你惊讶的名词: Typelessness(无类型)。 对! SQLite是无类型的. 这意味着你可以保存任何类型的数据到你所想要保存的任何表的任何列中, 无论这列声明的数据类型是什么(只有在一种情况下不是, 稍后解释)。 对于SQLite来说对字段不指定类型是完全有效的。如:

Create Table ex1(a, b, c);

诚然SQLite允许忽略数据类型, 但是仍然建议在你的Create Table语句中指定数据类型。 因为数据类型对于你和其他的程序员交流, 或者你准备换掉你的数据库引擎时能起到一个提示或帮助的作用[11]。

第五章 系统的设计与实现

5.1技术支持

本软件是基于andriod的手机天气预报系统。

1)首先天气预报功能是调用国家气象局的免费接口: 本软件使用到的中国国家气象局天气预报接口总共有两个:

http://www.weather.com.cn/data/sk/101010100.html

http://m.weather.com.cn/data/101010100.html

上面url中的101010100是城市代码,这里是北京的城市代码。只需要改变城市代码,就可以得到所在城市的天气信息。

在浏览器上输入url:http://m.weather.com.cn/data/sk/101010100.html得到信息,天气信息是json的数据格式。

第一个接口主要是获取当天天气的具体信息,实时温度信息。

第二个接口主要是获取当天及未来几天的粗略天气信息。

2)json数据解析:

JavaScript Object Notation,但是独立于语言。类似XML,可以用来文本信息的存储和交换,是数据的载体。从天气预报接口获得天气信息时需要对天气进行解析,解析出自己需要的天气信息。 3)定位功能:本软件采用的是百度地图定位

因为google在中国服务不稳定,使用google API获取地理信息在某些型号手机上无法实现,因此使用百度SDK定位功能,调用百度类库实现定位,百度定位SDK所需文件:locSDK_3.3.jar, liblocSDK3.so 。

4)widget桌面部件:

AppWidget 框架类:

1、AppWidgetProvider :继承自 BroadcastRecevier , 在AppWidget 应用 update、enable、

disable 和 delete 时接收通知。其中,onUpdate、onReceive 是最常用到的方法,它们接收更新通知。

2、AppWidgetProvderInfo:描述 AppWidget 的大小、更新频率和初始界面等信息,以XML 文件形式存在于应用的 res/xml/目录下。

3、AppWidgetManger :负责管理 AppWidget ,向 AppwidgetProvider 发送通知。

4、RemoteViews :一个可以在其他应用进程中运行的类,向 AppWidgetProvider 发送通知。

5)android -support-v4.jar

这个是android界面特殊效果的第三方的jar包。

5.2数据库的设计

本软件选择SQlite数据库作为数据存储的载体,建立数据库all_city.db,此数据库记录了所有城市的信息和查询代码,在查询指定城市的天气时,需要用到它提供的城市码,而城市码相对稳定不变,所以在构建系统时将其事先复制到手机的存储设备中,以备日后查询。其中存在两个表:Provice和city,Provice包括provice.id和provice.name,City包括city.id和city.name,并且provice和city形成级联关系。

在进行初始化数据库时还建立了订阅城市表TB_CITY。

表5-1 订阅城市表

字段名

FIELD_CITY_ID

FIELD_CITY_NAME

FIELD_WEATHER1

FIELD_TIME1

FIELD_WEATHER_IMG1

FIELD_REALTIME_TEMP

FIELD_TEMPERATURE1

FIELD_WIND

FIELD_ADVICE

FIELD_TIME2

... 类型 INTEGER TEXT TEXT TEXT INTEGER TEXT TEXT TEXT TEXT TEXT ... 描述 Primary Key 城市名 当天天气 当天时间 当天天气图标 当天实时气温 当天气温 当天风力 建议 明天天气 ...

数据库相关操作:

1)插入

5.3主要模块

5.3.1项目功能界面

图5-1 功能模块图

5.3.2项目框架

本项目主要框架如下:

图5-2 项目框架图

其中各文件的功能是:

Constant 是一些常量定义的地方。

WeatherApplication 是一个android应用启动最先启动的地方,在这里进行全局变量初始化 打开数据库等操作,AllCityActivity 是所有城市选择列表界面,CitymanageActivity 是显示当前你的订阅的城市,LaunchActivity 是启动画面,MainActivity 是天气显示界面,主界面。

DBHelper 是数据库建表操作,DBManager 是对数据库增删改查操作。

City 是城市类,MyCity 是订阅城市类,Province 是省关联到City 省、市形成级联

UpdateReceive 接受更新命令的广播,UpdateService 是更新服务,所有的更新请求服务器操作,接受返回信息。

Widget 是桌面小控件控制。

HttpConnect 是http请求操作工具类。

MyLog 是打印日志工具类。

MyThreadPool 是线程池工具类。

ImageUtil 是图片选择工具类,NetworkUtil 是检测手机网络工具类,StreamUtil 是转换Http数据流工具类。

ServerResponseException 是自定义的一个异常 当远程服务器响应出现问题时,抛出此异常。

5.4主要代码解析

5.4.1启动界面

在启动界面,当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发,如果此时需要一个耗时的操作,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象,如果5秒钟还没有完成的话,会收到Android系统的一个错误提示 "强制关闭".这个时候我们需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,Android主线程是线程不安全的,也就是说,更新UI只能在主线程中更新,子线程中操作是危险的. 这个时候,Handler就出现了.来解决这个复杂的问题,由于Handler运行在主线程中(UI线程中),它与子线程可以通过Message对象来传递数据, 这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包含数据),把这些消息放入主线程队列中,配合主线程进行更新

进入启动界面后,可定义2秒后跳转至天气显示界面:

5.4.2天气显示界面文件WeatherApplication.java

该文件中是一个android应用最先启动的地方,在这里进行全局变量初始化,打开数据库等操作。

初始化应用:

设置一个定时更新的提醒:

打开数据库操作:

5.4.3当前订阅城市界面 CityManageActivity.java

在该界面主要是显示当前你所订阅的城市,在该界面用了一个Adapter适配器来进行下拉菜单的操作:

同时在该界面还添加了一个长按菜单,当你想要删除你所订阅的城市时,长按,会出现是否删除对话框:

5.4.4定位功能

当你第一次运行该程序时,进行定位功能时,会出现你当前所在的城市,并且会出现是否添加对话框,定位时调用百度地图定位的类库:

进行定位时,打印log信息,获取省份和城市信息:

5.4.5菜单项的操作

对菜单进行选择操作,通过选择不同的菜单进入不同的功能界面:

5.4.6更新操作

接受到更新操作的信息后才能进行更新操作,通过startService来开启更新服务,更新操作时通过myThreadPool = MyThreadPool.getInstance()来开启线程,通过httpConnect = HttpConnect.getInstance()进行连接。

通过更新操作获取实时的天气信息:

5.4.7widget功能

由于widget中的时钟关系,需要对widget显示进行时刻的更新用来保持与系统中时间的一致。实现这个功能需要用到AlarmManager类,这个类专门用来设定在某个指定的时间去完成指定的事件。设计思路是在Widget的onUpdate方法中启动一个自定义更新后台服务,更新widget,并设定下一分钟再次调用此服务。

5.4.8http请求操作

由于本设计是实时天气预报系统,因此需要联网,所以要进行http连接,先进行http请求通过HttpClient接口实现:

5.4.9检测手机网络

在android手机上运行时需要保持手机网络通畅,因此需要检测手机网络:

5.4.10线程池ThreadPool

通过运用线程池可以实现程序高效的运行:

第六章 系统测试与运行

6.1系统功能界面

1)加载界面:

本天气预报为掌上天气,当运行该程序时,会先进入一个加载界面:

图6-1 加载界面

2)进入天气界面时,因为是第一次进入,所以未设定城市,该界面是:

图6-2 初始化界面

3)当要选择查询天气时,可以点击菜单按钮,会出现三个菜单:

图6-3 显示菜单项

4)点击进入城市管理界面,在城市管理界面是一个下拉列表,每一个省会下又有自己对应的下拉列表:

图6-4 城市管理界面

5)定位功能,上图城市列表中有一个水滴图标,点击该按钮可实现定位:

图6-5 定位功能并添加城市

6)点击添加后,进入天气显示界面:

图6-6 天气显示界面

7)在该界面还可以选择查看其它城市天气预报:

图6-7 添加其他城市及壁纸自动更换功能

8)壁纸功能:

由上面合肥和北京两地的北京图片可知,当天气有不同时,背景会随着天气的不同而出现自发的改变。

9)widget桌面小部件,点击widget小部件会直接进入天气显示界面

图6-8 widget界面

结 论

本文针对上述问题展开研究,完成了基于Android手机的天气预报的系统设计与实现,其功能基本符合用户的需求,能够实现各个模块的设计要求。

本设计使用Android设计技术开发了一种运用在Android系统上的手机天气预报软件系统,本系统通过选择城市来获得天气,风向,温度等信息。基于手机的天气预报系统软件可以使用户对于各地的天气情况的实时掌握,极大的方便了用户的出行和行程安排,避免了不必要的麻烦,具有很强的实用性。

本论文首先进行了大致的进行了项目的背景介绍,开发的目的及意义,接着进行了系统分析(包括需求分析、研究目标和内容),进而深度分析了Android系统的框架,然后介绍了本系统的所用到的各种技术以及如何进行Android平台的搭建,最后论述了本系统的详细设计(包括功能模块设计、数据库设计等),接着进行了项目的测试用例分析,最后圆满完成该设计。

在这个过程中,我学会了很多知识,比如Android环境的搭建、Intent、Activity、Service、ContentProvider、SQLite等,但我学会的最重要的一点是,利用现有的资源去解决问题,在图书馆、在网络上寻找答案。

本次毕业设计可以说是圆满完成,但是该软件还是有一点的瑕疵,受到天气接口的影响,目前只能调用国家气象局的免费天气预报接口,然而在该接口传过来的明后天的信息中,天气图标的信息传递的不准确,导致系统运行时会出现明后天天气小图标出现显示紊乱的现象,同时在2G网络下该接口也会出现异常,未来希望可以寻找到更好的接口,使程序能够得到完美的运行。

参考文献

[1] 靳岩,姚尚朗.GOOGLE Android开发入门与实战[M].北京:人民邮电出版社,2010.

[2] 马超,孙仁贵.Android应用开发全程实录[M].北京:人民邮电出版社,2011.

[3] 柯元旦.Android内核剖析[M].北京:电子工业出版社,2011.

[4] 杨丰成.Android开发揭秘[M].北京:机械工业出版社,2010.

[5] 李宁.Android开发完全讲义(第2版)[M].北京:中国水利水电出版社,2012.

[6] 邓凡平.深入理解Android[M].北京:机械工业出版社,2011.

[7] 哈希尔.精通Android3[M].北京:人民邮电出版社,2011.

[8] 李宁.Android移植与调试[M].北京:机械工业出版社社,2011.

[9] 吴亚峰.Android开发设计[N]:计算机报,2011.3.

[10] 郝玉龙.Android开发讲议[J]:清华学报,2011.6.

[11] 杨海波.Android手机系统讲座[J]:电脑报,2011.6.

致 谢

随着毕业日子的到来,毕业设计也接近了尾声。经过半年多的奋战我的毕业设计终于完成了。在没有做毕业设计以前觉得毕业设计只是对这几年来所学知识的单纯总结,但是通过这次做毕业设计发现自己的看法有点太片面。毕业设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。通过这次毕业设计使我明白了自己原来知识还比较欠缺。自己要学习的东西还太多,通过这次毕业设计,我才明白学习是一个长期积累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。

在这次毕业设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同学。

总之,不管学会的还是学不会的的确觉得困难比较多,真是万事开头难,不知道如何入手。最后终于做完了有种如释重负的感觉。此外,还得出一个结论:知识必须通过应用才能实现其价值!有些东西以为学会了,但真正到用的时候才发现是两回事,所以我认为只有到真正会用的时候才是真的学会了。

在此要感谢我的指导老师对我悉心的指导,感谢老师给我的帮助。在设计过程中,我通过查阅大量有关资料,与同学交流经验和自学以及向一些在android方面比较厉害的同学朋友请教以及上网查资料等方式,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。在整个设计中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。而且大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。虽然这个设计做的也不太好,但是在设计过程中所学到的东西是这次毕业设计的最大收获和财富,使我终身受益。

合肥学院

2013届 毕 业 论 文(设 计)

论文(设计)题目

院系名称

专业(班级)

姓名(学号)

基于Android的手机天气预 报系统 计算机科学与技术系 计算机科学与技术 2009级本科3班 丁同飞 (0904013004) 屠 菁 袁 暋 2013-06-02 导负成教责时师 人 间

基于Android的手机天气预报系统

中 文 摘 要

天气预报为人们了解天气状况和出行安排带来了方便,但是,大多数天气预报软件都是基于PC端,查询起来并不是很便捷。而随着智能手机的普及和3G技术的发展,手机端实现天气查询成为了可能,因此,实现手机端的天气预报系统成为了人们迫切需要且切实可行的需求。

本设计使用Android设计技术开发了一种运用在Android系统上的手机天气预报软件系统,本系统通过选择城市来获得天气,风向,温度等信息。基于手机的天气预报系统软件可以使用户对于各地的天气情况的实时掌握,极大的方便了用户的出行和行程安排,避免了不必要的麻烦,具有很强的实用性。

本论文首先进行了项目的背景介绍,开发的目的及意义,接着进行系统分析(包括需求分析、研究目标和内容),接着分析了Android系统的框架,然后介绍了本系统的用到的技术以及平台的搭建,最后论述了本系统的详细设计(包括功能模块设计、数据库设计等),接着进行了项目的测试用例分析,最后给出了结论以及展望。

关键词:天气预报;Android;linux内核

Based on the Android of mobile phone weather forecast system

ABSTRACT

Weather Forecast for people to understand weather conditions and travel arrangements to bring the convenience, however, most weather forecasts are based on the PC side software, check it is not very convenient. With the popularity of smart phones and 3G technology, mobile client queries become possible to achieve weather, therefore, realize the phone side of weather forecasting system has become an urgent need for people with practical needs.

This design uses design techniques developed an Android application in the Android system mobile weather software system, the system by selecting the city to get weather, wind direction, temperature and other information. Phone-based weather forecasting system software allows users around the weather conditions for real-time control, which greatly facilitates the user's travel and travel arrangements, to avoid unnecessary trouble, and highly practical.

This paper first introduces the background for the project, the development of purpose and meaning, followed by systems analysis (including needs analysis, research objectives and content), and then analyzes the framework of the Android system, then introduces the technology used in this system as well as platform structures, and finally discusses the detailed design of the system (including functional module design, database design, etc.), followed by analysis of the project's test cases, and finally gives the conclusion and outlook.

Keyword: android;the Linux kernel;the weather forecast

目 录

中文摘要 ...................................................................... I ABSTRACT ..................................................................... II 目 录 .................................................................... III

第一章 绪论 ................................................................... 1

1.1引言 ................................................................... 1

1.2系统开发的背景介绍 ..................................................... 1

1.3系统开发的目的 ......................................................... 2

1.4项目开发的意义 ......................................................... 2

第二章 系统分析 ............................................................... 3

2.1研究目标 ............................................................... 3

2.2需求分析 ............................................................... 3

2.3系统研究内容 ........................................................... 4

2.4项目需求分析 ........................................................... 4

第三章 系统架构分析 ........................................................... 5

3.1 Android系统的特点 ..................................................... 5

3.2 Android的功能 ......................................................... 5

3.3 Android架构 ........................................................... 6

3.3.1 Linux Kernel ..................................................... 7

3.3.2 Android Runtime .................................................. 7

3.3.3 Library .......................................................... 8

3.3.4 Application Framework ............................................ 8

3.3.5 Application ...................................................... 8

3.4系统组件 ............................................................... 9

3.4.1 Activity ......................................................... 9

3.4.2 Service .......................................................... 9

3.4.3 BroadcastReceiver ................................................ 9

3.4.4 Content Provider ................................................ 10

第四章 系统开发及其相关技术 .................................................. 11

4.1 Android开发环境介绍 .................................................. 11

4.2 Android开发平台搭建 .................................................. 11

4.3 SQlite ................................................................ 12

4.3.1 SQlite简介 ...................................................... 12

4.3.2 SQlite特性 ...................................................... 12

4.3.3 SQlite功能 ...................................................... 13

4.3.4 SQlite类型 ...................................................... 13

第五章 系统的设计与实现 ...................................................... 14

5.1技术支持 .............................................................. 14

5.2数据库的设计 .......................................................... 15

5.3主要模块 .............................................................. 16

5.3.1项目功能界面 ..................................................... 16

5.3.2项目框架 ......................................................... 17

5.4主要代码解析 .......................................................... 18

第六章 系统测试与运行 ........................................................ 27

6.1系统功能界面 .......................................................... 27

结 论 ..................................................................... 31

参考文献 ..................................................................... 32

致 谢 ..................................................................... 33

第一章 绪 论

1.1引言

手机是已经成为了生活中不可少的通信设备,没有手机有时会让人觉得寸步难行,手机将脱离传统的打电话,发短信等基本功能,而基于智能手机的处理能力和可扩展能力,基于3G网络高速数据传输,越来越多的功能和业务将被开发出来并大规模的应用。正基于此,当全世界的目光聚集在此的时候,Google于2007年11月5日宣布推出基于linux平台的开源手机操作系统,号称首个为移动终端打造的真正开发和完整的移动软析------android[1]。

现有的3G技术和移动互联网技术的快速发展,智能手机功能的不断增强,让基于Android平台的查询需求越来越多。

本软件就是利用现有的网络快速获取网络上的天气信息并显示到手机终端上,为用户提供实时的天气查询和近期天气查询服务,为工作、出行等带来便利。

1.2系统开发的背景介绍

Android是基于Linux内核的软件平台和操作系统,早期由Google开发,后由开放手机联盟(Open handset Alliance)开发。它采用了软件层(Software stack)的构架,主要分为三个部分。底层以Linux为内核作为基础,由C语言开发,只提供基础功能,中间层次包话函数库和虚拟机,由C++开发。最上层是各种应用软件,包话通话程序,短信程序。应用软件由各公司自行开发,以JAVA编写[2]。

Android这个平台对于Google对于大众的意义不在于手机本身,Android存在的目的也不在于挑起手机操作系统之间的混战,而在于推动移动互联网产业链的迅速成型。

以Google,苹果和诺基亚为中心各自形成的生态链将以原来数倍的速度推动移动互联网的发展,这正是Google发布Android平台的意义,也是Android平台存在的使命所在,而作为Android平台成员之一的中国移动也投资成立了一家通讯公司,专门从事Google手机平台上添加飞信,输入法等一系列符合国内用户使用特色的功能。国内众多个业也将目光投入了Android上面,并启动了相关的计划来深入地理解并发展Android。更多的手机软件开发企业已经或者筹备着将公司进行转型,从其主向的开发转向到Android的开发。

基于此,我们有必要通过进行相关的研究来了解Android平台,来了解开发Android的那一大批人的先进的理念和思想,并通过这些来了解手机软件行业,进而了解未来移动互联网的发展趋势,从而更好的适应时代的需要。

1.3系统开发的目的

在科技日益发达的今天,社会竞争越来越激烈,这要求人们不断的摄取信息,同时手机发展到现在已经成为广大人民群众的日常使用的通读工具,手机的功能也日趋完善。我国的通读移动通讯功能同样得到了很大的提高。手机软件可以安装在手机上的软件,完善原始系统的不足与个性化。随着科技的发展,现在手机的功能也越来越多,越来越强大。经济发展和社会进步,人们的出行更加频繁,对于天气的关注更加强烈,基于这种原因我们开发了一种运用在Android系统上的手机天气预报软件系统,本系统通过选择城市来获得天气,风向,风向,温度等信息。基于手机的天气预报系统软件可以使用户对于各地的天气情况的实时掌握,极大的方便了用户的出行和行程安排,避免了不必要的麻烦。本次设计在Android手机系统可以准确预测包括:时间,温度,风向等,并显示在手机界面上,方便准确地了解天气信息。

1.4项目开发的意义

Android平台3G手机气象软件的开发可以进一步扩大气象信息的覆盖面,让广大公众能够在第一时间方便且快捷地获取最新的气象预报(预警)信息,以便提前预防,把气象灾害造成的损失降到最低。同时也可以强化气象公共服务的职能,完善公共服务体系、改善公共服务手段、增加公共服务产品、提高公共服务质量,更好地发挥了气象事业对经济社会发展的现实性作用。

第二章 系统分析

2.1研究目标

1)了解Android应用程序的设计和开发过程;

2)使用多种组件进行Android 平台的手机气象软件的开发。

本软件是基于Eclipse的开发环境,依托国家气象局提供的气象数据接口建立气象信息数据库,开发出了针对Android平台的手机天气预报系统。

2.2需求分析

设计完成一个实用稳定的天气预报系统,同时要廉价使其能滿足大部分用户的需求,因此针对上述要本设计应滿足:

1)加载界面

程序开始运行时显示加载界面,此界面是应用程序最先展现的窗口,应尽量保持界面信息简洁。

2)天气显示界面

显示指定城市三天内的天气状况,包括日期、城市名称、温度、风力与当日的建议,用户可通过按菜单键来显示更新当前天气与设置天气显示的界面背景,以及跳转至设置预报城市界面来更换预报城市。

3)预报城市设置

由自动设置预报城市与手动设置两部分组成,自动设置实现GPS定位功能,自动确定当前用户所在地;而手动设置则通过可伸展性下拉列表单击选择系统数据库中预存的城市来进行设置,同时为了方便用户查找,支持以输入框的形式来过滤查询预报城市。当单击选中城市时跳转至天气显示界面,来显示该城市三天内的天气状况;在天气界面用户可通过菜单键选择城市,更新天气与更换背景,第一次运行时自动跳到该界面。

4)Widget桌面小部件

为了方便用户实时了解天气状况,特别添加在Android系统桌面上显示当前天气与时间的小部件,使用户拿起手机第一刻就能了解当前天气与时间的小部件,使用户拿起手机第一刻就能了解天气,同时当用户单机小部件时,自动跳转至天气显示界面,显示三天内的详细

天气。

2.3系统研究内容

1)数据源的选取

2)界面的设计

3)代码的设计

4)程序的测试

5)产品的发布

2.4项目需求分析

根据功能的需求,分析此项目的主要功能应该具有以下几点:

1)系统比较稳定,具有实用性和通用性

2)系统设计界面应尽量美观得体,操作简便明了,便于人们使用

3)可以较好的查询出人们需要查询的有关天气的相关信息,包括天气,风力,温度,建议等等。

4)可以进行对使用者所在城市的定位以及对其他城市的天气查询

5)个性化的widget桌面部件

第三章 系统架构分析

Android是一种以Linux为基础的开放源代码操作系统,主要使用于便携设备。目前尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,最初主要支持手机。2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上。Android的主要竞争对手是苹果公司的iOS以及RIM的Blackberry OS。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2012年2月数据,Android占据全球智能手机操作系统市场52.5%的份额,中国市场占有率为68.4%[3]。

Android是一个移动设备的软件平台,是由Linux+Java构成的开源软件,它提供包括SDK、Key Apps、Middleware、Linux Kernel四个部分在内的全套手机软件方案。它开放了基于Linux内核以上的开发工具,从而保证了内容的可移植性和多样性。Android平台为我们开发应用程序提供了一套很好的框架,我们可以在这个平台的基础上开发不同的应用程序,也可以开发新的组件供应用程序调用[4]。

3.1Android系统的特点

1)开放性。Google与开放性手机联盟合作开发了android,Google通过与动行商,通过与运营商,设备制造商,开发商和其他有关各方结成深层次的合作伙伴关系,希望借助建立标准化,开放式的移动电话软件平台,在移动产业内形成一个开放式生态系统。

2)应用程序无界限。Android上的应用可以通过标准API访问核心移动设备功能。通过互联网,应用程序可以声明它们的功能可提供其它应用程序使用。

3)应用程序是在平等的条件下创建的,移动设备上的应用程序可以被替换或扩展,即使是拨号或主屏幕这样的核心组件。

4)应用程序可以轻松地嵌入网络。应用程序可以轻松地嵌入HTML,javascript和样式表,还可以通过Webview显示内容。

5)应用程序可以并行运行。Android是一种完整的多任务环境,应用程序可以在其中并行运行,在后台运行时,应用程序可以生成通知引起注意[5]。

3.2Android的功能

1)支持虚拟键盘。虚拟键盘的出现意味着基于Android1.5或以上的版本的移动设备可以同时支持特理键盘和虚拟键盘。

2)使用widget实现桌面的个性化。可以用widget修饰自已的桌面。大多数小的Web应用都是从网络上获得实时数据并展示给用户的,android预装了5个桌机Widget,包括数字时钟,日历,音乐播放器,相框。

3)用在线文件快速浏览数数,类似于OSX Leopard的Quicklook特征,Android的在线文件夹可显示的数据条目,比如联系人,喜欢的应用,E-mail信息,播放列表,书签,RSS源等,并不需要运行系统程序处理特定的数据条目。

4)视频录制和分享。Android还有录制和分享视频的功能,对回放和MPEG-4,3GP等视频也有了更好的支持。可以通过E-mail,MMS或直接上传到youtube等方式来分享视频。

5)更快,更兼容的浏览器,Android的基于Webkit内核的浏览器带来了重要的调速半置,这得益于新的Wenkit渲染引擎和优化的JAVA脚本编译器。

6)Voice search语音搜索。带有语音识别技术的Google手机已于2008年11月面世,它支持语音搜索功能,该功能增强了默认的搜索能力,已超过了纯文本搜索。

7)立体蓝牙和免提电话。除了增强的免提电话体验,Android还支持立体蓝牙(A2Dphe和AVCRP),并有自动配对功能。

8)强大的GPS技术.Android内部提供了大量的GPS组件,我们可以很轻松地获得设备当前的位置等信息,让导航等功能更加完善。

9)Android系统硬件检测,android可自动检测和修复SD卡的文件系统,允许第三方应用显示Android系统的硬件特征,为了让用户下载到与自已的设备匹配的应用,我们可以检测用户设备的硬件信息,让满足应用要求的设备安装该程序,当更多的android设备建立在不同的硬件上时,这个功能显得很实用[6]。

3.3Android架构

Android的系统架构和其它操作系统一样,采用了分层的架构。android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。

图3-1 Android架构

Android是以Linux为核心的手机操作平台,作为一款开放式的操作系统,随着Android的快速发展,如今已允许开发者使用多种编程语言来开发Android应用程序,而不再是以前只能使用Java开发Android应用程序的单一局面,因而受到众多开发者的欢迎,成为真正意义上的开放式操作系统[7]。

3.3.1Linux Kernel Android基于Linux 2.6提供核心系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。 如果你学过计算机网络知道OSI/RM,就会知道分层的好处就是使用下层提供的服务而为上层提供统一的服务,屏蔽本层及以下层的差异,当本层及以下层发生了变化不会影响到上层。也就是说各层各尽其职,各层提供固定的SAP(ServiceAccess Point),专业点可以说是高内聚、低耦合。如果你只是做应用开发,就不需要深入了解Linux Kernel层。

3.3.2Android Runtime

Android包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。每一个Android应用程序是Dalvik虚拟机中的实例,运行在他们自己的进程中。Dalvik虚拟机设计成,在一个设备可以高效地运行多个虚拟机。Dalvik虚拟机可执行文件格式是.dex,dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。 大多数虚拟机包括JVM都是基于栈的,而Dalvik虚拟机则是基于寄存器的。两种架构各有优劣,一

般而言,基于栈的机器需要更多指令,而基于寄存器的机器指令更大。dx 是一套工具,可以将 Java .class 转换成 .dex 格式。一个dex文件通常会有多个.class。由于dex有时必须进行最佳化,会使文件大小增加1-4倍,以ODEX结尾。 Dalvik虚拟机依赖于Linux 内核提供基本功能,如线程和底层内存管理。

3.3.3Library Android包含一个C/C++库的集合,供Android系统的各个组件使用。这些功能通过Android的应用程序框架(application framework)暴露给开发者。下面列出一些核心库:系统C库——标准C系统库(libc)的BSD衍生,调整为基于嵌入式Linux设备媒体库——基于PacketVideo的OpenCORE。这些库支持播放和录制许多流行的音频和视频格式,以及静态图像文件,包括MPEG4、 H.264、MP3、 AAC、AMR、JPG、 PNG界面管理——管理访问显示子系统和无缝组合多个应用程序的二维和三维图形层LibWebCore——新式的Web浏览器引擎,驱动Android 浏览器和内嵌的web视图SGL——基本的2D图形引擎3D库——基于OpenGL ES 1.0 APIs的实现。库使用硬件3D加速或包含高度优化的3D软件光栅FreeType——位图和矢量字体渲染SQLite——所有应用程序都可以使用的强大而轻量级的关系数据库引擎。

3.3.4Application Framework

通过提供开放的开发平台,Android使开发者能够编制极其丰富和新颖的应用程序。开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等等,很多很多。 开发者可以完全使用核心应用程序所使用的框架APIs。应用程序的体系结构旨在简化组件的重用,任何应用程序都能发布他的功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。这一机制允许用户替换组件。 所有的应用程序其实是一组服务和系统,包括:视图(View)——丰富的、可扩展的视图集合,可用于构建一个应用程序。包括包括列表、网格、文本框、按钮,甚至是内嵌的网页浏览器内容提供者(Content Providers)——使应用程序能访问其他应用程序(如通讯录)的数据,或共享自己的数据资源管理器(Resource Manager)——提供访问非代码资源,如本地化字符串、图形和布局文件通知管理器(Notification Manager)——使所有的应用程序能够在状态栏显示自定义警告活动管理器(Activity Manager)——管理应用程序生命周期,提供通用的导航回退功能。

3.3.5Application

Android装配一个核心应用程序集合,包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人和其他设置。所有应用程序都是用Java编程语言写的。更加丰富的应用程序有待我们去开发! 从上面我们知道Android的架构是分层的,非常清晰,分工很明确。Android本身是一套软件堆叠(Software Stack),或称为「软件叠层架构」,叠层主要分成三层:操作系

统、中间件、应用程序。从上面我们也看到了开源的力量,一个个熟悉的开源软件在这里贡献了自己的一份力量。

3.4系统组件

Android开发四大组件分别是:活动(Activity): 用于表现功能。服务(Service): 后台运行服务,不提供界面呈现。广播接收器(BroadcastReceiver):用于接收广播。内容提供商(Content Provider): 支持在多个应用中存储和读取数据,相当于数据库[8]。

3.4.1Activity 应用程序的显示层。每一个画面对应于你的应用程序,将会是Activity类的扩展。Activity使用Views去构建UI来显示信息和响应用户的行为。就桌面开发而言,一个Activity相当于一张Form。

一个Activity通常展现为一个可视化的用户界面。例如,一个Activity可能展现为一个用户可以选择的菜单项列表或者展现一些图片以及图片的标题。一个消息服务应用程序可能包含一个显示联系人列表的Activity,一个编写信息的Activity,以及其它一些查看信息和修改应用程序设置的Activity。虽然这些Activity一起工作,共同组成了一个应用程序,但每一个Activity都是相对独立的。每一个Activity都是Activity(android.app.Activity)的子类。

3.4.2Service Android应用程序中不可见的“工人”。 Service组件运行时不可见,但它负责更新的数据源和可见的Activity,以及触发通知。它们常用来执行一些需要持续运行的处理,当你的 Activity已经不处于激活状态或不可见。

Service没有用户界面,但它会在后台一直运行。例如,Service可能在用户处理其它事情的时候播放背景音乐,或者从网络上获取数据,或者执行一些运算,并把运算结构提供给Activity展示给用户。每个Service都扩展自类Serivce。

应用程序可以连接到一个正在运行中的Service。当连接到一个Service后,可以使用这个Service向外暴露的接口与这个Service进行通信。对于上面提到的播放音乐的Service,这个接口可能允许用户暂停,停止或重新播放音乐。

与activity以及其它组件一样,Service同样运行在应用程序进程的主线程中。所以它们不能阻塞其它组件或用户界面,通常需要为这些Service派生一个线程执行耗时的任务。

3.4.3BroadcastReceiver

Intent广播的“消费者”。通过创建和注册一个Broadcast Receiver,应用程序可以监听符合

特定条件的广播的Intent。Broadcast Receiver 会自动的启动你的Android应用程序去响应新来的Intent。Broadcast Receiver是事件驱动程序的理想手段。

Broadcase Receiver不执行任何任务,仅仅是接受并响应广播通知的一类组件。大部分广播通知是由系统产生的,例如改变时区,电池电量低,用户选择了一幅图片或者用户改变了语言首选项。应用程序同样也可以发送广播通知,例如通知其他应用程序某些数据已经被下载到设备上可以使用。

3.4.4Content Provider 提供共享的数据存储。Content Provider(内容提供器)用来管理和共享应用程序的数据库。在应用程序间,Content Provider是共享数据的首选方式。这意味着,你可以配置自己的Content Provider去存取其他的应用程序或者通过其他应用程序暴露的Content Provider去存取它们的数据。Android设备本身包含了几个Content Provider来访问像联系人信息等有用的数据库。

应用程序可以通过Content Provider访问其它应用程序的一些私有数据,这是Android提供的一种标准的共享数据的机制。共享的数据可以是存储在文件系统中、SQLite 数据库中或其它的一些媒体中。Content Provider扩展自ContentProvider类,通过实现此类的一组标准的接口可以使其它应用程序存取由它控制的数据。然而应用程序并不会直接调用ContentProvider中的方法,而是通过类ContentResolver。ContentResolver能够与任何一个 ContentProvider通信,它与ContentProvider合作管理进程间的通信。

第四章 系统开发及其相关技术

4.1Android开发环境介绍

Android的上层应用程序是用Java语言开发,同时还需要基于Dalvik虚拟机,所以,Google公司推荐使用主流的Java继承开发环境Eclipse。只有Eclipse还不够,因为是使用Java语言进行开发,还应该有由SUN公司提供的Java SDK(其中包括JRE:Java Runtime Environment)。此外,Android的应用程序开发和Java开发有较大区别的,所以还需要有Google提供的Android SDK。同时,还需要在Eclipse安装ADT,为Android开发提供开发工具的升级或者变更,是Eclipse下开发工具的升级下载的工具。

简言之,需要以下软件,才能搭建Android开发环境,从而进行Android应用程序的开发。

1)Java SDK

2)Eclipse

3)Android SDK

4)ADT

日前,Google Android Studio 1.0 开发环境的推出,无疑给Android软件开发带来了极大的便捷。

4.2Android开发平台搭建

Android开发平台搭建步骤:

1)首先到http://www.eclipse.org/downloads/下载Eclipse集成开发环境并且解压,这里推荐下载Java EE 集成版本,可以为平台的搭建省下不少工作。接着再去http://java.sun.com/javase/downloads/index.jsp

下载工序就结束了。

2)双击Eclipse解压后目录中的eclipse.exe然后启动,选择Eclipse菜单中的Help-> Install New Software-> 选项卡上的Available Software,点击右侧的“Add”输入http://dl-ssl.google.com/android/eclipse/后确定,然后在“Work with”下拉菜单中选择刚才输入的网址。过一会就会出现一个Developer Tools选项,勾上以后点击Next以后Eclipse会自动

站点下载http://dl.google.com/android/android-sdk-windows-1.5_r1.zip,Android SDK1.5后解压。第一步

网上查找Android 开发工具插件,然后找到Android DDMS和Android Development Tools,选中这两个点击Finish,Eclipse就会自动下载并安装Android插件了,最后会提示重启Eclipse。

3)重启后选择Eclipse菜单中的Windows-> Preferences 在左侧的Android项目中SDK Location中填入Android SDK解压后的目录,然后点击Apply。

4)在WindowsXP的系统变量中的path变量中添加一个值,该值指向解压后的Android SDK目录下的tools文件夹。

4.3SQlite

4.3.1SQlite简介

SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至今已经有12个年头,SQLite也迎来了一个版本 SQLite 3已经发布。

不像常见的客户-服务器范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的[9]。

4.3.2SQlite特性 1)比一些流行的数据库在大部分普通数据库操作要快

2)简单, 轻松的API

3)包含TCL绑定, 同时通过Wrapper支持其他语言的绑定

4)良好注释的源代码, 并且有着90%以上的测试覆盖率

5)独立: 没有额外依赖

6)Source完全的Open, 你可以用于任何用途, 包括出售它

7)支持多种开发语言,C, PHP, Perl, Java, C#,Python, Ruby

4.3.3SQlite功能 SQLite虽然很小巧,但是支持的SQL语句不会逊色于其他开源数据库,它支持的SQL包括:

ATTACH DATABASE

BEGIN TRANSACTION

COMMENT

COMMIT TRANSACTION 等等。

同时它还支持事务处理功能等等。也有人说它象Microsoft的Access,有时候真的觉得有点象,但是事实上它们区别很大。比如SQLite 支持跨平台,操作简单,能够使用很多语言直接创建数据库,而不象Access一样需要Office的支持。如果你是个很小型的应用,或者你想做嵌入式开发,没有合适的数据库系统,那么你可以考虑使用SQLite。目前它的最新版本是

3.7.8 。它的官方网站是:http://www.sqlite. org或者http://www.sqlite .com .cn,能在上面获得源代码和文档。同时因为数据库结构简单,系统源代码也不是很多,也适合想研究数据库系统开发的专业人士[10]。

4.3.4SQlite类型

SQLite的数据类型,首先你会接触到一个让你惊讶的名词: Typelessness(无类型)。 对! SQLite是无类型的. 这意味着你可以保存任何类型的数据到你所想要保存的任何表的任何列中, 无论这列声明的数据类型是什么(只有在一种情况下不是, 稍后解释)。 对于SQLite来说对字段不指定类型是完全有效的。如:

Create Table ex1(a, b, c);

诚然SQLite允许忽略数据类型, 但是仍然建议在你的Create Table语句中指定数据类型。 因为数据类型对于你和其他的程序员交流, 或者你准备换掉你的数据库引擎时能起到一个提示或帮助的作用[11]。

第五章 系统的设计与实现

5.1技术支持

本软件是基于andriod的手机天气预报系统。

1)首先天气预报功能是调用国家气象局的免费接口: 本软件使用到的中国国家气象局天气预报接口总共有两个:

http://www.weather.com.cn/data/sk/101010100.html

http://m.weather.com.cn/data/101010100.html

上面url中的101010100是城市代码,这里是北京的城市代码。只需要改变城市代码,就可以得到所在城市的天气信息。

在浏览器上输入url:http://m.weather.com.cn/data/sk/101010100.html得到信息,天气信息是json的数据格式。

第一个接口主要是获取当天天气的具体信息,实时温度信息。

第二个接口主要是获取当天及未来几天的粗略天气信息。

2)json数据解析:

JavaScript Object Notation,但是独立于语言。类似XML,可以用来文本信息的存储和交换,是数据的载体。从天气预报接口获得天气信息时需要对天气进行解析,解析出自己需要的天气信息。 3)定位功能:本软件采用的是百度地图定位

因为google在中国服务不稳定,使用google API获取地理信息在某些型号手机上无法实现,因此使用百度SDK定位功能,调用百度类库实现定位,百度定位SDK所需文件:locSDK_3.3.jar, liblocSDK3.so 。

4)widget桌面部件:

AppWidget 框架类:

1、AppWidgetProvider :继承自 BroadcastRecevier , 在AppWidget 应用 update、enable、

disable 和 delete 时接收通知。其中,onUpdate、onReceive 是最常用到的方法,它们接收更新通知。

2、AppWidgetProvderInfo:描述 AppWidget 的大小、更新频率和初始界面等信息,以XML 文件形式存在于应用的 res/xml/目录下。

3、AppWidgetManger :负责管理 AppWidget ,向 AppwidgetProvider 发送通知。

4、RemoteViews :一个可以在其他应用进程中运行的类,向 AppWidgetProvider 发送通知。

5)android -support-v4.jar

这个是android界面特殊效果的第三方的jar包。

5.2数据库的设计

本软件选择SQlite数据库作为数据存储的载体,建立数据库all_city.db,此数据库记录了所有城市的信息和查询代码,在查询指定城市的天气时,需要用到它提供的城市码,而城市码相对稳定不变,所以在构建系统时将其事先复制到手机的存储设备中,以备日后查询。其中存在两个表:Provice和city,Provice包括provice.id和provice.name,City包括city.id和city.name,并且provice和city形成级联关系。

在进行初始化数据库时还建立了订阅城市表TB_CITY。

表5-1 订阅城市表

字段名

FIELD_CITY_ID

FIELD_CITY_NAME

FIELD_WEATHER1

FIELD_TIME1

FIELD_WEATHER_IMG1

FIELD_REALTIME_TEMP

FIELD_TEMPERATURE1

FIELD_WIND

FIELD_ADVICE

FIELD_TIME2

... 类型 INTEGER TEXT TEXT TEXT INTEGER TEXT TEXT TEXT TEXT TEXT ... 描述 Primary Key 城市名 当天天气 当天时间 当天天气图标 当天实时气温 当天气温 当天风力 建议 明天天气 ...

数据库相关操作:

1)插入

5.3主要模块

5.3.1项目功能界面

图5-1 功能模块图

5.3.2项目框架

本项目主要框架如下:

图5-2 项目框架图

其中各文件的功能是:

Constant 是一些常量定义的地方。

WeatherApplication 是一个android应用启动最先启动的地方,在这里进行全局变量初始化 打开数据库等操作,AllCityActivity 是所有城市选择列表界面,CitymanageActivity 是显示当前你的订阅的城市,LaunchActivity 是启动画面,MainActivity 是天气显示界面,主界面。

DBHelper 是数据库建表操作,DBManager 是对数据库增删改查操作。

City 是城市类,MyCity 是订阅城市类,Province 是省关联到City 省、市形成级联

UpdateReceive 接受更新命令的广播,UpdateService 是更新服务,所有的更新请求服务器操作,接受返回信息。

Widget 是桌面小控件控制。

HttpConnect 是http请求操作工具类。

MyLog 是打印日志工具类。

MyThreadPool 是线程池工具类。

ImageUtil 是图片选择工具类,NetworkUtil 是检测手机网络工具类,StreamUtil 是转换Http数据流工具类。

ServerResponseException 是自定义的一个异常 当远程服务器响应出现问题时,抛出此异常。

5.4主要代码解析

5.4.1启动界面

在启动界面,当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发,如果此时需要一个耗时的操作,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象,如果5秒钟还没有完成的话,会收到Android系统的一个错误提示 "强制关闭".这个时候我们需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,Android主线程是线程不安全的,也就是说,更新UI只能在主线程中更新,子线程中操作是危险的. 这个时候,Handler就出现了.来解决这个复杂的问题,由于Handler运行在主线程中(UI线程中),它与子线程可以通过Message对象来传递数据, 这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包含数据),把这些消息放入主线程队列中,配合主线程进行更新

进入启动界面后,可定义2秒后跳转至天气显示界面:

5.4.2天气显示界面文件WeatherApplication.java

该文件中是一个android应用最先启动的地方,在这里进行全局变量初始化,打开数据库等操作。

初始化应用:

设置一个定时更新的提醒:

打开数据库操作:

5.4.3当前订阅城市界面 CityManageActivity.java

在该界面主要是显示当前你所订阅的城市,在该界面用了一个Adapter适配器来进行下拉菜单的操作:

同时在该界面还添加了一个长按菜单,当你想要删除你所订阅的城市时,长按,会出现是否删除对话框:

5.4.4定位功能

当你第一次运行该程序时,进行定位功能时,会出现你当前所在的城市,并且会出现是否添加对话框,定位时调用百度地图定位的类库:

进行定位时,打印log信息,获取省份和城市信息:

5.4.5菜单项的操作

对菜单进行选择操作,通过选择不同的菜单进入不同的功能界面:

5.4.6更新操作

接受到更新操作的信息后才能进行更新操作,通过startService来开启更新服务,更新操作时通过myThreadPool = MyThreadPool.getInstance()来开启线程,通过httpConnect = HttpConnect.getInstance()进行连接。

通过更新操作获取实时的天气信息:

5.4.7widget功能

由于widget中的时钟关系,需要对widget显示进行时刻的更新用来保持与系统中时间的一致。实现这个功能需要用到AlarmManager类,这个类专门用来设定在某个指定的时间去完成指定的事件。设计思路是在Widget的onUpdate方法中启动一个自定义更新后台服务,更新widget,并设定下一分钟再次调用此服务。

5.4.8http请求操作

由于本设计是实时天气预报系统,因此需要联网,所以要进行http连接,先进行http请求通过HttpClient接口实现:

5.4.9检测手机网络

在android手机上运行时需要保持手机网络通畅,因此需要检测手机网络:

5.4.10线程池ThreadPool

通过运用线程池可以实现程序高效的运行:

第六章 系统测试与运行

6.1系统功能界面

1)加载界面:

本天气预报为掌上天气,当运行该程序时,会先进入一个加载界面:

图6-1 加载界面

2)进入天气界面时,因为是第一次进入,所以未设定城市,该界面是:

图6-2 初始化界面

3)当要选择查询天气时,可以点击菜单按钮,会出现三个菜单:

图6-3 显示菜单项

4)点击进入城市管理界面,在城市管理界面是一个下拉列表,每一个省会下又有自己对应的下拉列表:

图6-4 城市管理界面

5)定位功能,上图城市列表中有一个水滴图标,点击该按钮可实现定位:

图6-5 定位功能并添加城市

6)点击添加后,进入天气显示界面:

图6-6 天气显示界面

7)在该界面还可以选择查看其它城市天气预报:

图6-7 添加其他城市及壁纸自动更换功能

8)壁纸功能:

由上面合肥和北京两地的北京图片可知,当天气有不同时,背景会随着天气的不同而出现自发的改变。

9)widget桌面小部件,点击widget小部件会直接进入天气显示界面

图6-8 widget界面

结 论

本文针对上述问题展开研究,完成了基于Android手机的天气预报的系统设计与实现,其功能基本符合用户的需求,能够实现各个模块的设计要求。

本设计使用Android设计技术开发了一种运用在Android系统上的手机天气预报软件系统,本系统通过选择城市来获得天气,风向,温度等信息。基于手机的天气预报系统软件可以使用户对于各地的天气情况的实时掌握,极大的方便了用户的出行和行程安排,避免了不必要的麻烦,具有很强的实用性。

本论文首先进行了大致的进行了项目的背景介绍,开发的目的及意义,接着进行了系统分析(包括需求分析、研究目标和内容),进而深度分析了Android系统的框架,然后介绍了本系统的所用到的各种技术以及如何进行Android平台的搭建,最后论述了本系统的详细设计(包括功能模块设计、数据库设计等),接着进行了项目的测试用例分析,最后圆满完成该设计。

在这个过程中,我学会了很多知识,比如Android环境的搭建、Intent、Activity、Service、ContentProvider、SQLite等,但我学会的最重要的一点是,利用现有的资源去解决问题,在图书馆、在网络上寻找答案。

本次毕业设计可以说是圆满完成,但是该软件还是有一点的瑕疵,受到天气接口的影响,目前只能调用国家气象局的免费天气预报接口,然而在该接口传过来的明后天的信息中,天气图标的信息传递的不准确,导致系统运行时会出现明后天天气小图标出现显示紊乱的现象,同时在2G网络下该接口也会出现异常,未来希望可以寻找到更好的接口,使程序能够得到完美的运行。

参考文献

[1] 靳岩,姚尚朗.GOOGLE Android开发入门与实战[M].北京:人民邮电出版社,2010.

[2] 马超,孙仁贵.Android应用开发全程实录[M].北京:人民邮电出版社,2011.

[3] 柯元旦.Android内核剖析[M].北京:电子工业出版社,2011.

[4] 杨丰成.Android开发揭秘[M].北京:机械工业出版社,2010.

[5] 李宁.Android开发完全讲义(第2版)[M].北京:中国水利水电出版社,2012.

[6] 邓凡平.深入理解Android[M].北京:机械工业出版社,2011.

[7] 哈希尔.精通Android3[M].北京:人民邮电出版社,2011.

[8] 李宁.Android移植与调试[M].北京:机械工业出版社社,2011.

[9] 吴亚峰.Android开发设计[N]:计算机报,2011.3.

[10] 郝玉龙.Android开发讲议[J]:清华学报,2011.6.

[11] 杨海波.Android手机系统讲座[J]:电脑报,2011.6.

致 谢

随着毕业日子的到来,毕业设计也接近了尾声。经过半年多的奋战我的毕业设计终于完成了。在没有做毕业设计以前觉得毕业设计只是对这几年来所学知识的单纯总结,但是通过这次做毕业设计发现自己的看法有点太片面。毕业设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。通过这次毕业设计使我明白了自己原来知识还比较欠缺。自己要学习的东西还太多,通过这次毕业设计,我才明白学习是一个长期积累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。

在这次毕业设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同学。

总之,不管学会的还是学不会的的确觉得困难比较多,真是万事开头难,不知道如何入手。最后终于做完了有种如释重负的感觉。此外,还得出一个结论:知识必须通过应用才能实现其价值!有些东西以为学会了,但真正到用的时候才发现是两回事,所以我认为只有到真正会用的时候才是真的学会了。

在此要感谢我的指导老师对我悉心的指导,感谢老师给我的帮助。在设计过程中,我通过查阅大量有关资料,与同学交流经验和自学以及向一些在android方面比较厉害的同学朋友请教以及上网查资料等方式,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。在整个设计中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。而且大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。虽然这个设计做的也不太好,但是在设计过程中所学到的东西是这次毕业设计的最大收获和财富,使我终身受益。


相关内容

  • 安卓毕业设计论文
  • 密级: 学士学位论文 THESISOFBACHELOR (2007-2011 年) 题目:基于Android平台的3G气象软件 学专学院:软件学院系业:号:计算机软件计算机软件 姓名:指导教师:起讫日期:南昌大学 学士学位论文原创性申明 本人郑重申明:所呈交的论文是本人在导师的指导下独立进行研究所取 ...

  • Android智能手机天气预报系统设计
  • Android智能手机天气预报系统设计 摘要:在分析讨论Android 应用系统设计原理的基础上,提出了Android 智能手机天气实况预报系统用户界面以及获取并解析城市列表数据的设计方法,给出了在用户界面上呈现列表数据的设计过程,实现了一个简单的Android 智能手机城市天气实况预报系统.系统在 ...

  • Android3G开发平台创新实验室建设方案
  • Android 3G移动智能终端.物联网创新实 验室建设方案 ICES Android平台研发中心 目 录 一.Android 3G行业背景和发展趋势 ............................................ 3 1.1 Android 3G行业背景 ........ ...

  • 基于Android的"诸子百家"APP设计与开发毕业论文
  • 本科生毕业论文(设计) 题目: 基于Android 的"诸子百家"APP 设计与开发 毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果.尽我所知,除文中特别加以标注和致谢的地方外,不 ...

  • Android手机天气预报项目报告
  • 目录 第1章 项目背景 ......................................................... 1 1.1 项目来源 .......................................................... 1 1.2 开发目标 ...

  • 基于Android平台的软件开发关键技术的研究
  • 龙源期刊网 http://www.qikan.com.cn 基于Android 平台的软件开发关键技术的研究 作者:何风琴 于涛 来源:<现代职业教育·高职高专>2015年第02期 [摘 ; ; ; ; ;要] ;随着Android 系统的市场占有率越来越大,预示着智能手机的发展离不开A ...

  • 移动平台-智能聊天机器人
  • 移动平台开发 课题名称:智能聊天机器人 学 院: 专 业: 学 号: 姓 名: 指导老师:赵慧杰 日 期:2014年月 11 目 录 前言................................................................................. ...

  • 基于Android的智能家居终端设计与实现
  • 基于Android 的智能家居终端设计与实现 摘 要: 在深入分析Android 的系统架构及其应用程序组成的基础上,设计和实现了一款基于Android 的智能家居终端.终端主要包括主控制模块.信号处理模块.网络管理模块.媒体流管理模块及信息存取模块等功能模块.较好地融合了Android 与智能家居 ...

  • 透明屏幕手机
  • 1.透明屏幕手机 最近富士通展示了一款概念手机,而它最大的亮点无疑配备了一块全透明触摸屏.该手机设计师透露,用户可以把这款手机的屏幕当成放大镜,在看书的时候可以随时放大想要看的文字,又或者作即时文字翻译,通过这块透明的屏幕看到的东西,可以即时拍摄下来. 其实不久前,富士通也曾展示一款纯透明平板&qu ...