资源描述
广东XX大学2012届毕业论文 基于Android手机天气预报系统 X同学
广东XX大学 12 届学生
毕业论文/设计
题 目: 手机天气预报系统
姓 名: X同学
系 别: 信息工程院
专 业: 计算机应用技术
班 级: 09应用(1)班
指导老师: X老师
日 期: 2012年4月20日
独 创 性 声 明
本人声明所呈交的毕业论文(设计)是本人在指导教师指导下进行的研究工作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地方外,论文(设计)中不包含其他人已经发表或撰写过的研究成果,也不包含为获得广东科贸职业学院或其他教育机构的证书而使用过的材料。与我一同工作的同志对本论文(设计)所做的任何贡献均已在论文中作了明确的说明并表示谢意。
论文(设计)作者签名:
签字日期: 年 月 日
4
基于Android系统的手机天气预报软件
摘 要
随着智能手机的快速普及,智能手机操作系统市场风生水起。为了让智能手机用户能够随时随地查询互联网所提供的服务,一种高效的办法就是将应用系统的功能拓展到手机终端上,让手机能够通过移动网以及互联网访问Web网站并处理各种各样的业务。因此,智能手机的应用软件及其需要的服务将有广阔的发展前景。
在如今这个智能手机系统群雄纷争的时候,2008年Google推出了一款名为Android的开源智能手机操作系统,它采用Linux内核,开放手机联盟(OHA)成员可以任意使用和修改SDK包,系统的开源性使其具有良好的拓展性。这款软件包括了操作系统、用户界面和应用程序,即智能手机工作所需要的全部软件。Android的最大特点是其开放性体系架构,不仅具有非常好的开发、调试环境,而且还支持各种可扩展的用户体验,包括丰富的图形组件、多媒体支持功能以及强大的浏览器。因此,对于软件从业人员来说,Android平台具有无限的吸引力。
本文就在分析讨论Android手机软件开发技术原理的基础上,开发出能为用户提供更好的基于Android平台的3G手机气象软件。
关键词:Android 手机天气预报软件系统
目 录
基于Android系统的手机天气预报软件 1
第一章 绪论 1
1.1 研究内容 1
1.2 研究意义 1
1.3研究现状和发展趋势 1
第二章 系统分析 3
2.1研究目标 3
2.2 需求分析 3
2.3 性能分析 3
2.4系统研究内容 3
2.5项目需求分析 4
2.6系统构架图 4
第三章 系统开发环境及相关技术 5
3.1 Android开发环境介绍 5
3.2 Android开发平台搭建 5
第四章Google android移动平台的相关理论 7
4.1 Goolge android 移动平台的概述 7
4.1.1 Android系统的特点: 7
4.1.2Android的功能: 7
4.2 Google android移动平台开发过程研究[4] 8
4.3 Google android移动平台下的应用研究[5] 9
4.4小结 9
第五章 掌上手上天气预报系统程序设计 11
5.1 用户界面设计 11
5.2 主要代码介绍 12
5.3 获取城市列表数据 15
5.4解析数据列表 16
5.5主要查询城市天气预报方法 17
第五章 结论 21
致谢: 22
参考文献 23
第一章 绪论
1.1 研究内容
Android平台3G手机气象软件是基于Android手机平台,运用Java语言,从Google上获取天气预报信息,开发出针对使用Android平台的手机天气预报系统。
1.2 研究意义
Android平台3G手机气象软件的开发可以进一步扩大气象信息的覆盖面,让广大公众能够在第一时间方便且快捷地获取最新的气象预报(预警)信息,以便提前预防,把气象灾害造成的损失降到最低。同时也可以强化气象公共服务的职能,完善公共服务体系、改善公共服务手段、增加公共服务产品、提高公共服务质量,更好地发挥了气象事业对经济社会发展的现实性作用。
1.3研究现状和发展趋势[1]
据Gartner最新数据显示,2010年第二、三季度全球智能手机销售继续大幅增长,其中第三季度安卓占全球智能手机市场的25.5%,仅次于塞班,成为第二大智能手机系统。2010第二、三季度与去年同期相比,增度分别是15.4%及22%,增势迅猛。而塞班系统较09年的市场份额,尽管终端销量有大幅度提升,但增势下滑10%,形势非常严峻。其他操作系统的表现则要平稳很多。如图1-1所示各种手机系统的发展趋势。
图1-1各手机系统发展趋势
安卓是首款开源代码的操作系统,采用Linux内核,开放手机联盟(OHA)成员可以任意使用和修改安卓的SDK软件包。系统的开源性使其具有良好的拓展性,一方面,为众多移动应用开发者提供了良好的系统性平台,有利于移动应用的集合;另一方面,终端厂商可以针对自身的特殊需要“定制化开发”。与此相比,尽管2010年2月,塞班基本完成开源工作,但由于代码臃肿,用户界面设计缺失,塞班的开源并无实际意义,错失发展良机。
据Informa预测,2012年,安卓手机销量将超过诺基亚塞班手机,届时安卓将成为全球最大的智能手机平台。谷歌表示目前安卓手机每日平均激活量为20万部,销售速度加速上涨。
我们认为,安卓在全球市场的成长壮大,塞班市场份额不断下跌已成不争事实。安卓操作系统发展迅猛主要得益于免费、开源和良好产业运作策略,这三点为安卓在智能手机市场赢得更多的发展机遇。系统的免费让更多的厂商加入,推动了份额的上升;代码的开源让更多的开发者进入应用开发;应用的丰富吸引了更多用户选择,这也是谷歌值得众多厂商学习的地方。此外,谷歌通过OHA联合众多厂商进行系统研发,不断更新版本,将系统应用推广到更多的终端产品中,确保用户体验持续改善。
广东XX大学2012届毕业论文 基于Android手机天气预报系统 X同学
第二章 系统分析
2.1 研究目标
(1)了解Android应用程序的设计和开发过程;
(2) 使用多种组件进行Android 平台3G手机气象软件的开发。
本软件是基于Eclipse的开发环境,依托Google气象数据建立气象信息数据库,开发出了针对Android平台的手机天气预报系统。
2.2 需求分析
本软件是一个App Widget应用程序,启动程序后可以进行城市、更新频率的设置,可以通过图片和文字显示当前和未来的天气状况,包括温度、湿度、风向和雨雪情况等。这些天气数据是通过后台服务获取的,这个后台服务可以按照一定时间间隔,从Google上获取天气预报信息,并将天气信息保存在数据库中。
从上面的描述中可以基本了解软件的功能需求:
(1) 启动App Widget应用程序;
(2) 设置界面:对要显示天气预报的城市及更新频率进行设置;
(3) 显示界面:通过文字和图片显示当前的天气情况,包括日期、时间、城市、最高温度、最低温度、当前温度等。
(4) 详细界面:通过文字图片动画显示当前的天气情况,包括城市当前天气、温度、风向、风速、湿度;同时显示今后四天的天气情况。
2.3 性能分析
程序响应速度快、安全性高、信息处理速度快。
2.4系统研究内容
1) 数据源的选取
2) 界面的设计
3) 代码的设计
4) 程序的测试
5) 产品的发布
2.5项目需求分析
1、 能够查询数据库存中城市的天气情况。
2、 系统能通过手机查看并显示天气数据。
3、 系统必须具有安全性,可靠性,独立性。
2.6系统构架图
图2-1系统构架图
广东XX大学2012届毕业论文 基于Android手机天气预报系统 X同学
第三章 系统开发环境及相关技术
3.1 Android开发环境介绍
Android的上层应用程序是用Java语言开发,同时还需要基于Dalvik虚拟机,所以,Google公司推荐使用主流的Java继承开发环境Eclipse。只有Eclipse还不够,因为是使用Java语言进行开发,还应该有由SUN公司提供的Java SDK(其中包括JRE:Java Runtime Environment)。此外,Android的应用程序开发和Java开发有较大区别的,所以还需要有Google提供的Android SDK。同时,还需要在Eclipse安装ADT,为Android开发提供开发工具的升级或者变更,是Eclipse下开发工具的升级下载的工具。[2]
简言之,需要以下软件,才能搭建Android开发环境,从而进行Android应用程序的开发。
a) Java SDK
b) Eclipse
c) Android SDK
d) ADT
3.2 Android开发平台搭建[6]
Android开发平台搭建步骤:
①首先到http://www.eclipse.org/downloads/下载Eclipse集成开发环境并且解压,这里推荐下载Java EE 集成版本,可以为平台的搭建省下不少工作。接着再去 站点下载后安装下载 SDK1.5后解压。第一步下载工序就结束了。
②双击Eclipse解压后目录中的eclipse.exe然后启动,选择Eclipse菜单中的Help-> Install New Software-> 选项卡上的Available Software,点击右侧的“Add”输入http://dl- with”下拉菜单中选择刚才输入的网址。过一会就会出现一个Developer Tools选项,勾上以后点击Next以后Eclipse会自动网上查找Android 开发工具插件,然后找到Android DDMS和Android Development Tools,选中这两个点击Finish,Eclipse就会自动下载并安装Android插件了,最后会提示重启Eclipse。
③重启后选择Eclipse菜单中的Windows-> Preferences 在左侧的Android项目中SDK Location中填入Android SDK解压后的目录,然后点击Apply。
④在WindowsXP的系统变量中的path变量中添加一个值,该值指向解压后的Android SDK目录下的tools文件夹。
第四章Google android移动平台的相关理论
4.1 Goolge android 移动平台的概述
Android 是 Goolge公司于07年11月5日宣布的基于LINUX平台开源手机操作系统,该平台由操作系统,中间件,用户界面和应用软件组成,Android是Goolge开发的基于linux平台的开源手机操作系统。它包括操统,用户界面和应用程序--------移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍,谷歌与开放手机联盟合作开发了Android,这个联盟由包括中国移动,摩托罗拉,高通,宏达在内的30多家技术和无线应用的领军企业组成。通过与运营商,设备制造商,开发商和其他有关各方结成深层次的合作伙伴关系,希望借助建立标准化,开放式的移动电话软件平台,在移动产业内形成一个开放式生态系统.
4.1.1 Android系统的特点:
1、开放性。Google与开放性手机联盟合作开发了android,Google通过与动行商,通过与运营商,设备制造商,开发商和其他有关各方结成深层次的合作伙伴关系,希望借助建立标准化,开放式的移动电话软件平台,在移动产业内形成一个开放式生态系统。
2、应用程序无界限。Android上的应用可以通过标准API访问核心移动设备功能。通过互联网,应用程序可以声明它们的功能可提供其它应用程序使用。
3、应用程序是在平等的条件下创建的,移动设备上的应用程序可以被替换或扩展,即使是拨号或主屏幕这样的核心组件。
4、应用程序可以轻松地嵌入网络。应用程序可以轻松地嵌入HTML,javascript和样式表,还可以通过Webview显示内容。
5、应用程序可以并行运行。Android是一种完整的多任务环境,应用程序可以在其中并行运行,在后台运行时,应用程序可以生成通知引起注意。
4.1.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设备建立在不同的硬件上时,这个功能显得很实用。[1]
4.2 Google android移动平台开发过程研究[4]
Android移动平台作为21世纪的新秀,受到了越来越多的开发者的钟爱,在这股开发的浪潮中,逐渐形成了具有Android一套具有Android特色的开发流程。
由于Android的优越性,其开发显得非常的有规律可寻。大致的开发流程如下:
需求分析:作为一个软件,它必须有其存在的意义和价值,而这个价值和意义就需要靠需求分析来确定。
功能分析。作为一个手机软件,它的使命就是给用户使用的。如何提供用户最好的用户体验就值得每一个程序员的深思,这也是确保一个程序成功的关键所在。
界面设计:作为一个手机软件,其只能在极有限的区域中显示自已,如何在有限的空间里更完美的展现出自已的独特之处就显得更为重要了。
测试:在任何一个软件开发行业中,无论是J2EE,J2SE,J2ME等等其他开发中,测试时必不可少的一环,在Android开发中,由于手机的搞频率使用,和硬件系统上的不足,使得对软件的要求更加的严格,这就要求在开发完成后,再对其进行严格的测试,而测试又包括了:单元测试,系统测试等等方面的测试。
系统开发:作为一个软件的主体部分,系统开发的好坏直接决定了该系统的性能和寿命。
发布:在完成一个系统的开发后,就要对其发布,经过广大用户的考验,只有经过这个过程,才算是一个合格的产品,在Android平台中,Google提供了完整的发布机制------Google maket。
4.3 Google android移动平台下的应用研究[5]
Android系统提供给应用开发者本身就是一个框架,所有的应用开发都必须遵守这个框架原则。我们在开发应用时就是在这个框架上进行扩展,下面来看看android这个框架都有些什么功能可供我们使用。
Android.app:提供高层的程序模型和基本的运行环境
Android.content:包含对各种设备上的数据进行访问和发布
Android.database:通过内容提供者浏览的操作数据库
Android.graphics:地层的图形库,包含画布,颜色过滤,点,矩形,可以将它们直接绘制到屏幕上。
Android.location:定位和相关服务的类
A: 提供帮助网络访问类,超过通常的*接口。
Android.media: 提供一些类管理多种音频,视频的媒体接口。
Android.os:提供了系统服务,消息转输和IPC机制。
Android.opngl:提供OpenGL的工具。
Android.provider:提供访问Android的内容提供者的类。
Android.telephony:提供与拨打电话相关的API交互。
Android.view提供基础的用户界面接口框架。
Android.util:涉及工具性的方法,例如时间日期的操作。
Addroid.webkit:默认浏览器操作接口。
Android.widget包含各种UI元素在应用程序的布局中使用。
4.4小结
本单主要通过三个方面:1.Google android移动平台的概述:2.google android移动平台开发过程的研究:3.google android移动平台下的应用研究,概要的介绍了Google android移动平台相关知识,对google android移动平台有初步的认识和了解,为后面的开发做了坚实的基础。
第五章 掌上手上天气预报系统程序设计
5.1 用户界面设计
根据需求分析可以知道,应用程序应包含三个主要的用户界面,这里需要进一步分析每个用户界面中应该包括哪些显示内容。
在“设置页面”中,需要对要显示天气预报的城市及更新频率进行设置。在“显示页面”中,显示当前的天气状况,包括城市名称、温度、湿度、风向、雨雪情况和获取数据时间等信息。在“详细页面”动态显示当前天气情况,还要显示未来四天的天气情况。
根据对用户界面显示内容的分析,绘制出用户界面的草图,如图4-1所示。
图4-1
基于Android 平台的智能手机访问服务器的主要技术是数据交互方法。基于Android 操作系统的天气实况预报系统设计的核心是通过调用通信协议SOAP(Simple Object AccessProtocol)的接口,从Web Service 提供商中提取天气预报的数据信息,为客户端服务。其基本功能是当用户运行天气预报系统程序时,在手机屏幕上显示出中国的城市名称,用户单击任意一个城市名,可获得该城市的天气实况预报信息。用户也可以输入城市名称,点击查询获得天气预报信息。WeatherForecast 工程目录结构及其源代码文件如图4-2所示
图4-2
5.2 主要代码介绍
1.AsyncImageLoader类 该类功能是根据url判断图片是否存在于Cache,如果存在那么通知回调函数,如果不存在则开启新线程下载图片,完成之后通知回调函数.
public class AsyncImageLoader {
public AsyncImageLoader()
{
}
public Bitmap loadImage(final String strUrl,final ImageCallback imageCallback)
{
Bitmap bitmap = null;
StringBuffer sb = new StringBuffer(strUrl);
sb.deleteCharAt(0);
final String imageUrl = sb.toString();//分离出图片的真实地址
//根据图片真实地址查找图片是否在缓存,如果在缓存中直接返回该图片
//不能直接使用strUrl,否则会导致相同的图片被存在缓存当中
if (ConstData.imageCache.containsKey(imageUrl)) {
SoftReference<Bitmap> sr = ConstData.imageCache.get(imageUrl);
bitmap = sr.get();
if (bitmap != null) {
Log.i("info", "already-->" + strUrl);
return bitmap;
}
} else {
Log.i("info", "not exit!!!-->" + strUrl);
}
2: FileUtils类 该类功能是对外部存储设备进行设置。
public class FileUtils {
private String SDPATH;
public String getSDPATH()
{
return SDPATH;
}
//得到外部存储设备目录
public FileUtils(){
SDPATH = Environment.getExternalStorageDirectory()+"/";
}
/**
* 在SD卡上创建文件
* @throws IOException
*/
public File createSDFile(String fileName) throws IOException{
File file = new File(SDPATH+fileName);
file.createNewFile();
return file;
}
/**
* 在SD卡上创建目录
*
*/
public File createSDDir(String strDir){
File file = new File(SDPATH+strDir);
file.mkdir();
return file;
}
/**
* 判断SD卡上的文件是否存在
*/
public boolean isFileExists(String fileName){
File file = new File(SDPATH+fileName);
return file.exists();
}
3:HttpDownloader 类 该类功能是创建一个URL对象和连接HTTP,调用者使用URI(通用资源标识符)对不同的数据集的数据进行操作。URI用来地位任何远程或本地的可用资源
public class HttpDownloader {
private URL url;
private String line;
private BufferedReader buffer;
private StringBuffer sb = new StringBuffer();
public String download(String urlStr){
try{
//创建一个URL对象
url = new URL(urlStr);
//打开一个HTTP连接
HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
//使用IO流读取数据,读取字节流->将字节流转化成字符流->再用BufferedReader读取
buffer = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
while((line = buffer.readLine()) != null){
sb.append(line); //使用append()方法附加数据,最后使用toString()方法转化成字符串
}
}catch(Exception e){
e.printStackTrace();
}finally{
try {
buffer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return sb.toString();
}
4:CurrentWeatherCondition类是对当前天气类。
package cn.aisky.android;
public class CurrentWeatherCondition {
private String currentHumidity;
private String currentCondition;
private String currentWind;
public String currentImage;
public String currentTemperature;
public void setCurrentHumidity(String s) {
currentHumidity = s;
}
public void setCurrentCondition(String s) {
currentCondition = s;
}
public void setCurrentImagePath(String s) {
currentImage = s;
}
public void setCurrentTemperature(String s) {
currentTemperature = s;
}
public void setCurrentWind(String s) {
currentWind = s;
}
public String getCurrentImagePath() {
String ret = new String("" + currentImage);
return ret;
}
public String getCurrentWeather() {
String ret = new String("实时天气:"+this.currentCondition+ " "
+"温度:" + this.currentTemperature+"°C" + " "
+ this.currentHumidity
+ " " + this.currentWind);
return ret;
}
}
5.3 获取城市列表数据
Android 没有提供Web Service 的组件库,但可以通过修改在PC 或J2ME 上使用的开源Web Service Java 库作为AndroidWeb Servic 库使用。kSOAP2()是一个在智能手机上的SOAP Web Service 客户端包,可用于资源受限制的Java 环境如Applets 或J2ME 应用程序。在GoogleCode 上有一个项目ksoap2-android( 平台上实现轻量级的SOAP 库,即使用ksoap2-android 的API 来调用远端Web Service 的服务。
因此需要在CitiesWeatherForecast.java 的onCreate()中进行数据获取的初始化工作。通过定义一个方法public List<String>getAllCitiesNAMEs()可获得中国城市名称列表。也就是说,采用它提供的获得全球各个国家城市的方法GetCitiesByCountry,通过 上的WebService 可提供天气预报服务。譬如,通过Constant.java 中的public class Constant{},设置SOAP Action 要调用的方法名、命名空间以及Web Service URL值,其源代码为:
import android.graphics.Bitmap;
public class ConstData {
static final String[] mCities={
"北京",
"上海",
"广州",
"阳江",
"湛江",
"珠海",
"中山",
"佛山",
"东莞",
"汕头",//
"汕尾",//
"惠州",//
"大连",//
"哈尔滨",//
"海口",//
"长春",//
"长沙",//
"成都",//
"福州",//
"昆明",//
"南京",//
"南宁",//
"青岛",//
"深圳",//
"沈阳",//
"太原",//
"乌鲁木齐",//
"西安",//
"西宁",//
"厦门",//
"徐州",//
"银川",//
"郑州",//
"香港"};
static final String[] pCities={
"beijing","shanghai","guangzhou","jiangmen","nanchang","jiujiang","wuhan","ganzhou",
"tianjin","chongqing","tangshan","shijiazhuang","dalian","haerbin","haikou","chuangchun",
"changsha","chengdu","fuzhou","kunming","nanjing","nanning","qingdao","shenzhen","shenyang",
"taiyuan","wulumuqi","xian","xining","xiamen","xuzhou","yinchuan","zhengzhou","hongkong"
};
//图片缓存
public static HashMap<String,SoftReference<Bitmap>> imageCache;
}
5.4解析数据列表
Android 操作系统对xml 字符串数据的操作功能很强提供了dom、sax 以及xmlpul 3 种方式。Android SDK 提供了android.sax 包以方便SAX Handler 的开发,可用来解结果字符串在本设计实例的CitiesWeatherForecast.java 文件中,解析xml 数据时先通过RootElement root=new RootElement("NewDataSet")获得xml 数据的根节点;然后再寻找其子节点直到找到City 子节点并设置一个监听器setEndTextElementListener()来获得City 子节点的值;最后使用org.xml.sax,SAXParser 来解析xml 数据把数据存入List<String>并返回:
SAXParserFactory factory=SAXParserFactory.newInstance();
SAXParser parser=factory.newSAXParser();
XMLReader xmlreader=parser.getXMLReader();
xmlreader.setContentHandler(root.getContentHandler());
InputSource is=new InputSource
(new StringBufferInputStream(xmlStr));
xmlreader.parse(is);
5.5主要查询城市天气预报方法。
查询城市天气预报信息主页面WeatherActivity继承android.app.Activity,写onCreate 方法。onCreate 方法是查询页面的初始化方法,在这个方法中我们要初始页面中Button,Spinner等控件信息,showCity方法,列表显示查询天气预报信息的城市名称。updateWeatherInfoView方法,更新显示选中城市的当前天气信息。updateWeatherorecastView 方法,更新显示选中城市未来四天的天信息。getCityWeather 方法,通过网络得到选中城市的天气预报信息。
第六章 系统测试
至此已经完成了WeathForecastweather工程的代码编写工作,在这一章节对WeathForecastweather工程进行测试,步骤及结果如下:
(1) 启动Android虚拟机
在工程名WeathForecastweather上点右键,然后选择“Run As”,然后选择“Android Application”。 Android虚拟机启动较慢。如下图6-1所示:
图6-1Android登陆界
展开阅读全文