赞
踩
摘要1需求分析2一、开发背景2二、项目需求分析2总体设计2一、系统规划2二、系统功能界面3设置预报城市界面:3天气显示界面:4Widget 桌面小部件界面:5三.设计目标6系统设计6一、开发及运行环境6二、数据库设计6三、主要方法及步骤7四、主要方法及技术7主要模块7一、项目框架7二、主要功能实现8获取城市码 db_weather.db 数据库文件8实现可伸缩性列表的的构建与过滤12GPS 定位功能的实现15Widget 窗体小部件的更新18功能测试19结论23
Window 操作系统的诞生成就了微软帝国,同时也造就了 PC 时代的繁荣, 然而如今,以 Android 和 iPhone 手机为代表的智能移动设备的发明与互联网云技术的兴起却敲响了 PC 时代的丧钟!这也预示着移动互联网时代(3G)已经来临。
在这个互联网繁荣的时代,有一颗超新星,以它独特性能优势与人性化的
UI 设计使它在短短的几年迅速的占领了智能移动设备的市场份额,它就是
Google 的 Android!这也意味着 Google 在移动互联网时代开始抢跑并领跑。
Android 是基于 Linux 平台完全开源的手机操作系统,同时开发语言为
Java,这对于 Java 开发的我们是何等的诱人,程序员的技术要与时代同行,因此我选择了以 Android 为平台的手机天气预报系统来作为我的毕业设计,选择手机天气预报系统不仅可以提升技术,同时也很实用,为人们时刻了解天气状况和出行带来了方便。
近几年来随着 3G 技术成熟和智能手机的不断普及,移动应用的需求与日俱增,移动应用开发成为当下最热门的技术之一。在 Google 和 Android 手机联盟的共同推动下,Android 在众多移动应用开发平台中脱颖而出。Android 是一个真正意义上的开源智能手机操作系统,该系统一经推出立即受到全球移动设备厂商和开发者的热捧。为顺应潮流,本设计旨在搭载 Android 的移动设备上运行, 实现天气状况的实时动态更新与显示,方便人们的出行与生活。
根据功能的需求,分析此项目的主要功能应具备以下几点:
为了方便用户实时了解天气状况,特别添加在 Android 系统桌面上显示当前天气与时间的天气小部件,使用户拿起手机的第一时刻就能了解天气,同时当用户单击小部件时,自动跳转至天气显示界面,显示三天内的详细天气。
计算机毕设——手机天气预报系统[/caption]
方便用户第一时间了解天气动态,添加 widget 显示功能界面:
设计完成一个实用稳定的天气预报系统,同时要廉价使其能滿足大部分用户的需求,因此针对上述要求,本设计应滿足:
JDK1.6.10
Eclipse3.5
Android Development Toolkit (ADT) 15.0.0 Android 2.2 及以上
Windows XP 及以上
由于在本系统中是通过中央气象台的WebService 提供的API 访问得到的天气预报,在查询指定城市的天气时,需要用到它提供的城市码,而城市码相对稳定不变,所以在构建系统时将其事先通过 Android 的网络访问技术将其缓冲到本地
SQLite 数据库进行保存起来,方便以后的查询,同时节省了流量开销。综上所述在本地建立 db_weather.db 的数据库,其中的表结构如下:
其中只存在两个表: provices 和 citys
City 中存在 city_num 用天气的查询,同时还存在外键 province_id 与 provices 表形成 1 对 n 的关系。
在装有 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.utils
||_LocationXMParser.java
||_WeatherInfoParser.java
||_WebAccessTools.java
| res
||_ drawable
|||_(略)
||_layout
|||_gps.xml
|||_main.xml
|||_widget_layout.xml
|||_set_city.xml
||_menu
|||_configure_menu.xml
||_raw
|||_db_weather.db
||_values
|||_color.xml
|||_strings.xml
||_xml
||_weather_widget.xml
|
|_AndroidManifest.xml
FilterResults results = new FilterResults(); results.values = values;
results.count = values.size();
另外的 publishResults(CharSequence constraint,FilterResults results)方法就是根据上面得到的results 对象来得到新的String[] groups 与String[][] Childs 数组, 再调用 BaseExpandableListAdapter 父类的 notifyDataSetChanged()方法来更新列表,从而实现过滤后结果的显示(具体实现如下):
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 core android framework. The Geocoder query methods will return an empty list if there no backend service in the platform.“
但并有说此服务要怎么得到,这看起来像是 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.659269,104.065762:
其中的 output 参数指定的是服务器响应的格式,除了 XML 格式还可以为 JSON, CSV 等格式。
由此可知,为了实现 GPS 的定位功能还需要实现一个解析 XML 的工具类,在本系统中由工具类 LocationXMParser 完成,它继承至 org.xml.sax.helpers.DefaultHandler 类,用于专门用于解析XML 文件。
上述的 GPS 功能具体实现过程如下:
在自定了一个 Service 服务后,系统必须在清单文件 AndroidManifest.xml 中声明自定义的服务:
<!– 自定义的后台更新widget服务 –>
<service android:name=“.UpdateWidgetService”></service>
这样就实现了widget的 更 新 功 能 , 其 实 在 配 制widget的
AppWidgetProviderInfo 的配制文件中通过设置 android:updatePeriodMillis 属性来设置 widget 的自动更新,它的单位中毫秒,但由于自动更新对性能的损坏,故它有一个最低值,这最低值长于一分钟,故而与该系统的要求不符,故以调用后台 Service 的方式来解决。
本系统的的测试,主要是通过手动操作该系统,查看是否存在异常或操作的结果是否符合设计初衷来完成的,现将系统的主要操作结果截图展示如下:
一. 当系统初次启动时,由于没有设置预报城市,则自动由 MianActivity 天气显示视图跳转到 SetCityActivity 城市设置视图,并要求用户选择预报城市,如下:
二. 接下来点击确定选择城市,则系统确定用户单击城市的城市码跳转至天气显示界面,如下:
三. 跳转到天气显示界面后,可单击“菜单”按钮来显示天气的菜单:
四. 选择“壁纸”菜单项可以更换程序背景图片如下:
五. 选择“设置城市”菜单项,则跳转至设置城市的视图界面,在这里可以在输入城市的关键字在进行过滤查询,这样就及大的方便了用户的选择:
六. 如果要定位当前的城市,以单击“定位当前城市”自动设置城市,而在此之前必须,在 DDMS 控制面板中在指定一个经纬度,来开启 GPS 功能:
七. widget 窗体小部件的添加是通过长按桌面的空白处,出现一个选项菜单, 然后选择“窗体小部件”,接着在弹出的选项中选择“天气精灵”即本系统,则设计的小窗体部件将会出现在主屏幕的桌面上:
本系统基本实现了需求的中的天气预报的功能,界面设计也较漂亮,具有一定的实用性。其中的天气数据全部来源于网络,故在运行时一定要确保系统所处环境的网络流畅性。由于开发过程是在 Android2.2 版本的模拟器上运行的,故测试的结果可能存在一定的局性性。同时在设计之初考虑问题的不全面,使得在无网状态下设计不完善,运行本系统在无网状态下时会异常停止。而且由于本人的技术有限,使得在 GPS 自动定位时功能不稳定。
通过本系统的开发使得我对于 Android 平台的应用开发有了一定的了解,特别是其中的 GPS 功能与 Widget 的更新功能的实现让我体会到了实践的意义,只有自己认真动手才能算真正的掌握,书本上的知识也不一定完全准确,在遇到问题时可以通过网上搜索的方式得到解决。同时在本系统中反映的问题也让我意识到了自己的一些不足,明解了以后学习时的基本方向。
参考文献:
《Android 应用开发揭秘》 杨丰盛 机械工业出版社
《Android 应用开发详解》 郭宏志 电子出版社
Google Android API
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。