《基于Android的3G手机天气预报系统设计.doc》由会员分享,可在线阅读,更多相关《基于Android的3G手机天气预报系统设计.doc(42页珍藏版)》请在三一办公上搜索。
1、分 类 号:TP315学校代码:11460学 号:08413105南京晓庄学院本科生毕业论文Android 3G手机天气预报系统 Android3G phone weather forecast system 所在院(系):学 生 姓 名: 指 导 老 师: 研究起止日期:二一一年十二月至二一二年五月目 录绪 论11.1 研究内容11.2 研究意义11.3 可行性研究11.4 研究现状和发展趋势2二 、系统分析42.1 研究目标42.2 需求分析42.3 性能分析5三、平台与关键技术研究63.1 Android开发环境介绍63.2 Android开发平台搭建63.3 Android关键技术研究
2、7四、系统设计104.1模块104.2 数据交互124.3 用户交互134.4 系统管理154.5 数据库设计与实现194.6 程序模块设计24五、系统实现与测试285.1 系统实现285.2 系统测试31参考文献34致谢35摘 要随着智能手机的快速普及,智能手机操作系统市场非常活跃。为了让智能手机用户能够随时随地查询互联网所提供的服务,让手机能够通过移动网以及互联网访问Web网站并处理各种各样的业务,一种高效的办法就是将应用系统的功能拓展到手机终端上。因此,智能手机的应用软件及其需要的服务将有广阔的发展前景。在如今这个智能手机系统群雄纷争的时候,它采用Linux内核,开放手机联盟成员可以任意
3、使用和修改SDK包,系统的开源性使其具有良好的拓展性。这款软件包括了操作系统、用户界面和应用程序,即智能手机工作所需要的全部软件。2008年Google推出了一款名为Android的开源智能手机操作系统, Android的最大特点是其开放性体系架构,不仅具有非常好的开发、调试环境,而且还支持各种可扩展的用户体验,包括丰富的图形组件、多媒体支持功能以及强大的浏览器。因此,对于软件从业人员来说,Android平台具有无限的吸引力。本文就在分析讨论Android手机软件开发技术原理的基础上,开发出能为用户提供更好的基于Android平台的3G手机气象软件。关键字:android;天气预报系统;智能手
4、机平台ABSTRACTWith 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
5、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 L
6、inux 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 Andr
7、oid 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
8、 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 sof
9、twareKeywords:android;weather software;smart phone platform绪 论1.1 研究内容Android平台天气预报系统是基于Android手机平台,基于Java,从Google上获取天气预报信息,开发出针对使用Android平台的手机天气预报系统的应用软件。为了让智能手机用户能够随时随地查询互联网所提供的服务,让手机能通过移动网和互联网访问Web 网站并处理各项业务,是一种高效的办法就是将应用系统的功能拓展到手机终端。Android 系统是Google 公司开发的一个开源手机操作系统,它包括了用户界面、操作系统和应用程序,即智能手机工作所需的
10、全部应用软件。Android 的最大特点是它的开放性体系架构,不仅具有非常好的调试、环境开发,而且还具有各种可扩展的设施,包括丰富的多媒体支持功能和图形组件强大的浏览器,技术已经趋于成熟。1.2 研究意义Android平台3G手机天气预报系统的开发可以进一步扩大天气信息的覆盖面,以便提前预防,把气象灾害造成的损失降到最低,使得广大公众能够在第一时间方便且快捷地获取最新的天气预报信息。同时也可以强化天气公共服务的职能,改善公共服务手段、完善公共服务体系、增加公共服务产品、提高公共服务质量,更好地发挥了气象事业对经济社会发展的现实性作用。这款手机天气预报系统给人们生活带来方便快捷的全天候信息,在人
11、们日常生活中必不可少的生活信息。本系统界面明了,操作简单,适合所有年龄阶段的运用。对于提高人们生活水平质量有一定的促进。1.3 可行性研究 随着计算机应用的日益普及和深化,随时随地了解今明天的天气情况已经成为一种趋势。本项目要开发的是基于单机的天气查询系统。由于现代都市的快节奏,再天天守着电视机看雷打不动的天气预报已经变得越来越不现实了。因此,实现一个将各种天气查询服务功能集成起来的信息系统就显得十分必要,即可以节省时间,又可以实现个性化的服务,减少不必要的等待和繁重的信息。开发的系统要求界面友好,方便直观。既要方便管理员对天气情况进行添加、删除、修改、查询和统计等管理,又要方便用户及时了解最
12、新的天气状况。而且随着现在android手机的越来越流行和发展,使用android手机的人数越来越多,据调查,使用智能手机的用户中,手机里下载天气预报软件的用户占有84%,所以这是一个很大的用户平台,根据开发平台的应用需求,决定开发这样一款天气预报系统软件。1.4 研究现状和发展趋势据Gartner最新数据显示,从2010年第二、三季度全球智能手机销售持续大幅增长,形成了良好的态势,其中第三季度安卓占全球智能手机市场的26%,仅次于塞班,成为世界上第二大智能手机系统。2010第二、三季度与去年同期相比,增度分别是15.8%及22%,增长迅猛。而塞班系统较09年的市场销售状况,尽管终端销量有大幅
13、度提升,但增势下滑9.6%,情况不好。其他操作系统的表现则要平稳很多。图1-1 Gartner数据整理安卓是全球首款开源代码的操作系统,开放手机联盟(OHA)成员可以任意使用和修改安卓的SDK软件包,采用Linux内核。系统的开源性使其具有良好的拓展性,一方面,终端厂商可以针对自身的特殊需要“定制化开发”;另一方面,为众多移动应用开发者提供了良好的系统性平台,有利于移动应用的集合。与此相比,尽管2010年2月,塞班基本完成开源工作,但由于代码臃肿,用户界面设计缺失,塞班的开源并无实际意义,错失发展良机。据Informa预测,2012年,安卓手机销量将超过诺基亚塞班手机,届时安卓将成为全球最大的
14、智能手机平台。谷歌表示目前安卓手机每日平均激活量为23万部,销售速度正在加速上涨。我们认为,安卓在全球市场的成长壮大,塞班市场份额不断下跌已成不可争议的事实。安卓操作系统发展迅猛主要得益于开源、免费和良好产业运作策略,这三点为安卓在智能手机市场赢得更多的发展机遇。代码的开源让更多的开发者进入应用开发;系统的免费让更多的厂商加入,推动了份额的上升;应用的丰富吸引了更多用户选择,这也是谷歌值得众多厂商学习的地方。此外,谷歌通过OHA联合众多厂商进行系统研发,不断更新版本,将系统应用推广到更多的终端产品中,确保用户体验持续改善。二 、系统分析2.1 研究目标1. 了解Android应用程序的设计和开
15、发过程;2. 使用多种组件进行Android 平台3G手机天气预报软件的开发。 本软件是基于Eclipse的开发环境,依托Google气象数据建立天气预报信息数据库,开发出了针对Android平台的手机天气预报系统。2.2 需求分析手机发展到现在已经成为广大人们群众的日常使用的通讯工具,手机具有的功能也日趋完善。手机用户也可以选择开通GPRS网络服务,此服务大大的方便了人们对于手机上网的需求,从而带动了手机软件发展,我国的移动通讯功能得到了很大的提高。手机软件可以在安装在手机上的软件,完善原始系统的不足与个性化。随着科技的发展,现在手机的功能也越来越多,越来越强大。再也不像以前那么死板简单。目
16、前发展到了可以和掌电脑相媲美。 本设计在现有普通手机的基础上,可以在手机上实现天气状况的实时报告和天气预报功能。方便人们的出行和生活。本软件是一个App Widget应用程序,启动程序后可以进行城市、更新频率的设置,可以通过图片和文字显示当前和未来的天气状况,包括温度、湿度、风向和雨雪情况等。这些天气数据是通过后台服务获取的,这个后台服务可以按照一定时间间隔,从Google上获取天气预报信息,并将天气信息保存在数据库中。从上面的描述中可以基本了解软件的功能需求: 1. 启动App Widget应用程序; 2. 设置界面:对要显示天气预报的城市及更新频率进行设置; 3. 详细界面:通过文字图片动
17、画显示当前的天气情况,包括城市当前天气、温度、风向、风速、湿度;同时显示今后四天的天气情况。 4. 显示界面:通过文字和图片显示当前的天气情况,包括日期、时间、城市、最高温度、最低温度、当前温度等。2.3 性能分析1. 点击ChinaWeather.apk安装。2. 到桌面长摁空白桌面,选择窗口小部件,选择chinaweather。3. 填入你要关注的城市(拼音)。点击保存即可获得城市的天气预报。本软件操作简单,应用方便,设计人性化,程序响应速度快、安全性高、信息处理速度快。三、平台与关键技术研究3.1 Android开发环境介绍Android的上层应用程序是用Java语言开发,同时还需要基于
18、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.
19、Java SDK 3. ADT 4. Android SDK3.2 Android开发平台搭建Android开发平台搭建步骤:1 首先到http:/www.eclipse.org/downloads/下载Eclipse集成开发环境并且解压,这里推荐下载Java EE 集成版本,可以为平台的搭建省下不少工作。接着再去 站点下载SDK。 SDK1.5后解压。第一步下载工序就结束了。2 双击Eclipse解压后目录中的eclipse.exe然后启动,选择Eclipse菜单中的Help- Install New Software- 选项卡上的Available Software,点击右侧的“Add”输
20、入http:/dl- with”下拉菜单中选择刚才输入的网址。过一会就会出现一个Developer Tools选项,勾上以后点击Next以后Eclipse会自动网上查找Android 开发工具插件,然后找到Android DDMS和Android Development Tools,选中这两个点击Finish,Eclipse就会自动下载并安装Android插件了,最后会提示重启Eclipse。3 在WindowsXP的系统变量中的path变量中添加一个值,该值指向解压后的Android SDK目录下的tools文件夹。4 重启后选择Eclipse菜单中的Windows- Preferences
21、 在左侧的Android项目中SDK Location中填入Android SDK解压后的目录,然后点击Apply。3.3 Android关键技术研究Android平台是基于java语言开发的,其中android主要是四大组建构成的,Activity、Service、Broadcast Receiver、Content Provider。1.Activity Activity就是一个用户界面,比如打电话程序,实现一个打电话的Activity,通讯录也是一个Activity,通话记录也是一个Activity等等,这些Activity都是独立的,但组合在一起就是一个完整功能的应用程序了。2.Ser
22、vice 从字面上意思就是服务的意思,其实就是Activity的后面服务,他们在很多地方都相辅相成的,封装有一个完整的功能逻辑实现,Service就是为Activity在后面服务的,作为Activity的坚实后盾。Service在后台为Activity提供所需要的功能。Android中得服务其实与windows中得服务类似,它执行长时间运行的操作,或运程进程执行工作。服务不提供用户界面。 Android中的服务,和我们通常说的Windows服务,Web的后台服务又有一些相近,它们通常都是后台长时间运行,接受上层指令,完成相关事务的模块。用运行模式来看,Activity是跳,从一个跳到一个,这有
23、点像模态对话框,给一个输入,然后不管不顾的让它运行,离开时返回输出。而Service不是这样的,Service主要是等着上层连接上它,然后产生一段持久的通信。 但和一般的Service还是有所不同,Android的Service和所有四大组件一样,其进程模型都是可以配置的,调用方和发布方都可以有权利来选择是把这个组件运行在同一个进程下,还是不同的进程下。它凸显了Android的运行特点。 Android中用来做数据序列化的类是Parcel,封装了序列化的细节,向外提供了足够对象化的访问接口,Android号称实现非常高效。 Service从实现角度看,最特别的就是RPC的实现了,其他内容,都会
24、接近于Activity的一些实现。3.Broadcast Receiver 从字面意思是广播接收者,其实和我们生活中得广播意思相近,在发生什么事情的时候,会以广播的形式告知我们。广播又分为普通广播和有序广播。普通广播是异步的,理论上是同时收到的。你不能对他做任何操作,不能终止。有序广播,在接收到广播时可以加入自己的操作,传递给下一个接收者,也可以终止广播。Android系统中最常见的广播电池电量低得时候,收到短信的时候,USB连接的时候等等。内容提供者主要用于应用程序的数据共享设置,你可以把数据存储在文件系统中,或者SQLite数据库上,网络,或者其他的持久性存储位置。你可以访问这些数据或者修
25、改,其他应用程序也可以访问或者修改。 在Android中,充分考虑了广泛的这类需求,于是就有了Broadcast Receiver这样的一个组件。每个Broadcast Receiver都可以接收一种或若干种Intent作为触发事件,当发生这样事件的时候,系统会负责唤醒或传递消息到该Broadcast Receiver,任其处置。在此之前和这以后,Broadcast Receiver是否在运行都变得不重要了。 当Broadcast Receiver接收到相关的消息,它们通常做一些简单的处理,然后转化称为一条Notification,一次振铃,一次震动,抑或是启动一个 Activity进行进一步
26、的交互和处理。所以,虽然Broadcast整个逻辑不复杂,却是足够有用和好用,它统一了Android的事件广播模型,让很多平台都相形见绌了4.Content Provider 应用程序可以通过Content Provider 来访问其他应用程序的一些私有数据,这是Android提供的一种标准的共享机制。共享的数据可以存在在很多方面,比如在系统中、数据库中或者在其他的一些程序里。Content Provider可以扩展自己的Content Provider类,通过实现自己的类的接口来控制其他数据的存储。然后程序不会直接调用ContentProvider中的方法,而是通过任何一个能与Content
27、provider通讯。任何时候当Android系统收到一个需要某个组件进行处理的请求的时候,Android会确保处理此请求的组件的宿主进程是否已经在运行,如果没有,则立即启动这个进程,当请求的组件的宿主进程已经在运行,它会继续查看请求的组件是否可以使用,如果不能立即使用,它会创建一个请求的组件的实例来响应请求。 Content Provider,内容提供者主要用于应用程序的数据共享设置,你可以把数据存储在文件系统中,或者SQLite数据库上,网络,或者其他的持久性存储位置。你可以访问这些数据或者修改,其他应用程序也可以访问或者修改。在各大组件中,Service和Content Provider
28、都是那种需要持续访问的。Service如果是一个耗时的场景,往往会提供异步访问的接口,而Content Provider不论效率如何,都提供的是约定的同步访问接口。因为Content Provider仅是提供数据访问的,它不能确信具体的使用场景如何,会怎样使用它的数据;而相比之下,Service包含的逻辑更复杂更完整,可以抉择大部分时候使用某接口的场景,从而确定最贴切的接口是同步还是异步,简化了上层调用的逻辑。四、系统设计4.1模块4.1.1 天气预报显示根据需求分析可得,用户在使用这款软件是希望它的快捷方便,所以我们把这款软件的主界面定在了手机桌面上,调用的数据使用在桌面显示。桌面的布局分为
29、3大块。其中主要是相对布局,划分区域,作为以后使用功能上的加强。在时间节点上,我们采用实时更新,并放大了手机现有的时间,让用户拥有更好的体验。左下区域分为日期、城市、天气。中间为天气图标,根据不同的天气状况来更换不同的图片,让用户有更直观的了解。右侧为最搞温度、最低温度、现在温度。读取的数据加以分别后重新排列在界面上,让用户的使用更加方便,舒畅。在用户界面设计上,采用了AppWidget框架结构,提供直观的交互操作。三个用户界面风格简约、操作简便,用户体验将非常好。 DetailForecastActivity主要用来显示详细的天气信息,包括当天和未来四天的天气信息。为了能够以列表的形势显示多
30、行数据,并制定每行数据的布局,使用了ListActivity。ListActivity可以不通过setContentView( )设置布局,也不必重载onCreate( )方法,而直接将显示列表加载到ListActivity,增加了使用的便利性。在此工程中,仍然使用setContentView( )设置布局,这样做的好处是可以在界面中设置更为复杂的显示元素。核心代码如下:/继承ListActivitypublic class DetailForecastActivity extends ListActivity /获取游标,访问数据库/ Query for any matching forec
31、ast data and create adapterUri forecastUri = Uri.withAppendedPath(mData,WeatherWidgets.FORECAST_END);Cursor forecastCursor = managedQuery(forecastUri,DetailDateWidget.detailProjection, null, null, null);listAdapter = new ForecastAdapter(this, forecastCursor);列表适配器代码:private class ForecastAdapter ext
32、ends ResourceCursorAdapter public ForecastAdapter(Context context, Cursor c) super(context, R.layout.detailitems, c);/ TODO Auto-generated constructor stubSystem.out.println(ForecastAdapter);Overridepublic void bindView(View view, Context context, Cursor c) / TODO Auto-generated method stubSystem.ou
33、t.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.se
34、tImageResource(WeatherUtil.getDetailForecastIcon(c.getString(4);day.setText(c.getString(1);condition.setText(c.getString(5);temp.setText(c.getInt(2) + / + c.getInt(3) + );效果如下图2所示: 图4-2 天气呈现界面4.1.2 用户提醒用户提醒功能是天气预报额外的功能,主要我们运用了手机自带的提醒功能,经过我们的页面图标设置,只要点击应用的图标,用户就可以自然的跳转到提醒功能上去,方便用户设置闹铃。这个功能是有待开发的,在天气温
35、差过大时,我们能提供给用户数据反馈,提醒用户注意温差,在天气降温时,提醒用户注意保暖,这是一种很有用的功能,但现在主要是主观上的控制,客观上的提醒功能还有待开发。4.2 数据交互从Google提供的Web Service中获取的天气数据,数据的获取地址是: /通过HttpClient创建Http连接HttpClient client = new DefaultHttpClient();/创建Http Get请求HttpGet request = new HttpGet(String.format(WEBSERVICE_URL, postalCode);try Log.d(TAG, get go
36、ogles weather infomation);/发出请求HttpResponse response = client.execute(request);StatusLine status = response.getStatusLine();Log.d(TAG, Request returned status + status);/取出回复信息HttpEntity entity = response.getEntity();responseReader = new InputStreamReader(entity.getContent(), GB2312); 4.3 用户交互4.3.1
37、城市交互 ConfigureActivity继承Activity并且实现了View.OnClickListener接口,AppWidget第一次启动之前会先运行ConfigureActivity,会出现设置页面用户进行设置,点击保存按钮就会将设置好的参数会存储到SQLite中。核心代码如下:city = editCity.getText().toString();updatetime = Integer.parseInt(editUpdatetime.getText().toString();ContentValues values = new ContentValues();values.p
38、ut(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);/ st
39、art service System.out.println(start Service!);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.
40、3.2 数据库交互以往数据查询将解析好的数据存储到SQLite数据库中。其过程是:使用ContentResolver对象,通过URI间接调用ContentProvider,使用ContentResolver对象与ContentProvider进行交互,而ContentResolver则通过URI确定需要访问的ContentProvider的数据集。核心代码如下,调用关系如图4所示。图4-4 ContentProvider调用关系ContentResolver resolver = context.getContentResolver(); resolver.delete(forecastUri
41、, null, null);ContentValues values = new ContentValues();for (DetailDateWidget forecast : widgetEntity.getDetails() values.clear();values.put(DetailDateWidget.DAYOFWEEK, forecast.getDayOfWeek();.resolver.insert(forecastUri, values);注意:for(DetailDateWidgetforecast :widgetEntity.getDetails()相当于foreach
42、语句,在widgetEntity.getDetails()集合里打印出所有类型为DetailDateWidget的forecast变量。4.4 系统管理4.4.1 天气数据管理读取天气数据实例通过WebServiceHelper.getWidgetEntity()方法操作数据库取出所需要的数据,这一部分与上一节的“将解析好的数据存储到SQLite数据库中”的关键点相同,为节约篇幅,此处不赘述。调用轻量级XML解析器XmlPullParser对从网络上获取的字节流数据进行解析,并且将解析结果保存在WidgetEntity对象中。4.4.2 时间管理AppWidget一启动就会启动DataTime
43、Service这个后台服务,此服务设置了每隔20秒刷新一次时间,“显示页面”通过这个后台服务获取系统时间从而显示。核心代码如下:AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);alarmManager.set(AlarmManager.RTC_WAKEUP, now + updateMilis, pendingIntent);至此,后台服务介绍完毕,最后还需要在AndroidManifest.xml文件中注册后台服务。4.4.3 页面现实布局管理根据需求分析可以知道,应用程序应包
44、含三个主要的用户界面,这里需要进一步分析每个用户界面中应该包括哪些显示内容。在“设置页面”中,需要对要显示天气预报的城市及更新频率进行设置。在“显示页面”中,显示当前的天气状况,包括城市名称、温度、湿度、风向、雨雪情况和获取数据时间等信息。在“详细页面”动态显示当前天气情况,还要显示未来四天的天气情况。根据对用户界面显示内容的分析,绘制出用户界面的草图,如图5所示。图4-5 用户界面草图4.4.4 后台服务后台服务是ChinaWeather工程的核心模块,在用户启动后持续在后台运行,直到用户停止服务。后台服务主要有三个功能,一是周期性的获取Google的天气数据并存储到SQLite,二是从SQ
45、Lite读取出要显示的数据,三是定时更新“显示页面”的时间。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/weat