Android3G手机天气预报系统-毕业论文_第1页
Android3G手机天气预报系统-毕业论文_第2页
Android3G手机天气预报系统-毕业论文_第3页
Android3G手机天气预报系统-毕业论文_第4页
Android3G手机天气预报系统-毕业论文_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

分分 类类 号:号:TP315TP315 学校代码:学校代码:1146011460 学学号:号:0841310508413105 南京晓庄学院本科生毕业论文南京晓庄学院本科生毕业论文 A Android3Gndroid3G 手机天气预报系统手机天气预报系统 A Android3Gndroid3G phonephone weatherweather forecastforecast systemsystem 所在院(系所在院(系) : 学学 生生 姓姓 名:名: 指指 导导 老老 师:师: 研究起止日期研究起止日期: 二二一一一一年十二月至二年十二月至二一二一二年五月年五月 学位论文独创性声明学位论文独创性声明 本人郑重声明: 1. 坚持以“求实、创新”的科学精神从事研究工作。 2. 本论文是我个人在导师指导下进行的研究工作和取得的研究成果。 3. 本论文中除引文外,所有实验、数据和有关材料均是真实的。 4. 本论文中除引文和致谢的内容外,不包含其他人或其它机构已经发表或 撰写过的研究成果。 5. 其他同志对本研究所做的贡献均已在论文中作了声明并表示了谢意。 作者签名: 日期: 目录目录 绪论1 1.1 研究内容1 1.2 研究意义1 1.3 可行性研究1 1.4 研究现状和发展趋势. 2 二 、系统分析4 2.1 研究目标4 2.2 需求分析4 2.3 性能分析5 三、平台与关键技术研究. 6 3.1 Android 开发环境介绍 6 3.2 Android 开发平台搭建 6 3.3 Android 关键技术研究 7 四、系统设计10 4.1 模块.10 4.2 数据交互12 4.3 用户交互13 4.4 系统管理15 4.5 数据库设计与实现. 19 4.6 程序模块设计24 五、系统实现与测试28 5.1 系统实现28 5.2 系统测试31 参考文献34 致谢35 摘摘要要 随着智能手机的快速普及,智能手机操作系统市场非常活跃。为了让智能手机用户能够随时随 地查询互联网所提供的服务,让手机能够通过移动网以及互联网访问 Web 网站并处理各种各样的业 务,一种高效的办法就是将应用系统的功能拓展到手机终端上。因此,智能手机的应用软件及其需 要的服务将有广阔的发展前景。 在如今这个智能手机系统群雄纷争的时候,它采用 Linux 内核,开放手机联盟成员可以任意使 用和修改 SDK 包,系统的开源性使其具有良好的拓展性。这款软件包括了操作系统、用户界面和应 用程序,即智能手机工作所需要的全部软件。2008 年 Google 推出了一款名为 Android 的开源智能 手机操作系统, Android 的最大特点是其开放性体系架构,不仅具有非常好的开发、调试环境,而 且还支持各种可扩展的用户体验,包括丰富的图形组件、多媒体支持功能以及强大的浏览器。因此, 对于软件从业人员来说,Android 平台具有无限的吸引力。 本文就在分析讨论 Android 手机软件开发技术原理的基础上,开发出能为用户提供更好的基于 Android 平台的 3G 手机气象软件。 关键字:关键字:androidandroid;天气预报系统;智能手机平台;天气预报系统;智能手机平台 ABSTRACT With the rapid proliferation of smart phones, smart phone operating system market is very active. In order to allow smart phone users to be able to query the services provided by the Internet anytime, anywhere, so that the phone can be accessed through the mobile network and the Internet Web site and handle a variety of business, an efficient way is the application function of the system extended to the mobile terminal on. Therefore, the smart phone applications and the service will have broad prospects for development. Warlords dispute of this smart phone system today, it uses the Linux kernel, the Open Handset Alliance members can be used and modify the SDK package, open source, it has a good expansion. This software includes the operating system, user interface and applications, smart phones need to work all of the software. In 2008, Google launched a product called the Android open-source smart phone operating system, Androids biggest characteristic is its open architecture, not only has a very good development, debugging environment, but also supports a variety of scalable user experience. Including rich graphical components, and multimedia support features and great browser. Therefore, for software professionals, the Android platform has unlimited appeal. On the basis of analysis and discussion of the Android mobile phone software development technical principles, developed to provide users with better 3G handsets based on Android platform of meteorological software Keywords:android;weather software;smart phone platform 1 绪论 1.11.1 研究内容研究内容 Android 平台天气预报系统是基于 Android 手机平台,基于 Java,从 Google 上获取天气预报信 息,开发出针对使用 Android 平台的手机天气预报系统的应用软件。 为了让智能手机用户能够随时随地查询互联网所提供的服务,让手机能通过移动网和互联网访 问 Web 网站并处理各项业务,是一种高效的办法就是将应用系统的功能拓展到手机终端。Android 系统是 Google 公司开发的一个开源手机操作系统,它包括了用户界面、操作系统和应用程序,即 智能手机工作所需的全部应用软件。Android 的最大特点是它的开放性体系架构,不仅具有非常好 的调试、环境开发,而且还具有各种可扩展的设施,包括丰富的多媒体支持功能和图形组件强大的 浏览器,技术已经趋于成熟。 1.21.2 研究意义研究意义 Android 平台 3G 手机天气预报系统的开发可以进一步扩大天气信息的覆盖面,以便提前预防, 把气象灾害造成的损失降到最低,使得广大公众能够在第一时间方便且快捷地获取最新的天气预报 信息。同时也可以强化天气公共服务的职能,改善公共服务手段、完善公共服务体系、增加公共服 务产品、提高公共服务质量,更好地发挥了气象事业对经济社会发展的现实性作用。 这款手机天气预报系统给人们生活带来方便快捷的全天候信息,在人们日常生活中必不可少的 生活信息。本系统界面明了,操作简单,适合所有年龄阶段的运用。对于提高人们生活水平质量有 一定的促进。 1.31.3 可行性研究可行性研究 随着计算机应用的日益普及和深化,随时随地了解今明天的天气情况已经成为一种趋势。本项 目要开发的是基于单机的天气查询系统。由于现代都市的快节奏,再天天守着电视机看雷打不动的 天气预报已经变得越来越不现实了。因此,实现一个将各种天气查询服务功能集成起来的信息系统 就显得十分必要,即可以节省时间,又可以实现个性化的服务,减少不必要的等待和繁重的信息。 开发的系统要求界面友好,方便直观。既要方便管理员对天气情况进行添加、删除、修改、查询和 统计等管理,又要方便用户及时了解最新的天气状况。 2 而且随着现在 android 手机的越来越流行和发展,使用 android 手机的人数越来越多,据调查,使 用智能手机的用户中,手机里下载天气预报软件的用户占有 84%,所以这是一个很大的用户平台, 根据开发平台的应用需求,决定开发这样一款天气预报系统软件。 1.41.4 研究现状和发展趋势研究现状和发展趋势 据 Gartner 最新数据显示,从 2010 年第二、三季度全球智能手机销售持续大幅增长,形成了良 好的态势,其中第三季度安卓占全球智能手机市场的 26%,仅次于塞班,成为世界上第二大智能手 机系统。2010 第二、三季度与去年同期相比,增度分别是 15.8%及 22%,增长迅猛。而塞班系统较 09 年的市场销售状况,尽管终端销量有大幅度提升,但增势下滑 9.6%,情况不好。其他操作系统的 表现则要平稳很多。 图 1-1Gartner数据整理 安卓是全球首款开源代码的操作系统,开放手机联盟(OHA)成员可以任意使用和修改安卓的 SDK 软件包,采用 Linux 内核。系统的开源性使其具有良好的拓展性,一方面,终端厂商可以针对 自身的特殊需要“定制化开发”;另一方面,为众多移动应用开发者提供了良好的系统性平台,有 利于移动应用的集合。与此相比,尽管 2010 年 2 月,塞班基本完成开源工作,但由于代码臃肿,用 户界面设计缺失,塞班的开源并无实际意义,错失发展良机。 据 Informa 预测,2012 年,安卓手机销量将超过诺基亚塞班手机,届时安卓将成为全球最大的 智能手机平台。谷歌表示目前安卓手机每日平均激活量为 23 万部,销售速度正在加速上涨。 我们认为,安卓在全球市场的成长壮大,塞班市场份额不断下跌已成不可争议的事实。安卓操 作系统发展迅猛主要得益于开源、免费和良好产业运作策略,这三点为安卓在智能手机市场赢得更 多的发展机遇。代码的开源让更多的开发者进入应用开发;系统的免费让更多的厂商加入,推动了 3 份额的上升;应用的丰富吸引了更多用户选择,这也是谷歌值得众多厂商学习的地方。此外,谷歌 通过 OHA 联合众多厂商进行系统研发,不断更新版本,将系统应用推广到更多的终端产品中,确保 用户体验持续改善。 南京晓庄学院 2012 届本科毕业论文 4 二 、系统分析 2.12.1研究目标研究目标 1. 了解 Android 应用程序的设计和开发过程; 2. 使用多种组件进行 Android 平台 3G 手机天气预报软件的开发。 本软件是基于 Eclipse 的开发环境,依托 Google 气象数据建立天气预报信息数据库, 开发出了针对 Android 平台的手机天气预报系统。 2.22.2需求分析需求分析 手机发展到现在已经成为广大人们群众的日常使用的通讯工具, 手机具有的功能也日趋 完善。手机用户也可以选择开通 GPRS 网络服务,此服务大大的方便了人们对于手机上网的 需求,从而带动了手机软件发展,我国的移动通讯功能得到了很大的提高。手机软件可以在 安装在手机上的软件,完善原始系统的不足与个性化。随着科技的发展,现在手机的功能也 越来越多,越来越强大。再也不像以前那么死板简单。目前发展到了可以和掌电脑相媲美。 本设计在现有普通手机的基础上, 可以在手机上实现天气状况的实时报告和天气预报功 能。方便人们的出行和生活。 本软件是一个 App Widget 应用程序,启动程序后可以进行城市、更新频率的设置,可 以通过图片和文字显示当前和未来的天气状况,包括温度、湿度、风向和雨雪情况等。这些 天气数据是通过后台服务获取的,这个后台服务可以按照一定时间间隔,从 Google 上获取 天气预报信息,并将天气信息保存在数据库中。 从上面的描述中可以基本了解软件的功能需求: 1. 启动 App Widget 应用程序; 2. 设置界面:对要显示天气预报的城市及更新频率进行设置; 3. 详细界面:通过文字图片动画显示当前的天气情况,包括城市当前天气、温度、风 向、风速、湿度;同时显示今后四天的天气情况。 4. 显示界面:通过文字和图片显示当前的天气情况,包括日期、时间、城市、最高温 度、最低温度、当前温度等。 南京晓庄学院 2012 届本科毕业论文 5 2.32.3 性能分析性能分析 1. 点击 ChinaWeather.apk 安装。 2. 到桌面长摁空白桌面,选择窗口小部件,选择 chinaweather。 3. 填入你要关注的城市(拼音) 。点击保存即可获得城市的天气预报。 本软件操作简单,应用方便,设计人性化,程序响应速度快、安全性高、信息处理速度 快。 南京晓庄学院 2012 届本科毕业论文 6 三、平台与关键技术研究 3.13.1AndroidAndroid 开发环境介绍开发环境介绍 Android 的上层应用程序是用 Java 语言开发,同时还需要基于 Dalvik 虚拟机,所以, 使用 Java 语言进行开发, 还应该有由 SUN 公司提供的 Java SDK(其中包括 JRE: Java Runtime Environment)。在 Eclipse 安装 ADT,为方便 Android 开发提供开发工具的升级或者变更, 是 Eclipse 下开发工具的升级下载的工具。 同时,Google 公司推荐使用主流的 Java 继承开发环境 Eclipse。此外,Android 的应用 程序开发和 Java 开发有较大区别的, 所以还需要有 Google 提供的 Android SDK。 换句话说, 需要以下软件,才能搭建 Android 开发环境,从而进行 Android 应用程序的开发。 1. Eclipse 2. Java SDK 3.ADT 4.Android SDK 3.23.2 AndroidAndroid 开发平台搭建开发平台搭建 Android 开发平台搭建步骤: 1 首先到 /downloads/下载 Eclipse 集成开发环境并且解压,这里 推 荐 下 载 Java EE 集 成 版 本 , 可 以 为 平 台 的 搭 建 省 下 不 少 工 作 。 接 着 再 去 SDK1.5 后解 压。第一步下载工序就结束了。 2 双击 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 插件 南京晓庄学院 2012 届本科毕业论文 7 了,最后会提示重启 Eclipse。 3 在 WindowsXP 的系统变量中的 path 变量中添加一个值,该值指向解压后的 Android SDK 目录下的 tools 文件夹。 4 重启后选择 Eclipse 菜单中的 Windows- Preferences 在左侧的 Android 项目中 SDK Location 中填入 Android SDK 解压后的目录,然后点击 Apply。 3.33.3 AndroidAndroid 关键技术研究关键技术研究 Android 平台是基于 java 语言开发的, 其中 android 主要是四大组建构成的, Activity、 Service、Broadcast Receiver、Content Provider。 1.Activity Activity 就是一个用户界面,比如打电话程序,实现一个打电话的 Activity,通讯录也 是一个 Activity,通话记录也是一个 Activity 等等,这些 Activity 都是独立的,但组合 在一起就是一个完整功能的应用程序了。 2.Service 从字面上意思就是服务的意思, 其实就是 Activity 的后面服务, 他们在很多地方都相 辅相成的,封装有一个完整的功能逻辑实现,Service 就是为 Activity 在后面服务的,作 为 Activity 的坚实后盾。Service 在后台为 Activity 提供所需要的功能。Android 中得服 务其实与 windows 中得服务类似,它执行长时间运行的操作,或运程进程执行工作。服务不 提供用户界面。 Android 中的服务,和我们通常说的 Windows 服务,Web 的后台服务又有一些相近,它 们通常都是后台长时间运行,接受上层指令,完成相关事务的模块。用运行模式来看, Activity 是跳,从一个跳到一个,这有点像模态对话框,给一个输入,然后不管不顾的让 它运行,离开时返回输出。而 Service 不是这样的,Service 主要是等着上层连接上它,然 后产生一段持久的通信。 但和一般的 Service 还是有所不同,Android 的 Service 和所有四大组件一样,其进程 模型都是可以配置的, 调用方和发布方都可以有权利来选择是把这个组件运行在同一个进程 下,还是不同的进程下。它凸显了 Android 的运行特点。 Android 中用来做数据序列化的 类是 Parcel,封装了序列化的细节,向外提供了足够对象化的访问接口,Android 号称实现 非常高效。 南京晓庄学院 2012 届本科毕业论文 8 Service 从实现角度看,最特别的就是 RPC 的实现了,其他内容,都会接近于 Activity 的一些实现。 3.Broadcast Receiver 从字面意思是广播接收者, 其实和我们生活中得广播意思相近, 在发生什么事情的时候, 会以广播的形式告知我们。广播又分为普通广播和有序广播。普通广播是异步的,理论上是 同时收到的。你不能对他做任何操作,不能终止。有序广播,在接收到广播时可以加入自己 的操作,传递给下一个接收者,也可以终止广播。Android 系统中最常见的广播电池电量低 得时候,收到短信的时候,USB 连接的时候等等。 内容提供者主要用于应用程序的数据共享设置,你可以把数据存储在文件系统中,或 者 SQLite 数据库上,网络,或者其他的持久性存储位置。你可以访问这些数据或者修改, 其他应用程序也可以访问或者修改。 在 Android 中,充分考虑了广泛的这类需求,于是就有了 Broadcast Receiver 这样的 一个组件。每个 Broadcast Receiver 都可以接收一种或若干种 Intent 作为触发事件,当发 生这样事件的时候,系统会负责唤醒或传递消息到该 Broadcast Receiver,任其处置。在 此之前和这以后,Broadcast Receiver 是否在运行都变得不重要了。 当 Broadcast Receiver 接收到相关的消息,它们通常做一些简单的处理,然后转化称 为一条 Notification,一次振铃,一次震动,抑或是启动一个 Activity 进行进一步的交互 和处理。所以,虽然 Broadcast 整个逻辑不复杂,却是足够有用和好用,它统一了 Android 的事件广播模型,让很多平台都相形见绌了 4.Content Provider 应用程序可以通过 Content Provider 来访问其他应用程序的一些私有数据,这是 Android 提供的一种标准的共享机制。共享的数据可以存在在很多方面,比如在系统中、数 据库中或者在其他的一些程序里。Content Provider 可以扩展自己的 Content Provider 类, 通过实现自己的类的接口来控制其他数据的存储。然后程序不会直接调用 ContentProvider 中的方法,而是通过任何一个能与 Contentprovider 通讯。 任何时候当 Android 系统收到一个需要某个组件进行处理的请求的时候,Android 会确 保处理此请求的组件的宿主进程是否已经在运行,如果没有,则立即启动这个进程,当请求 的组件的宿主进程已经在运行, 它会继续查看请求的组件是否可以使用, 如果不能立即使用, 它会创建一个请求的组件的实例来响应请求。 Content Provider,内容提供者主要用于应用程序的数据共享设置,你可以把数据存储 南京晓庄学院 2012 届本科毕业论文 9 在文件系统中,或者 SQLite 数据库上,网络,或者其他的持久性存储位置。你可以访问这 些数据或者修改,其他应用程序也可以访问或者修改。 在各大组件中,Service 和 Content Provider 都是那种需要持续访问的。Service 如果 是一个耗时的场景,往往会提供异步访问的接口,而 Content Provider 不论效率如何,都 提供的是约定的同步访问接口。因为 Content Provider 仅是提供数据访问的,它不能确信 具体的使用场景如何,会怎样使用它的数据;而相比之下,Service 包含的逻辑更复杂更完 整,可以抉择大部分时候使用某接口的场景,从而确定最贴切的接口是同步还是异步,简化 了上层调用的逻辑。 南京晓庄学院 2012 届本科毕业论文 10 四、系统设计 4.14.1 模块模块 4.1.1 天气预报显示 根据需求分析可得, 用户在使用这款软件是希望它的快捷方便, 所以我们把这款软件的 主界面定在了手机桌面上,调用的数据使用在桌面显示。桌面的布局分为 3 大块。其中主要 是相对布局,划分区域,作为以后使用功能上的加强。在时间节点上,我们采用实时更新, 并放大了手机现有的时间,让用户拥有更好的体验。左下区域分为日期、城市、天气。中间 为天气图标,根据不同的天气状况来更换不同的图片,让用户有更直观的了解。右侧为最搞 温度、最低温度、现在温度。读取的数据加以分别后重新排列在界面上,让用户的使用更加 方便,舒畅。 在用户界面设计上,采用了AppWidget框架结构,提供直观的交互操作。三个用户界面 风格简约、操作简便,用户体验将非常好。 DetailForecastActivity主要用来显示详细的天气信息, 包括当天和未来四天的天气信 息。为了能够以列表的形势显示多行数据,并制定每行数据的布局,使用了ListActivity。 ListActivity可以不通过setContentView( )设置布局,也不必重载onCreate( )方法, 而直接将显示列表加载到ListActivity,增加了使用的便利性。在此工程中,仍然使用 setContentView( )设置布局,这样做的好处是可以在界面中设置更为复杂的显示元素。核 心代码如下: /继承ListActivity publicpublic classclass DetailForecastActivity extendsextends ListActivity /获取游标,访问数据库 / Query for any matching forecast data and create adapter Uri forecastUri = Uri.withAppendedPath(mData, WeatherWidgets.FORECAST_END); Cursor forecastCursor = managedQuery(forecastUri, DetailDateWidget.detailProjection, null, null, null); listAdapter = new ForecastAdapter(this, forecastCursor); 列表适配器代码: 南京晓庄学院 2012 届本科毕业论文 11 private class ForecastAdapter extends ResourceCursorAdapter public ForecastAdapter(Context context, Cursor c) super(context, R.layout.detailitems, c); / TODO Auto-generated constructor stub System.out.println(“ForecastAdapter“); Override public void bindView(View view, Context context, Cursor c) / TODO Auto-generated method stub System.out.println(“View ForecastAdapter“); ImageView icon = (ImageView) view.findViewById(R.id.dDetailImage); TextView day = (TextView) view.findViewById(R.id.ddDayText); TextView condition = (TextView) view.findViewById(R.id.ddConditionText); TextView temp = (TextView) view.findViewById(R.id.ddTempCText); icon.setImageResource(WeatherUtil.getDetailForecastIcon(c.getString(4); day.setText(c.getString(1); condition.setText(c.getString(5); temp.setText(c.getInt(2) + “/“ + c.getInt(3) + “); 效果如下图2所示: 南京晓庄学院 2012 届本科毕业论文 12 图 4-2 天气呈现界面 4.1.2 用户提醒 用户提醒功能是天气预报额外的功能, 主要我们运用了手机自带的提醒功能, 经过我们 的页面图标设置,只要点击应用的图标,用户就可以自然的跳转到提醒功能上去,方便用户 设置闹铃。这个功能是有待开发的,在天气温差过大时,我们能提供给用户数据反馈,提醒 用户注意温差,在天气降温时,提醒用户注意保暖,这是一种很有用的功能,但现在主要是 主观上的控制,客观上的提醒功能还有待开发。 4.24.2 数据交互数据交互 从 Google 提 供 的 Web Service 中 获 取 的 天 气 数 据 , 数 据 的 获 取 地 址 是 : /创建Http Get请求 HttpGet request = newnew HttpGet(String.format(WEBSERVICE_URL, postalCode); 南京晓庄学院 2012 届本科毕业论文 13 trytry Log.d(TAG, “get googles weather infomation“); /发出请求 HttpResponse response = client.execute(request); StatusLine status = response.getStatusLine(); Log.d(TAG, “Request returned status “ + status); /取出回复信息 HttpEntity entity = response.getEntity(); responseReader = newnew InputStreamReader(entity.getContent(), “GB2312“); 4.34.3 用户交互用户交互 4.3.1 城市交互 ConfigureActivity 继 承 Activity 并 且 实 现 了 View.OnClickListener 接 口 , AppWidget 第一次启动之前会先运行 ConfigureActivity,会出现设置页面用户进行设置, 点击保存按钮就会将设置好的参数会存储到 SQLite 中。核心代码如下: city = editCity.getText().toString(); updatetime =Integer.parseInt(editUpdatetime.getText().toString(); ContentValues values = new ContentValues(); values.put(BaseColumns._ID, widgetId); values.put(DataWidget.POSTCODE, city); values.put(DataWidget.UPDATEMILIS, updatetime); values.put(DataWidget.LASTUPDATETIME, -1); values.put(DataWidget.ISCONFIGURED, 1); ContentResolver resolver = getContentResolver(); resolver.insert(WeatherWidgets.CONTENT_URI, values); / start service System.out.println(“start Service!“); 南京晓庄学院 2012 届本科毕业论文 14 DataForecastService.addWidgetIDs(new intwidgetId); startService(new Intent(this, DataForecastService.class);setConfigureResult(Activity.RESULT_OK); finish(); break; ConfigureActivity的布局文件是res/layout/configure.xml,采用了LinearLayout的 布局方式。 效果如图3所示: 图 4-3城市选择页面 4.3.2数据库交互 以 往 数 据 查 询 将 解 析 好 的 数 据 存 储 到 SQLite 数 据 库 中 。 其 过 程 是 : 使 用 ContentResolver 对象,通过 URI 间接调用 ContentProvider,使用 ContentResolver 对象 与 ContentProvider 进 行 交 互 , 而 ContentResolver 则 通 过 URI 确 定 需 要 访 问 的 ContentProvider 的数据集。核心代码如下,调用关系如图 4 所示。 南京晓庄学院 2012 届本科毕业论文 15 图4-4ContentProvider调用关系 ContentResolver resolver = context.getContentResolver(); resolver.delete(forecastUri, nullnull, nullnull); ContentValues values = newnew ContentValues(); forfor (DetailDateWidget forecast : widgetEntity.getDetails() values.clear(); values.put(DetailDateWidget.DAYOFWEEK, forecast.getDayOfWeek(); resolver.insert(forecastUri, values); 注意: for(DetailDateWidgetforecast :widgetEntity.getDetails()相当于foreach语 句,在widgetEntity.getDetails()集合里打印出所有类型为DetailDateWidget的 forecast变量。 4.44.4 系统管理系统管理 4.4.1 天气数据管理 读取天气数据实例通过WebServiceHelper.getWidgetEntity()方法操作数据库取出所 需要的数据, 这一部分与上一节的 “将解析好的数据存储到SQLite数据库中” 的关键点相同, 为节约篇幅,此处不赘述。 调用轻量级XML解析器XmlPullParser对从网络上获取的字节流数据进行解析, 并且将解 析结果保存在WidgetEntity对象中。 南京晓庄学院 2012 届本科毕业论文 16 4.4.2 时间管理 AppWidget一启动就会启动DataTimeService这个后台服务, 此服务设置了每隔20秒刷新 一次时间,“显示页面”通过这个后台服务获取系统时间从而显示。核心代码如下: AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, now + updateMilis, pendingIntent); 至此,后台服务介绍完毕,最后还需要在AndroidManifest.xml文件中注册后台服务。 4.4.3 页面现实布局管理 根据需求分析可以知道, 应用程序应包含三个主要的用户界面, 这里需要进一步分析每 个用户界面中应该包括哪些显示内容。 在“设置页面”中,需要对要显示天气预报的城市及更新频率进行设置。在“显示页面” 中,显示当前的天气状况,包括城市名称、温度、湿度、风向、雨雪情况和获取数据时间等 信息。在“详细页面”动态显示当前天气情况,还要显示未来四天的天气情况。 根据对用户界面显示内容的分析,绘制出用户界面的草图,如图5所示。 图 4-5 用户界面草图 4.4.4 后台服务 后台服务是ChinaWeather工程的核心模块, 在用户启动后持续在后台运行, 直到用户停 止服务。后台服务主要有三个功能,一是周期性的获取Google的天气数据并存储到SQLite, 南京晓庄学院 2012 届本科毕业论文 17 二是从SQLite读取出要显示的数据,三是定时更新“显示页面”的时间。 4.4.5 App Widget启动 Android开发应用除了程序应用,还有App Widget应用。先简单说说App Widget的原理。 App Widget是在桌面上的一块显示信息的东西,通过单击App Widget跳转到程序入口类。而 系统自带的程序,典型的App Widget是music,这个Android内置的音乐播放小程序。这个是 典型的App Widget+app应用。就是一个程序既可以通过App Widget启动,也可以通过App启 动。App Widget就是一个AppWidgetProvider+一个UI界面显示(预先绑定了好多Intent), 界面上的信息可以通过程序控制而改变, 单击Widget上的控件只能激发发送一个Intent, 或 发出一个Service的启动通知。 而AppWidgetProvider可以拦截这个Intent, 而进行相应的处 理。 WeatherWidget在设计上采用了AppWidget框架结构,AppWidget就是HomeScreen上显示 的小部件,通过在HomeScreen空白处长按,在弹出的对话框中选择Widget部件来进行创建。 此外,长按部件后并拖动到垃圾箱里进行删除。创建AppWidget需要以下四个步骤: 定义Widget布局文件, 此文件是res/layout/weather.xml, 采用AbsoluteLayout方式进行布 局需要注意的是在这个文件中所使用的组件必须是RemoteViews所支持的。 定义Widget的基本属性文件,此文件是/res/xml/weatherwidget.xml。代码如下: 效果如图6所示: 南京晓庄学院 2012 届本科毕业论文 18 图4-6桌面显示图 创建WeatherWidget.java类, 此类继承自AppWidgetProvider, 主要 的功能有:获取需要更新的桌面小控件;启动时间信息的服务;启动获取天气预报信息的服 务;更新时间信息;更新桌面小控件显示内容。核心代码如下: publicpublic classclass WeatherWidget extendsextends AppWidgetProvider Override publicpublic voidvoid onUpdate(Context context, AppWidgetManager appWidgetManager,intint appWidgetIds) supersuper.onUpdate(context, appWidgetManager, appWidgetIds); / 获取需要更新的桌面小控件 ForecastService.addWidgetIDs(appWidgetIds); / 启动获取天气预报信息的服务 context.startService(newnew Intent(context, ForecastService.classclass); / 启动时间信息的服务 context.startService(newnew Intent(context, ForecastTimeService.classclass); /更新桌面小控件显示内容 publicpublic staticstatic RemoteViews updateViews(Context context, Uri uri) /更新时间信息 publicpublic staticstatic RemoteViews updateTime(Context context) 南京晓庄学院 2012 届本科毕业论文 19 AppWidgetProvider对应一个receiver属性,需要更新AndroidManifest.xml。代码如下: 效果如图7所示: 图 4-7 关闭系统图 4.54.5 数据库设计与实现数据库设计与实现 数据提供者 DataForecastService 继承 ContentProvider,是在应用程序间共享数据的 一种接口机制。应用程序在不同的进程中运行,因此,数据和文件在不同的应用程序之间是 不能够直接进行访问的。而 CotentProvider 为程序员提供了较高级的数据共享方法,应用 南京晓庄学院 2012 届本科毕业论文 20 程序可以指定需要共享的数据,而其他应用程序则可以在不知数据来源、路径的情况下,对 共享数据进行查询、添加、删除和更新等操作。 在介绍 DataForecastService 的核心代码前, 首先了解一下 WeatherUtil.java(当前天 气信息的类)和 DataWidget.java(未来天气信息的类) 。 WeatherUtil.java 的部分代码: publicpublic classclass WidgetEntity privateprivate ArrayList details = newnew ArrayList();/DetailDateWidget对象 privateprivate Integer id;/编号 privateprivate Integer updateMilis;/更新频率 privateprivate String city;/城市 privateprivate String postalCode;/城市标记 privateprivate Long forecastDate;/预报时间 privateprivate String condition;/天气情况 privateprivate Integer tempF;/华氏温度 privateprivate Integer tempC;/摄氏温度 privateprivate String humidity;/湿度 privateprivate String icon;/天气图标 privateprivate String windCondition;/风力风向 privateprivate Long lastUpdateTime;/最后更新时间 privateprivate Integer isConfigured;/是否已设置 从代码中可以看出,除 DetailDateWidget 的对象 details, WidgetEntity 类中有以 上公有静态属性 id、updateMilis 、 updateMilis、postalCode、forecastDate、condition、 tempF、tempC、humidity、icon、windCondition、lastUpdateTime、isConfigured,完全 对应数据库中 weather_widget 的表。 DetailDateWidget.java 的部分代码: publicpublic classclass DetailDateWidget privateprivate Integer id;/编号 南京晓庄学院 2012 届本科毕业论文 21 privateprivate String dayOfWeek;/星期 privateprivate Integer low;/最低温度 privateprivate Integer hight;/最高温度 privateprivate String icon;/天气图标 privateprivate String condition;/天气

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论