手机统计天气预报原理理

安粉丝手游网为你免费提供手机天气预报软件,其包含墨迹天气,天气通等免费天气软件,有了它,用户可以及时了解天气状况,以做好出门准备!
/ 10.46MBM下载推荐理由:墨迹天气手机版是款最懂你的天气,是湖南卫视《天天向上》节目组强烈推荐,下载量稳居第一的天气软件。?全球4亿用户的选择,只因墨迹带给你最棒的使用体验。
/ 14.71MM下载推荐理由:精美、简约、大方,全球1.2亿用户的认可,只因我们更美更准更贴心。被中国联通评为2015年度生活服务类软件中巨省流量的产品,一年耗费的流量为同类产品的1/4。
/ 15.54MM下载推荐理由:国内外3000多个城市的天气预报和实时天气预警信息;更可查看大城市的逐小时预报以及2162个县市空气质量指数。
/ 9.51 MBM下载推荐理由:Ami天气软件是款最便捷的手机天气软件,其无需解锁即可查看实况天气温度、带伞提醒、空气质量、农历时钟等,同时还能出现逼真的天气动画,让你随时感受雨水的冲刷、闪电的震撼、阳光的照射、雾气的弥漫。
/ 1.38 MBM下载推荐理由:小沃天气APP是款数据准确的手机天气软件,其具有实时天气预报,24小时天气预报,一周天气预报功能,空气质量查看,天气灾害预警信息播报,以及天气变化通知等常用功能,让你出门不再为天气而烦恼!
/ 6.27 MBM下载推荐理由:锤子科技app是款不错的软件,其页面设计简单、优雅、易用的风格,十分耐看,而且关键功能也很实用,可以说是款手机必备的app之一了!
/ 5.17 MBM下载推荐理由:2345天气王安卓版是由上海二三四五科技推出的手机天气软件,其能对某一地未来一定时期内的天气状况进行预测并提供恶劣天气提前预警,让你方便出门!
/ 3.08 MBM下载推荐理由:我的天气app是款不错的手机软件,其能提供未来十日的天气状况,且能提供实时温度、空气质量等精确数据,强大的天气推送,覆盖全国全部大部分省市县,是一款不可或缺的天气app!
/ 7.87 MBM下载推荐理由:知趣天气APP是款最准的手机天气软件,其拥有全新的交互设计,更专业更生动的空气质量指数PM2.5,实时播报,同时数据更新方式优化,节省流量,同时大幅提升更新速度。
/ 8.78 MBM下载推荐理由:中央天气预报APP是款可以直播的手机天气软件,其包含国内外3000多个城市天气信息,并采用国内外多家气象机构数据,空气质量指数、污染指数、温度趋势、pm2.5等更加丰富、为您提供穿衣、洗车、紫外线、感冒、运动、旅游等生活指数,是您日常生活、出行旅游的必备APP!
/ 12.40 MBM下载推荐理由:墨迹天气2015手机版是由北京墨迹风云推出的天气软件,由湖南卫视《天天向上》节目组强烈推荐,下载量稳居第一的天气软件。全球3.5亿用户的选择,只因墨迹带给你最棒的使用体验。
/ 14.12MM下载推荐理由:国内完美结合天气与黄历功能的查天气软件,软件自发布以来,已经成为超过千万用户的选择,是众多电子市场推荐的装机必备软件之一。
/ 13.79 MBM下载推荐理由:最美天气(爱酷天气)APP是由宇龙酷派公司研发手机天气软件,其提供12小时和近期几日的准确数据,让你轻松掌控更全面的生活指数,同时还支持多城市查询管理,提醒你穿衣,洗车,化妆,运动等生活建议,是您最贴心生活助手!
/ 13.93MM下载推荐理由:最美天气去广告版是酷派公司研发的一款免费的,以“最准”“最美”为目标的天气预报应用,其不仅有准确的天气数据播报,还支持分钟级的降雨预报,不仅有精挑细选的百万余张漂亮的城市背景图和精美的美女图,更能满足将漂亮的天气分享给其它亿万级的朋友。
/ 13.93MM下载推荐理由:最美天气2016最新版是酷派公司研发的一款免费的,以“最准”“最美”为目标的天气预报应用,其不仅有准确的天气数据播报,还支持分钟级的降雨预报,不仅有精挑细选的百万余张漂亮的城市背景图和精美的美女图,更能满足将漂亮的天气分享给其它亿万级的朋友。
/ 8.6MM下载推荐理由:准确的天气信息,专业的黄历团队。黄历天气致力于给用户提供更靠谱的出行参考,是亿万用户喜爱的手机应用。
/ 9.6MM下载推荐理由:准确的天气信息,专业的黄历团队。黄历天气致力于给用户提供更靠谱的出行参考,是亿万用户喜爱的手机应用。
/ 14.5MM下载推荐理由:全球约5亿人在使用的天气APP,支持196个国家70多万个城市及地区的天气查询,精准定位及时推送,分钟级、公里级天气预报,实时监测阴晴雨雪。
/ 1.01MM下载推荐理由:查查看条码比价是综合性一站式查询工具,可以非常方便的查询日常生活中需要的各种信息 目前最新版本为1.1正式版,天气查询,快递查询,手机号码归属地查询等。
/ 7.73MM下载推荐理由:这是一款为你提供韩国天气情况的软件。你能随时查询当前的气象变化,为你的出行提供方便。
/ 14.39MM下载推荐理由:最美天气去广告版是基于最美天气最新版3.06的去广告破解版,精美简洁的最美天气2016最新版,新增摄影主题,各种类型的摄影背景图,满足各种风格要求。
/ 12.71MM下载推荐理由:全球约5亿人在使用的天气APP,支持196个国家70多万个城市及地区的天气查询,定位及时推送,分钟级、公里级天气预报,实时监测阴晴雨雪。
/ 13.08MM下载推荐理由:墨迹天气有多个版本,每个版本都有自己的特点。兼容了Symbian几乎全系列手机。安粉丝手游网下提供墨迹天气手机app是去广告版下载。
/ 4.68 MBM下载推荐理由:中华万年历6.1.5去广告版是生活必备手机日历软件,其提供与人们生活息息相关的日历查询功能,并将日程、提醒、生日、记事完美融合,数据云同步安全稳定;提供农历、黄历、星座、解梦、日期计算、生理规律等实用功能!中老年人智能手机教学:还在看广告等天气预报,那要手机干嘛用?
如何使用手机天气应用
科技很简单,就像水煮蛋,让老年朋友们也爱上这个科技世界。感谢大家,今天教大家的是如何使用手机上的天气功能。
智能手机还没有那么普及的时候,几乎所有人都时刻关注着新闻联播之后的天气预报以及各地方电视频道的天气预报,以此来安排出行或者准备工作,对于靠天吃饭的农民或者露天工作的人们来说,天气预报准不准倒在其次,但一定会看看以防万一。到现在,各位中老年朋友观看的天气预报一般不仅限于自己所在的地区,还会拓展到儿女求学、工作的城市,而每次在电视台的天气预报上记住几个城市未来几天的气候,显然十分麻烦也没有必要。
现在,大家可以在任何智能手机上找到天气预报应用,或者大家也可以在应用商店里搜索关键词下载,接下来我们就以手机自带天气软件讲解如何查看天气。
首先,以安卓手机为例,在手机上找到天气应用,点击天气:
如果应用获取了地理位置权限,那么天气打开之后默认的一般即是手机所在的城市,最上面即是实时气温,上下拖动可以查看更多天气信息,一次为未来几天的气温,未来24小时的气温趋势,左右拖动可以查看未来24小时的气温趋势,之下是空气质量,然后是空气湿度,风向风力,以及日出日落的时间。这就是本手机天气界面的全部显示:
而如果大家需要查看其他城市的天气,可以点击右上角的3道杠标志,进入管理城市界面,在本界面可以添加城市,点击界面下方的添加城市选项,进入添加城市界面:
搜索城市选择框下方是一些热门城市,一般是大城市,大家可以上下拖动点击选择。而如果大家需要添加的城市不再推荐城市里或者是在国外,那么可以点击搜索城市框,输入需要查询天气的城市中文名或者拼音,可以精确到县一级。比如瑞金,然后大家点击搜索框下方检索出来的城市即可:
然后回到天气主界面,大家可以在温度区域左右拖动切换城市查看天气。
如果大家是苹果手机,那么操作基本一样,点击天气,上下拖动依次可以查看温度、未来24小时气温、未来九天气温、日出日落时间、降雪概率、湿度、风向风速、体感温度、降水量、空气质量等情况:
如果大家需要添加城市,这里三道杠的符号在界面右下方,点击进入:
最上方是当前定位或已添加的城市,我们点击下方的加号按钮,然后可以在搜索输入框城市,这里苹果的天气应用只能精确到市一级,大家可以输入城市名称、邮政编码或机场位置搜索,然后点击搜索结果即可:
以上就是手机天气应用的操作展示,感谢大家,祝大家生活愉快~~
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
今日搜狐热点& & 现在我们查看天气预报的渠道越来越多了,手机、电脑、电视、报纸等等都可以查询。而手机由于是随身物品,查询天气预报更直接一些。我们现在看到的天气预报,其数据都来自中央气象台官方网站(www.nmc.cn)。只是有的手机天气预报软件设置不一样而已,其内容基本是一致的。
& & 手机常用的天气预报APP有墨迹天气、天气通等。而现在的手机系统软件基本上都整合了天气预报功能。加之QQ、中华万年历等应用软件也都有天气预报功能,因而极大地方便了大家对天气预报查询的需求。
& & 全国天气预报都是由中央气象台官方发布的。预报是应用大气变化的规律,根据当前及近期的天气形势,通过各地预报点的数据综合而进行的,是对某一地未来一定时期内的天气状况进行的预测。预测是根据对卫星云图的分析,结合有关气象资料、地形和季节特点、群众经验等综合研究后作出的。中央气象台的卫星云图,来自我国&风云一号&气象卫星。长期以来,我国利用&风云一号&卫星云图预测天气预报,其准确率是很高的。
& & 有的朋友认为,手机上的天气预报一点都不准。这可能有两个方面的原因:
& & 一是对天气预报的时效性和地域性了解得不够深入造成的。天气预报根据时效长短可分为0一2小时的现时预报或临近预报;0-12小时的短时预报;3天以内的短期预报;4&10天的中期预报;10天以上的长期预报以及一年以上的超长期预报。我们手机上看到的天气预报主要是短时预报和短期预报,有时也有周预报。此外,天气预报指的某地也是一个宽泛的地域概念,它涵盖的可能是一个县,甚至一个市的范围。民用天气预报并不是、也不可能是点对点的预报。所以,天气预报准只能是相对的准,是在一定范围内的准。
& & 二是天气预报本身的局限性造成的。世界上任何一样预测都不是绝对准确的。因为仅仅只是&预测&而已。对于天气预报来说,在一定范围内存在误差是很正常的。无论科技如何发展,人类永远无法穷尽一切未知世界。加之事物都是不断发展变化的,由于不确定性因素众多,气候因素的变化则更为严重。同时,我们预测的手段、工具、技术等等都存在一定的局限。所有这些都共同影响着天气预报的准确率。
相关文章推荐技术小站:
& 在线直播
时间:4月24日 10:00 - 11:30
& 地点:广州
时间:4月26日 13:00 - 18:00
& 地点:深圳
时间:4月27日 13:30 - 17:30
& 地点:深圳
时间:5月8日 13:00 - 18:00
张飞电子工程师速成全集
10天掌握PCB AD画板
教你高速PCB项目整体设计
如何设计STM32单片机系统?
物联网操作系统从写到用
讲师:华清远见
讲师:林超文
讲师:郑振宇
讲师:李述铜
移入鼠标可放大二维码
Android手机天气预报系统设计及实现
来源:本站整理
作者:叶子日 11:35
[导读] 本文在介绍基于Android 平台的应用程序设计原理的基础上,提出了Android 用户界面设计、获取并解析城市列表数据的一种方法,给出了在用户界面上呈现数据的原理与设计过程,最后通过
  Android 系统是Google 公司开发的一个开源手机操作系统,它包括了操作系统、用户界面和应用程序,即智能手机工作所需的全部软件。Android 的最大特点是它的开放性体系架构,不仅具有非常好的开发、调试环境,而且还具有各种可扩展的设施,包括丰富的图形组件、多媒体支持功能和强大的浏览器,而且已有许多比较成熟的应用案例。
  本文提出了智能手机天气实况预报系统的一种设计实现方法,供开发者参考。
  1 Android应用程序设计原理
  一个Android 应用程序,通常由AcTIvity、Intent Receiver、Service、CONtent Provider 四种功能组件构成。但是,并不是每一个Android 应用程序都需要用到这四种功能组件,而是只需上述四种功能组件的某些组合。
  1.1 Activity
  Activity 是最基本的Android 应用程序组件。大多数应用由多个屏幕组成,一个Activity 通常则是一个单独的屏幕。每一个Activity 都被实现为一个独立的类,并且从Activity 基类中继承而来。Activity 类将会显示由视图控件组成的用户接口,并对事件做出响应。Android 使用Intent 这个特殊类,实现在屏幕与屏幕之间移动。通过解析各种Intent,从一个屏幕导航到另一个屏幕是很简单的。当向前导航时,Activity 将会调用STartActivity(Intent myIntent)方法,然后,系统会在所有安装的应用程序中所定义的IntentFilter 中查找,找到最匹配myIntent的和Intent 对应的Activity.新的Activity 接收到myIntent 的通知后,开始运行。当startActivity 方法被调用时将触发解析myIntent 的动作。这个机制具有两点优势:一是能够重复利用从其他组件中以Intent 形式产生的一个请求;二是Activity 可以在任何时候被一个具有相同IntentFilter 的新Activity 取代。
  1.2 Intent Receiver
  通过Intent Receiver 实现的应用能够对一个外部的事件作出响应。Intent Receiver 在AndroidManifest.xml 中注册,也可以在代码中使用Context.registerReceiver()进行注册。当一个IntentReceiver 被触发时,应用不必对请求调用Intent Receiver,系统会在需要的时候启动应用。各种应用还可以通过使用Context.
  brOAdcastIntent()将它们自己的Intent Receiver广播给其他应用程序。
  1.3 Service
  Service 是一段长生命周期的、没有用户界面的程序。例如媒体播放器这个Activity 会使用Context.startService()来启动一个Service,从而可以在后台播放音乐。同时,系统也将保持这个Service 一直执行,直到Service 运行结束。系统可通过使用Context.bindService()方法,连接到一个Service 上(如果这个Service 还没有运行将启动它)。当连接到一个Service 之后,还可以利用Service 提供的接口与它通信。就媒体播放器来说,还可以进行暂停、重播等操作。
  1.4 Content Provider
  Android 应用程序能够将它们的数据保存到文件、SQL 数据库,甚至是任何有效的设备中。Content Provider 实现了应用数据与其他的应用程序的共享。Content Provider 类实现一组标准的方法,能够让其他应用程序保存或读取此ContentProvider处理的各种类型数据。在Android 中,默认使用SQLite 作为系统数据库,但使用方法略有不同。Android 中每一个应用程序都运行在各自的进程中,当访问其他应用程序的数据时,需要在不同的虚拟机之间传递数据,这样操作起来会有些困难(正常情况下,不能读取其他应用程序的数据库文件)。ContentProvider 正是解决不同的应用包共享数据的工具。
天气预报相关文章
天气预报相关下载
Android手机相关文章
Android手机相关下载
技术交流、积极发言! 发表评请遵守相关规定。
随着物联网技术的突飞猛进,生活中越来越多的家庭设备将会联上网络,变得“智慧”起来,智慧家庭的概念成了这几年媒体、企业、用户关注的焦点,而...
研华IoT嵌入式平台事业群总经理许杰弘表示,工业物联网 2009年就开始提出,至今缺乏临门一脚,现在是打开大门的时候了。研华WISE-PaaS物智联软件平台和...
创新实用技术专题
供应链服务
商务及广告合作
Jeffery Guo
关注我们的微信
供应链服务 PCB/IC/PCBA
版权所有 (C) 深圳华强聚丰电子科技有限公司
电信与信息服务业务经营许可证:粤B2-目录摘要 ................................................................................................................................................. 1需求分析 ........................................................................................................................................ 2一、开发背景 ............................................................................................................................... 2二、项目需求分析 ....................................................................................................................... 2总体设计 ........................................................................................................................................ 2一、系统规划 ............................................................................................................................... 2二、系统功能界面 ....................................................................................................................... 31. 设置预报城市界面: ..................................................................................................... 32.天气显示界面: ............................................................................................................ 43.Widget桌面小部件界面: ............................................................................................. 5三.设计目标 ............................................................................................................................... 6系统设计 ........................................................................................................................................ 6一、开发及运行环境 ................................................................................................................... 6二、数据库设计 ........................................................................................................................... 6三、主要方法及步骤 ................................................................................................................... 7四、主要方法及技术 ................................................................................................................... 7主要模块 ........................................................................................................................................ 7一、项目框架 ............................................................................................................................... 7二、主要功能实现 ....................................................................................................................... 81.获取城市码db_weather.db数据库文件 .......................................................................... 82.实现可伸缩性列表的的构建与过滤 ............................................................................... 123.GPS定位功能的实现 ..................................................................................................... 154.Widget窗体小部件的更新 ............................................................................................ 18功能测试 ...................................................................................................................................... 19结论 ............................................................................................................................................... 23 摘要Window操作系统的诞生成就了微软帝国,同时也造就了PC时代的繁荣, 然而如今,以Android和iPhone手机为代表的智能移动设备的发明与互联网云 技术的兴起却敲响了PC时代的丧钟!这也预示着移动互联网时代(3G)已经来临。
在这个互联网繁荣的时代,有一颗超新星,以它独特性能优势与人性化的 UI设计使它在短短的几年迅速的占领了智能移动设备的市场份额,它就是 Google的Android!这也意味着Google在移动互联网时代开始抢跑并领跑。
Android是基于Linux平台完全开源的手机操作系统,同时开发语言为 Java,这对于Java开发的我们是何等的诱人,程序员的技术要与时代同行,因此 我选择了以Android为平台的手机天气预报系统来作为我的毕业设计,选择手机 天气预报系统不仅可以提升技术,同时也很实用,为人们时刻了解天气状况和出 行带来了方便。 1需求分析一、开发背景近几年来随着3G技术成熟和智能手机的不断普及,移动应用的需求与日俱 增,移动应用开发成为当下最热门的技术之一。在Google和Android手机联盟 的共同推动下,Android在众多移动应用开发平台中脱颖而出。Android是一个 真正意义上的开源智能手机操作系统,该系统一经推出立即受到全球移动设备厂 商和开发者的热捧。为顺应潮流,本设计旨在搭载Android的移动设备上运行, 实现天气状况的实时动态更新与显示,方便人们的出行与生活。二、项目需求分析根据功能的需求,分析此项目的主要功能应具备以下几点:1. 精确查询定位全国各地城市未来几天内的实时天气状况2. 系统要具的实用性,符合用户查看信息习惯,界面设计优美3. 系统要具有稳定性,且在一定程度上节省流量的开销 总体设计一、系统规划由上述的需求,现将系统分为三大模块:天气显示界面模块、预报城市设置 模块与Widget桌面小部件模块。各系统模块功能如下:1). 天气显示界面模块显示指定城市三天内的天气状况,包括日期、城市名称、温度、风力与当 日的建议,用户可通过按菜单键来显示菜单更新当前天气与设置天气显示的界面 背景,以及跳转至设置预报城市界面来更换预报城市。2). 预报城市设置模块由自动设置预报城市与手动设置二部分组成,自动设置实现GPS定位功 能,自动确定当前用户所在地;而手动设置则通过可伸展性下拉列表单击选择系 统数据库中预存的城市来进行设置,同时为了方便用户查找,支持以输入框的形 式来过滤查询预报城市。当单击选中城市时跳转至天气显示界面,来显示该城市 当三天内的天气状况;第一次运行时自动跳到该界面。3). Widget桌面小部件模块为了方便用户实时了解天气状况,特别添加在Android系统桌面上显示 当前天气与时间的天气小部件,使用户拿起手机的第一时刻就能了解天气,同时 当用户单击小部件时,自动跳转至天气显示界面,显示三天内的详细天气。 2 二、系统功能界面1. 设置预报城市界面:1.1 当第一次运行程序时,跳转至城市设置界面进行预报城市的选择: 1.2 用户可以通过单击选择“定位当前城市”的方式调用系统GPS功能自动 定位预报城市: 3 1.3 用户可通过输入框过滤查询当前系统中预存的城市: 2.天气显示界面:2.1 选择了预报城市后,系统跳转至天气显示界面,显示该城市三天内的实 时天气: 4 2.2 在天气界面中用户可通过按菜单键来调出菜单,选择城市,更新天气与更 换背景: 3.Widget桌面小部件界面:方便用户第一时间了解天气动态,添加widget显示功能界面: 5 三.设计目标设计完成一个实用稳定的天气预报系统,同时要廉价使其能滿足大部分用户 的需求,因此针对上述要求,本设计应滿足:1. 系统能及时的返反馈指定预报城市的天气情况2. 自动定位用户所在城市,支持GPS定位3. 节省流量开销,规定在指定的时间间隔内才更新天气,其它时段显示缓存的天气4. 操作方便快捷,使用简单,界面设计美观大方,支持widget系统设计一、开发及运行环境JDK1.6.10Eclipse3.5Android Development Toolkit (ADT) 15.0.0Android 2.2及以上Windows XP及以上 二、数据库设计由于在本系统中是通过中央气象台的WebService 提供的API访问得到的天气 预报,在查询指定城市的天气时,需要用到它提供的城市码,而城市码相对稳定 不变,所以在构建系统时将其事先通过Android的网络访问技术将其缓冲到本地 SQLite数据库进行保存起来,方便以后的查询,同时节省了流量开销。综上所 述在本地建立db_weather.db的数据库,其中的表结构如下: 其中只存在两个表: provices和citysCity中存在city_num用天气的查询,同时还存在外键province_id与provices表 形成1对n的关系。 6三、主要方法及步骤1. 搭建Android开发环境,并建立一个android2.2版本名为WeatherSystem 项目2. 首先编写网络访问代码,访问http://m.weather.com.cn/data5/city.xml中央气 象站解析得到所有城市码并导出保存得到的db_weather.db数据文件3. 在程序第一次运行时,将db_weatcher.db数据库文件导入到应用程序数据 库中4. 建立设置城市界面,读取数据库文件,获取省份,城市以及对应的城市码。5. 接收用户选择的城市码,访问:http://m.weather.com.cn/data/&城市码&.html 得到天气信息6. 解析天气信息,将城市码及天气信息缓冲下来,并为其设置有效时间,方 便下次启动时直接得到天气信息,过期则从网上更新7. 定时由保存的城市码更新天气信息四、主要方法及技术1. Android手机的界面UI设计2. Android的网络通信3. Android的广播4. GPS调用解析5. Widget小部件编程6. XML与JSON解析7. SQLite数据库操作8. Android文件操作主要模块一、项目框架在装有ADT插件的Eclipse中新建一个名为WeatherSystem的Android2.2版本的项目, 项目主要文件结构如下:WeatherSystem|__src|
|_com.weather.app|
|_MainActivity.java|
|_SetCityActivity.java|
|_UpdateWidgetService.java|
|_WeatherWidget.java|
|_com.weather.comp|
|_GPSListAdapter.java|
|_MyListAdpater.java|
|_com.weather.dao|
|_DBHelper.java|
|_com.weaher.utils7|
|_LocationXMParser.java|
|_WeatherInfoParser.java|
|_WebAccessTools.java|__res|
|_ drawable|
|_gps.xml|
|_main.xml|
|_widget_layout.xml|
|_set_city.xml|
|_configure_menu.xml|
|_db_weather.db|
|_color.xml|
|_strings.xml|
|_weather_widget.xml||_AndroidManifest.xml二、主要功能实现1.获取城市码db_weather.db数据库文件获取全国各地的城市码,是通过访问中央气象局网从省份直辖市到城镇一级 一级深入得到的,获得一个地区的城市码总共需要访问4次网络,分别如下:1. 访问http://m.weather.com.cn/data5/city.xml得到省份直辖市列表与它的编号:01|北京,02|上海,03|天津,04|重庆,05|黑龙江,06|吉林,07|辽宁,08|内蒙古,…2. 访问http://m.weather.com.cn/data5/city&省份编号&.xml得到该省份直辖市的城市编号(如访问山东:http://m.weather.com.cn/data5/city12.xml)1201|济南,1202|青岛,1203|淄博,1204|德州,1205|烟台,1206|潍坊,……3. 访问http://m.weather.com.cn/data5/city&城市编号&.xml得到该城市的县区编号(如访问济南:http://m.weather.com.cn/data5/city1201.xml) 120101|济南,120102|长清,120103|商河,120104|章丘,120105|平阴,….4. 访问http://m.weather.com.cn/data5/city&县区编号&.xml得到该县区的城市码(如访问长清:http://m.weather.com.cn/data5/city120102.xml) 首先实现上述功能需使用Android的网络访问技术,故编写工具类WebAccessTools类如下: /*** 根据给定的url地址访问网络,得到响应内容(这里为GET方式访问)* @param url 指定的url地址* @return web服务器响应的内容,为&code&String&/code&类型,当访问失败时,返回为null
String getWebContent(String url) {//创建一个http请求对象HttpGet request = new HttpGet(url);HttpParams以用来设置HTTP参数
//创建HttpParams params=new BasicHttpParams();//设置连接超时或响应超时HttpConnectionParams.setConnectionTimeout(params, 3000);HttpConnectionParams.setSoTimeout(params, 5000);//创建一个网络访问处理对象HttpClient httpClient = new DefaultHttpClient(params);try{//执行请求参数项HttpResponse response = httpClient.execute(request);//判断是否请求成功if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {// 获得响应信息String content = EntityUtils.toString(response.getEntity());} else {// 网连接失败,使用Toast显示提示信息Toast.makeText(context, "网络访问失败,请检查您机器的联网设备!",Toast.LENGTH_LONG).show();}}catch(Exception e) {e.printStackTrace();} finally {//释放网络连接资源httpClient.getConnectionManager().shutdown();}} 由上面访问的可知,得到的编码与名称都是“编码|名称”的形式,因此在这也 编写一个解析得到城市码的工具类WeatherInfoParser,用于解析从服务器中得到 的城市码: 9/**
* 通过解析content,得到一个一维为城市编号,二维为城市名的二维数组
* 解析的字符串的形式为: &code&编号|城市名,编号|城市名,.....&/code&
* @param content 需要解析的字符串
* @return 封装有城市编码与名称的二维数组
public static String[][] parseCity(String content) {
//判断content不为空
if(content!=null&&content.trim().length()!=0) {
StringTokenizer st=new StringTokenizer(content, ",");
int count = st.countTokens();
String[][] citys = new String[count][2];
int i=0, index=0;
while(st.hasMoreTokens()) {
String city = st.nextToken();
index = city.indexOf('|');
citys[i][0] = city.substring(0, index);
citys[i][1] = city.substring(index+1);
}编写这两个类后现在就是编写从服务器端用程序遍历得到全国各地的城市名与 城市码,并将它们分别的保存在String[][] provinces数组,String[][] childs数组与 String[][] cityCode中: WebAccessTools webTools = new WebAccessTools(this);//得到访问网络的内容String webContent=webTools.getWebContent("http://m.weather.com.cn/data5/city.xml");//第一次解析得到的为省份或一级直辖市String[][] provinces = WeaterInfoParser.parseCity(webContent);String[] groups = new String[provinces.length];String[][] childs = new String[provinces.length][];String[][] cityCode = new String[provinces.length][];for(int i=0; i& provinces. i++) {groups[i] = provinces[i][1];//由省份码来得到城市码StringBuffer urlBuilder= new StringBuffer("http://m.weather.com.cn/data5/city");urlBuilder.append(provinces[i][0]);urlBuilder.append(".xml");webContent = webTools.getWebContent(urlBuilder.toString()); 10
String[][] citys = WeaterInfoParser.parseCity(webContent);//用于保存所的有townsString[][][] towns = new String[citys.length][][];//计算总的城镇数int sum=0;for(int j=0; j&citys. j++) {由城市码来得到地方码 //urlBuilder= new StringBuffer("http://m.weather.com.cn/data5/city");urlBuilder.append(citys[j][0]);urlBuilder.append(".xml");webContent = webTools.getWebContent(urlBuilder.toString());towns[j] = WeaterInfoParser.parseCity(webContent);sum = sum + towns[j].}childs[i] = new String[sum];cityCode[i] = new String[sum];sum=0;for(int j=0; j&citys. j++) {for(int n=0; n&towns[j]. n++) {if(n==0)childs[i][sum] = towns[j][n][1];elsechilds[i][sum] = towns[j][0][1] + "." + towns[j][n][1];urlBuilder= new StringBuffer("http://m.weather.com.cn/data5/city");urlBuilder.append(towns[j][n][0]);urlBuilder.append(".xml"); webContent = webTools.getWebContent(urlBuilder.toString());String[][] code=WeaterInfoParser.parseCity(webContent);cityCode[i][sum] = code[0][1];sum = sum + 1;}}urlBuilder=} 接下来就是将得到的上面的三个数组建立数据库文件db_weather.db保存起来, 用到android.database.sqlite.SQLiteDatabase类的静态方法:SQLiteDatabase openOrCreateDatabase(String path, CursorFactory factory)来创建一 个数据库文件,其中的path表示数据库存放的路径,而factory中游标工厂,这 里可将它设为空,从而得到SQLiteDatabase对象,则再调用它的execSQL(String
sql)方法来执行保存数据库的操作,从而将上面的三个数组转换为数据库中的数 据,最后使用ADT插件中的DDMS工具将得到的数据库文件从Android模拟器
11中导出,最终就得到了db_weather.db文件。以后上述的代码就可以不使用,直 接将db_weather.db文件放入资源文件夹res目录中的raw目录中,则在程序第一 次运行时导入到/data/data/com.weather.app/databases目录中就行了,其中关于数 据库的导入实际是Java中文件的复制。 2.实现可伸缩性列表的的构建与过滤实现可伸缩性列表是通过继承android.widget.BaseExpandableListAdapter适 配器实现的,其中主要实现它的public View getGroupView()得列表的一级列表和 public void getChildView()得到列表的二级子列表实现的,在这里由于只是实现文 本显示功能,故用TextView组件来填充就行了,如果要构造这个自定义的适配 器,则只需在提供存放省份直辖市的一级列表的数组String[] groups和存放对应 的城镇的二级列表的String[][] childs就行了。同时为了兼具过滤功能,还要需再实现android.widget.Filterable接口,这个 接口有一个getFilter()返回Filter过滤器的列表,故还要提供一个Filter过滤类, 在本系统中,实现的是一个内部类CityFilter,它继承android.widget.Filter类,覆 盖实现了两个方法,一个是performFiltering()得到FilterResults过滤结果对象方 法,另一个是根据得到的FilterResults对象更新适配器的publishResults()方法。其中的performFiltering(CharSequence constraint)方法的实现是通过constraint 这个关键字以省份直辖市为单位进行匹配,如果匹配成功,则添加该省份以下的 所有城市,如果匹配不成功,则再逐一与这个省份的下的城市配匹,则只添加匹 配的城市,其中匹配的结果放在Map&Integer, ArrayList&Integer&& values这样的 向量中,再由新建的FilterResults封装返回,(具体实现如下): 1. 首先是对关键字进行判断是否为空,如为空则由values添加所有省份与城市,其中的allGroups和allChilds保存的是所有的省份与对应的城市://当过滤条件为空时,返回所有的省份与城市if(constraint == null || constraint.length() == 0) {for(int i=0; i&allGroups. i++) {ArrayList&Integer& index = new ArrayList&Integer&();//添加所有与之对应的城市for(int j=0; j&allChilds[i]. j++) {index.add(j);}values.put(i, index);}} 2. 如果关键字constraint不为空,则以省份为单位进行匹配,省份匹配的添加下面的所在城镇,如果不匹配,则进行步深入匹配城镇,添加符合条件 的城镇: 12 String filterStr = constraint.toString();for(int i=0; i&allGroups. i++) {// 查找省名是否包含用户输入的字符串if(allGroups[i].contains(filterStr)) {ArrayList&Integer& index = new ArrayList&Integer&();//添加所有与之对应的城市for(int j=0; j&allChilds[i]. j++) {index.add(j);}values.put(i, index);} else {ArrayList&Integer& index = new ArrayList&Integer&();//如果省份名没有,则查找它下面的城市名是否包含for(int j=0; j&allChilds[i]. j++) {if(allChilds[i][j].contains(filterStr)) {index.add(j);}}//如果添加进入了城市,说明存在,则它的省份也添加进去if(index.size() & 0) {values.put(i, index);} else {index =}}} 3. 得到过滤的结果后将其用FilterResource封装后返回: FilterResults results = new FilterResults();results.values =results.count = values.size(); 另外的publishResults(CharSequence constraint,
FilterResults results)方法就 是根据上面得到的results对象来得到新的String[] groups与String[][] Childs数组, 再调用BaseExpandableListAdapter父类的notifyDataSetChanged()方法来更新列 表,从而实现过滤后结果的显示(具体实现如下):1. 首先将参数FiltersResuls对象转换为Map&Integer, ArrayList&Integer&&filterResult,然后来判断过滤后的结果长度时否为0,如果长度为0则说 明过滤后的结果为空,则调用父类的notifyDataSetInvalidated()方法来阻 止列表的更新:2. 如果长度不为0,则说明存在过滤结果,则将它转换为groups数组与childs数组,并调用notifyDataSetChanged()方法实再更新:13 String[] newGroups = new String[count];String[][] newChilds = new String[count][];int index = 0;int length = 0;groups和childs
//得到新的for(int i=0; i&allGroups. i++) {if(filterResult.containsKey(i)) {newGroups[index] = allGroups[i];//符合条件的城市ArrayList&Integer& citys = filterResult.get(i);length = citys.size();newChilds[index] = new String[length];for(int j = 0; j& j++) {newChilds[index][j] = allChilds[i][citys.get(j)];}index = index + 1;}}和childs
//设置groupsgroups = newGchilds = newC//更新列表notifyDataSetChanged();//判断是否展开列表count = getGroupCount();if(count & 34) {//展开伸缩性列表for(int i=0; i& i++) {provinceList.expandGroup(i);}} else {//收缩伸缩性列表for(int i=0; i& i++) {provinceList.collapseGroup(i);}} 如上所述则就实现了带有过滤性可伸展性列表适配性的实现,则在使用时在 XML组件配置文件中使用ExpandableListView列表,并调用它的setAdapter()方 法来,加载自定义的适配器。而在使用它的过滤功能时则调用自定义适配器的
getFilter()得到过滤Filter对象,再调用Filter对象的filter(String)方法实现的,在 本系统中才用的时触发文本输入框EditText的TextChangedListener事件时调用从 而实现手动选择预报城市的过滤查询。14 3.GPS定位功能的实现Android中调用GPS功能,首先要获取GPS定位管理器LocationManager, 获取LocationManager后就是获取LocationProvider,可以通过Criteria对象设置 过滤条件来获得最符合用户需求的LocationProvider,得到LocationProvider后就 可通过调用LocationMananger对象的getLastKnownLocation()方法来获取Location地址封装对象,最后由实例化的Geocoder将Location中的经度和纬度 反编译为地址信息集合List对象,从而由List对象来得到当前用户地址名。在 开发过程中通过Eclipse中的ADT插件的DDMS可以为Android模拟器指定任 意地址,如下: 当在模拟器控制面板中指定经纬度后,则会在模拟器中出现GPS的标志: 但在实际开发调用GPS功能过程时,只能获取经度与纬度,而在使用Geocoder 反编译地址时报错: 使用的调用代码如下: 后来通过网上搜索得知在Android2.2模拟器中调用Geocoder需要backend服务:
”The Geocoder class requires a backend service that is not included in the coreandroid framework. The Geocoder query methods will return an empty list if there no
backend service in the platform.“15 但并有说此服务要怎么得到,这看起来像是Android2.2模拟器的一个Bug,故而 在本设计中采用访问[http://maps.google.cn/maps/geo?output=xml&q=经度,纬度]的形式来得到详备的地址信息(来源于:http://www.iteye.com/problems/69517), 如下访问http://maps.google.cn/maps/geo?output=xml&q=30..065762: 其中的output参数指定的是服务器响应的格式,除了XML格式还可以为JSON, CSV等格式。由此可知,为了实现GPS的定位功能还需要实现一个解析XML的工具类,在本系统中由工具类LocationXMParser完成,它继承至org.xml.sax.helpers.DefaultHandler 类,用于专门用于解析XML文件。上述的GPS功能具体实现过程如下:1. 得到LocationManager系统定位服务管理者: LocationManager locationManager =(LocationManager)getSystemService(Context.LOCATION_SERVICE); 162. 设置Geocoder对象,过滤得到符合条件的LocationProvider,再由LocationProvider得到封装经纬度信息的Location对象: Criteria标准用于过滤LocationProvider
//设置一个Criteria criteria = new Criteria();//设置不需要高度信息criteria.setAltitudeRequired(false);//设置不需要方位信息criteria.setBearingRequired(false);//得到最好的可用的ProviderString provider = locationManager.getBestProvider(criteria, true);//得到当前的位置对象Location location = locationManager.getLastKnownLocation(provider);double latitude = location.getLatitude();
//得到经度double longitude = location.getLongitude(); //得到纬度 3. 得到经纬度后再访问http://maps.google.cn/maps/geo来得到含地址信息的XML文本内容,并用自定义的LocationXMParser工具类解析封装得到此 经纬度对应的城市名: //根据经纬度得到详细的地址信息//定义的一个网络访问工具类WebAccessTools webTools = new WebAccessTools(this);String addressContext = webTools.getWebContent("http://maps.google.cn/maps/geo?output=xml&q="+
latitude+","+longitude);//解析地址信息SAXParserFactory spf = SAXParserFactory.newInstance();try {SAXParser parser = spf.newSAXParser();XMLReader reader = parser.getXMLReader();LocationXMLParser handler = new LocationXMLParser();reader.setContentHandler(handler);StringReader read = new StringReader(addressContext);//
创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入InputSource source = new InputSource(read);//开始解析reader.parse(source);//判断是否存在地址if(handler.hasAddress())return handler.getDetailAddress();} catch (Exception e) {e.printStackTrace();}17上面代码中的getDetailAdress()方法返回的是一个Map对象,其中封装了从 XML中解析得到的国家、省份、县区和城市四个信息,在得到这些信息后,系 统将与数据库中预存的省份城市相比较,最终匹配得到该地区的城市码完成GPS 自动定位功能的实现。 4.Widget窗体小部件的更新由于widget中的时钟关系,需要对widget显示进行时刻的更新用来保持与 系统中时间的一致。实现这个功能需要用到AlarmManager类,这个类专门用来 设定在某个指定的时间去完成指定的事件。设计思路是在Widget的onUpdate方 法中启动一个自定义更新后台服务,更新widget,并设定下一分钟再次调用此服 务。具体实现过步骤如下:1. 首先自定义一个后台运行服务类继承至Service类,实现它的服务开始运行调用的onStart()方法: super.onStart(intent, startId);//得到widget
的布局对象RemoteViews views = WeatherWidget.getWeatherView(this);//得到AppWidgetManager widget管理器AppWidgetManager appWidgetManager=AppWidgetManager.getInstance(this);int[] appids=appWidgetManager.getAppWidgetIds(new ComponentName(this,WeatherWidget.class));
//得到城市码,并更新天气SharedPreferences sp=getSharedPreferences(SetCityActivity.CITY_CODE_FILE,
SetCityActivity.MODE_PRIVATE);
String cityCode= sp.getString("code", "");if(cityCode!=null&&cityCode.trim().length() & 0) {WeatherWidget.updateAppWidget(views, this,appWidgetManager, cityCode);
}appWidgetManager.updateAppWidget(appids, views);//获取当前时间设置警报服务Date date = new Date();long now =date.getTime();long unit=60000;//间隔一分钟int s=date.getSeconds();
//得到秒数unit=60000-s*1000;
//将时间精确到秒pintent=PendingIntent.getService(this, 0, intent, 0);//计时器alarm=(AlarmManager)getSystemService(Context.ALARM_SERVICE);//AlarmManager.RTC_WAKEUP设置服务在系统休眠时同样会运行//第二个参数是下一次启动service时间alarm.set(AlarmManager.RTC_WAKEUP, now+unit, pintent);182. 然后在实现AppWidgetProvider的widget类的onUpdate方法中启动这个自定义的服务: //启动一个自定义更新widget的后台服务context.startService(new Intent(context,UpdateWidgetService.class)); 3. 除了启动这个服务是不够的,当用户删除widget部件时,后台服务也必须停止,这样就必须实现Service类中的另一个方法onDestroy()方法,该 方法在Service停止时调用,在这里用于取消AlarmManager设置的警报 服务: //当widgetcontext.stopService方法来指定销毁service时,被调用
中通过调用public void onDestroy() {//取消定时管理if(alarm!=null) {alarm.cancel(pintent);}super.onDestroy();}4. 则在widget类的onDisabled()方法中调用stopService方法来停止后台服务,其中的onDisabled方法在widget被用户删除时由系统自动调用:public void onDisabled(Context context) {
super.onDisabled(context);//关闭后台服务
context.stopService(new Intent(context,UpdateWidgetService.class));
}在自定了一个Service服务后,系统必须在清单文件AndroidManifest.xml中声 明自定义的服务:&!-- 自定义的后台更新widget服务 --&
&service android:name=".UpdateWidgetService"&&/service&这样就实现了widget的更新功能,其实在配制widget的AppWidgetProviderInfo的配制文件中通过设置android:updatePeriodMillis属性来 设置widget的自动更新,它的单位中毫秒,但由于自动更新对性能的损坏,故 它有一个最低值,这最低值长于一分钟,故而与该系统的要求不符,故以调用后 台Service的方式来解决。功能测试 本系统的的测试,主要是通过手动操作该系统,查看是否存在异常或操作的 结果是否符合设计初衷来完成的,现将系统的主要操作结果截图展示如下: 19 一. 当系统初次启动时,由于没有设置预报城市,则自动由MianActivity天气显示视图跳转到SetCityActivity城市设置视图,并要求用户选择预报城 市,如下: 二. 接下来点击确定选择城市,则系统确定用户单击城市的城市码跳转至天气显示界面,如下: 20 三. 跳转到天气显示界面后,可单击“菜单”按钮来显示天气的菜单: 四. 选择“壁纸”菜单项可以更换程序背景图片如下: 五. 选择“设置城市”菜单项,则跳转至设置城市的视图界面,在这里可以在输入城市的关键字在进行过滤查询,这样就及大的方便了用户的选择: 21 六. 如果要定位当前的城市,以单击“定位当前城市”自动设置城市,而在此之前必须,在DDMS控制面板中在指定一个经纬度,来开启GPS功能: 七. widget窗体小部件的添加是通过长按桌面的空白处,出现一个选项菜单,然后选择“窗体小部件”,接着在弹出的选项中选择“天气精灵”即本系 统,则设计的小窗体部件将会出现在主屏幕的桌面上: 22 结论本系统基本实现了需求的中的天气预报的功能,界面设计也较漂亮,具有一 定的实用性。其中的天气数据全部来源于网络,故在运行时一定要确保系统所处 环境的网络流畅性。由于开发过程是在Android2.2版本的模拟器上运行的,故测 试的结果可能存在一定的局性性。同时在设计之初考虑问题的不全面,使得在无 网状态下设计不完善,运行本系统在无网状态下时会异常停止。而且由于本人的 技术有限,使得在GPS自动定位时功能不稳定。23 通过本系统的开发使得我对于Android平台的应用开发有了一定的了解,特 别是其中的GPS功能与Widget的更新功能的实现让我体会到了实践的意义,只 有自己认真动手才能算真正的掌握,书本上的知识也不一定完全准确,在遇到问 题时可以通过网上搜索的方式得到解决。同时在本系统中反映的问题也让我意识 到了自己的一些不足,明解了以后学习时的基本方向。 参考文献:《Android应用开发揭秘》 杨丰盛 机械工业出版社《Android应用开发详解》Google Android API郭宏志
电子出版社
欢迎转载:
相关推荐:

我要回帖

更多关于 天气预报的原理 的文章

 

随机推荐