基于android系统的天气预报查询系统设计大学本科毕业论文

基于android系统的天气预报查询系统设计大学本科毕业论文
基于android系统的天气预报查询系统设计大学本科毕业论文

摘要

近几年来随着3G技术成熟和智能手机的不断普及,移动应用的需求与日俱增,移动应用开发成为当下最热门的技术之一。在Google和Android手机联盟的共同推动下,Android在众多移动应用开发平台中脱颖而出。Android是一个真正意义上的开源智能手机操作系统,该系统一经推出立即受到全球移动设备厂商和开发者的热捧,手机已被赋予了除通话以外的其它许多功能。全新的手机软件领域已逐渐聚焦了众多软件开发商的目光,软件开发者和软件用户将共同面临这个振奋人心的新境界。

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

关键词:天气预报系统;android开发

Abstract

In recent years, with the 3G technology matures and the growing popularity of smart phones, the increasing demand for mobile applications, mobile application development become the most popular technology. Given a friendly boost by Google and Android Handset Alliance, Android stands out in numerous mobile application development platforms. Android is a truly open-source smart phone operating system, which once launched immediately by the global mobile device manufacturers and developers blitz, mobile phones have been given in addition to many other functions outside the phone. The new phone software field has gradually focused the attention of a large number of software developers, software developers and software users will be facing this exciting new realm.

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. Android based software allows users to weather forecasting system for real-time weather conditions around the master, a great convenience to the user's travel and travel arrangements, to avoid unnecessary trouble, and highly practical.

Keywords: Weather forecast system; android development

目录

1. 需求分析 (1)

1.1开发背景 (1)

1.2系统研究内容 (1)

1.3项目需求分析 (1)

2. GOOGLE ANDROID移动平台的相关理论 (1)

2.1G OOGLE ANDROID 移动平台的概述 (1)

2.1.1 Android系统的特点 (2)

2.1.2 Android的功能 (2)

2.2G OOGLE ANDROID移动平台开发过程研究 (2)

2.3G OOGLE ANDROID移动平台下的应用研究 (3)

2.4小结 (3)

3. 项目设计 (4)

3.1项目总体设计 (4)

3.2系统功能界面 (4)

3.2.1 欢迎界面 (4)

3.2.2 设置所在城市界面 (5)

3.2.3 天气显示界面 (6)

3.2.4 Widget桌面小部件界面 (7)

3.3设计目标 (8)

4. 系统设计 (8)

4.1开发及运行环境 (8)

4.2数据库设计 (8)

4.3主要方法及步骤 (8)

4.4主要方法及技术 (9)

5. 主要模块 (9)

5.1项目框架 (9)

5.2主要功能实现 (10)

5.2.1 导入db_weather.db数据库文件 (10)

5.2.2 实现城市列表的创建与过滤 (11)

5.2.3 访问网络得到天气信息 (14)

5.2.4 Widget窗体小部件的更新 (15)

6. 功能测试 (17)

结论 (21)

参考文献 (22)

基于android系统的天气预报查询系统

1. 需求分析

1.1 开发背景

近几年来随着3G技术成熟和智能手机的不断普及,移动应用的需求与日俱增,移动应用开发成为当下最热门的技术之一。手机是已经成为了生活中不可少的通读设备,没有手机有时会让人觉得寸步难行,手机将脱离传统的打电话,发短信等基本功能,而基于智能手机的处理能力和扩展能力,基于3G网络高速数据传输,越来越多的功能和业务将被开发出来并大规模的应用。在Google和Android手机联盟的共同推动下,Android在众多移动应用开发平台中脱颖而出。Android是一个真正意义上的开源智能手机操作系统,该系统一经推出立即受到全球移动设备厂商和开发者的热捧。为顺应潮流,本设计旨在搭载Android的移动设备上运行,实现天气状况的实时动态更新与显示,方便人们的出行与生活。

1.2 系统研究内容

1. 界面的设计

2. 代码的设计

3. 程序的测试

4. 产品的发布

1.3 项目需求分析

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

1. 精确查询全国各地城市未来几天内的实时天气状况

2. 系统要具有实用性,符合用户查看信息习惯,界面设计优美

3. 系统要具有稳定性,且在一定程度上节省流量的开销

2. Google android移动平台的相关理论

2.1 Google android 移动平台的概述

Android 是Google公司于07年11月5日宣布的基于LINUX平台开源手机操作系统,该平台由操作系统,中间件,用户界面和应用软件组成,Android是Google开发的基于Linux平台的开源手机操作系统。它包括操统,用户界面和应用程序----移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍,谷歌与开放手机联盟合作开发了Android,这个联盟由包括中国移动,摩托罗拉,高通,宏达在内的30多家技术和无线应用的领军企业组成。通过与运营商,设备制造商,开发商和其他有关各方结成深层次的合作伙伴关系,希望借助建立标准化,开放式的移动电话软件平台,在移动产业内形成一个开放式生态系统。

2.1.1 Android系统的特点

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

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

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

4.应用程序可以轻松地嵌入网络。应用程序可以轻松地嵌入HTML、JavaScript和样式表,还可以通过Web view显示内容。

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

2.1.2 Android的功能

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

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

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

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

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

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

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

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

9.Android系统硬件检测,android可自动检测和修复SD卡的文件系统,允许第三方应用显示Android系统的硬件特征,为了让用户下载到与自己的设备匹配的应用,我们可以检测用户设备的硬件信息,让满足应用要求的设备安装该程序。

2.2 Google android移动平台开发过程研究

Android移动平台作为21世纪的新秀,受到了越来越多的开发者的钟爱,在这股开

发的浪潮中,逐渐形成了具有Android一套具有Android特色的开发流程。

由于Android的优越性,其开发显得非常的有规律可寻。大致的开发流程如下:需求分析:作为一个软件,它必须有其存在的意义和价值,而这个价值和意义就需要靠需求分析来确定。

功能分析。作为一个手机软件,它的使命就是给用户使用的。如何提供用户最好的用户体验就值得每一个程序员的深思,这也是确保一个程序成功的关键所在。

界面设计:作为一个手机软件,其只能在极有限的区域中显示,如何在有限的空间里更完美的展现出自己的独特之处就显得更为重要了。

测试:在任何一个软件开发行业中,无论是J2EE,J2SE,J2ME等等其他开发中,测试时必不可少的一环,在Android开发中,由于手机的高频率使用,和硬件系统上的不足,使得对软件的要求更加的严格,这就要求在开发完成后,再对其进行严格的测试,而测试又包括了:单元测试,系统测试等方面的测试。

系统开发:作为一个软件的主体部分,系统开发的好坏直接决定了该系统的性能和寿命。

发布:在完成一个系统的开发后,就要对其发布,经过广大用户的考验,只有经过这个过程,才算是一个合格的产品,在Android平台中,Google提供了完整的发布机制------Google market。

2.3 Google android移动平台下的应用研究

Android系统提供给应用开发者本身就是一个框架,所有的应用开发都必须遵守这个框架原则。我们在开发应用时就是在这个框架上进行扩展,下面来看看android这个框架都有些什么功能可供我们使用。

Android.app:提供高层的程序模型和基本的运行环境

Android.content:包含对各种设备上的数据进行访问和发布

Android.database:通过内容提供者浏览的操作数据库

Android.graphics:图形库,包含画布,颜色过滤,点,矩形,可以将它们直接绘制到屏幕上。

Android.location:定位和相关服务的类

https://www.360docs.net/doc/2b6990429.html,: 提供帮助网络访问类,超过通常的https://www.360docs.net/doc/2b6990429.html,*接口。

Android.media: 提供一些类管理多种音频,视频的媒体接口。

Android.os:提供了系统服务,消息转输和IPC机制。

Android.opngl:提供OpenGL的工具。

Android.provider:提供访问Android的内容提供者的类。

Android.telephony:提供与拨打电话相关的API交互。

Android.view提供基础的用户界面接口框架。

Android.util:涉及工具性的方法,例如时间日期的操作。

Addroid.webkit:默认浏览器操作接口。

Android.widget包含各种UI元素在应用程序的布局中使用。

2.4 小结

本章主要通过三个方面:1.Google android移动平台的概述:2. Google android

移动平台开发过程的研究:3. Google android移动平台下的应用研究,概要的介绍了Google android移动平台相关知识,对Google android移动平台有初步的认识和了解,为后面的开发做了坚实的基础。

3. 项目设计

3.1 项目总体设计

本软件是一个App Widget应用程序,启动程序后可以进行城市的设置,可以通过图片和文字显示当前和未来两天的天气状况,包括温度、风向和雨雪情况等。

该软件的基本功能需求有:

1.欢迎界面

系统启动时首先进入欢迎界面;

2.启动App Widget应用程序

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

3.设置所在城市界面

通过可伸展性下拉列表单击选择系统数据库中预存的城市来进行设置,同时为了方便用户查找,支持以输入框的形式来过滤查询预报城市。当单击选中城市时跳转至天气显示界面,来显示该城市当三天内的天气状况;第一次运行时自动跳到该界面。

4.显示天气界面

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

3.2 系统功能界面

3.2.1 欢迎界面

当系统启动时,首先会显示欢迎界面。如图3-1所示:

图3-1 欢迎界面

3.2.2 设置所在城市界面

1.当第一次运行程序时,跳转至城市设置界面进行预报城市的选择,如图3-2所示:

图3-2 设置城市

2.用户可通过输入框过滤查询当前系统中预存的城市,如图3-3所示:

图3-3 过滤框输入选择城市

3.2.3 天气显示界面

1.选择了预报城市后,系统跳转至天气显示界面,显示该城市三天内的实时天气,如图3-4所示:

图3-4 显示天气

2.在天气界面中用户可通过按菜单键来调出菜单,设置城市,更新天气与更换背景,如图3-5所示:

图3-5 调出菜单

3.2.4 Widget桌面小部件界面

方便用户第一时间了解天气动态,添加widget显示功能界面,如图3-6所示:

图3-6 Widget桌面小部件

3.3 设计目标

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

1.系统能及时的反馈指定预报城市的天气情况;

2. 可设置所在城市,自行输入或者列表选择城市;

3.节省流量开销,规定在指定的时间间隔内才更新天气,其它时段显示缓存的天气;

4.操作方便快捷,使用简单,界面设计美观大方,支持widget。

4. 系统设计

4.1 开发及运行环境

1. JDK1.6.0_10

2. Eclipse

3.8

3. Android Development Toolkit (ADT) 21.0.1

4. Android 2.2及以上

5. Windows 7

4.2 数据库设计

由于在本系统中是通过访问中央气象台提供的天气信息得到的天气预报,在查询指定城市的天气时,需要用到它提供的城市码,而城市码相对稳定不变,所以在构建系统时将其事先通过Android的网络访问技术将其缓冲到本地SQLite数据库进行保存起来,方便以后的查询,同时节省了流量开销。综上所述在本地建立db_weather.db的数据库,其中只存在两个表: provinces和citys。citys表中存在city_num用天气的查询,同时还存在外键province_id与provinces表形成1对n的关系。结构如图4-1所示:

图4-1 数据库表结构

4.3 主要方法及步骤

1. 搭建Android开发环境,并建立名为WeatherForecastSystem项目。

2. 在程序第一次运行时,将db_weather.db数据库文件导入到应用程序数据库中。

3. 建立设置城市界面,读取数据库文件,获取省份,城市以及对应的城市码。

4. 接收用户选择的城市码,访问:https://www.360docs.net/doc/2b6990429.html,/data/<城市码>.html

得到天气信息。

5. 解析天气信息,将城市码及天气信息缓冲下来,并为其设置有效时间,方便下次启动时直接得到天气信息,过期则从网上更新。

6. 定时由保存的城市码更新天气信息。

4.4 主要方法及技术

1. Android手机的界面UI设计

2. Android的网络通信

3. Android的广播

4. Widget小部件编程

5. JSON解析

6. SQLite数据库操作

7. Android文件操作

5. 主要模块

5.1 项目框架

在装有ADT插件的Eclipse中新建一个名为WeatherForecastSystem的项目,项目主要文件结构如图5-1所示:

图5-1 WeatherForecastSystem工程的源代码文件结构

为了使源代码文件的结构更加清晰,WeatherForecastSystem工程设置了多个命名空间,分别用来保存用户界面、数据库、后台服务和工具实体的源代码文件。源代码文件的名称以及说明如表5-1所示。

表5-1 WeatherForecastSystem工程的文件用途说明

包名称文件名说明

com.weather.app MainActivity.java “天气显示页面”的Activity com.weather.app WelcomeActivity.java “欢迎页面”的Activity com.weather.app SetCityActivity.java “设置城市页面”的Activity com.weather.app WeatherWidget.java 桌面小部件

com.weather.app UpdateWidgetService.java 后台更新服务

com.weather.adapter MyListAdapter.java 城市列表

com.weather.dao DBHelper.java 数据库操作类

com.weather.utils WebAccessTools.java 网络访问工具类

5.2 主要功能实现

5.2.1 导入db_weather.db数据库文件

public void importInitDatabase() {

//数据库的目录

String dirPath="/data/data/com.weather.app/databases";

File dir = new File (dirPath);

if (!dir.exists()) {

dir.mkdir ();

}

//数据库文件

File dbfile = new File(dir, "db_weather.db");

try {

if(!dbfile.exists()) {

dbfile.createNewFile();

}

//加载欲导入的数据库

InputStream is= this.getApplicationContext().getResources().openRawResource(R.raw.db_weather

);

FileOutputStream fos = new FileOutputStream(dbfile);

byte[] buffere=new byte[is.available()];

is.read(buffere);

fos.write(buffere);

is.close();

fos.close();

}catch(FileNotFoundException e){

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}

}

5.2.2 实现城市列表的创建与过滤

实现城市列表是通过继承android.widget.BaseExpandableListAdapter适配器实现的,其中主要实现它的public View getGroupView()得到列表的一级列表和public void getChildView()得到列表的二级子列表实现的,在这里由于只是实现文本显示功能,故用TextView组件来填充就行了,如果要构造这个自定义的适配器,则只需在提供存放省份直辖市的一级列表的数组String[] groups和存放对应的城镇的二级列表的String[][] childs就行了。

@Override

public View getChildView(int groupPosition, int childPosition,

boolean isLastChild, View convertView, ViewGroup parent) { TextView textView = null;

//这里判断convertView是否为空

if(convertView==null) {

//产生一个TextView组件

textView = getGenericView();

//设置它的文本内容

textView.setText(getChild(groupPosition,childPosition).toString());

} else {

textView = (TextView)convertView;

textView.setText(getChild(groupPosition,childPosition).toString());

}

return textView;

}

@Override

public View getGroupView(int groupPosition, boolean isExpanded,

View convertView, ViewGroup parent) {

TextView textView = null;

if(convertView==null){

textView = getGenericView();

textView.setText(getGroup(groupPosition).toString());

}else {

textView = (TextView)convertView;

textView.setText(getGroup(groupPosition).toString());

}

return textView;

}

private TextView getGenericView() {

https://www.360docs.net/doc/2b6990429.html,youtParams lp = new https://www.360docs.net/doc/2b6990429.html,youtParams(

https://www.360docs.net/doc/2b6990429.html,youtParams.FILL_PARENT, 48);

TextView textView = new TextView(context);

textView.setLayoutParams(lp);

textView.setTextSize(18);

textView.setTextColor(Color.WHITE);

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);

textView.setPadding(32, 0, 0, 0);

return textView;

}

同时为了兼具过滤功能,还需再实现android.widget.Filterable接口,这个接口有一个getFilter()返回Filter过滤器的列表,故还要提供一个Filter过滤类,在本系统中,实现的是一个内部类CityFilter,它继承android.widget.Filter类,覆盖实现了两个方法,一个是performFiltering()得到FilterResults过滤结果对象方法,另一个是根据得到的FilterResults对象更新适配器的publishResults()方法。

其中的performFiltering(CharSequence constraint)方法的实现是通过constraint这个关键字以省份直辖市为单位进行匹配,如果匹配成功,则添加该省份以下的所有城市,如果匹配不成功,则再逐一与这个省份下的城市匹配,则只添加匹配的城市,其中匹配的结果放在Map>values这样的向量中,再由新建的FilterResults封装返回,(具体实现如下):

1. 首先是对关键字进行判断是否为空,如为空则由values添加所有省份与城市,其中的allGroups和allChilds保存的是所有的省份与对应的城市:

//当过滤条件为空时,返回所有的省份与城市

if(constraint == null || constraint.length() == 0) {

for(int i=0; i

ArrayList index = new ArrayList();

//添加所有与之对应的城市

for(int j=0; j

index.add(j);

}

values.put(i, index);

}

}

2. 如果关键字constraint不为空,则以省份为单位进行匹配,省份匹配的添加下

相关文档
最新文档