基于Android平台的天气预报短信服务系统课程设计报告书.docx

上传人:b****7 文档编号:9406188 上传时间:2023-02-04 格式:DOCX 页数:49 大小:157.26KB
下载 相关 举报
基于Android平台的天气预报短信服务系统课程设计报告书.docx_第1页
第1页 / 共49页
基于Android平台的天气预报短信服务系统课程设计报告书.docx_第2页
第2页 / 共49页
基于Android平台的天气预报短信服务系统课程设计报告书.docx_第3页
第3页 / 共49页
基于Android平台的天气预报短信服务系统课程设计报告书.docx_第4页
第4页 / 共49页
基于Android平台的天气预报短信服务系统课程设计报告书.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

基于Android平台的天气预报短信服务系统课程设计报告书.docx

《基于Android平台的天气预报短信服务系统课程设计报告书.docx》由会员分享,可在线阅读,更多相关《基于Android平台的天气预报短信服务系统课程设计报告书.docx(49页珍藏版)》请在冰豆网上搜索。

基于Android平台的天气预报短信服务系统课程设计报告书.docx

基于Android平台的天气预报短信服务系统课程设计报告书

 

天气预报短信服务系统

1.需求分析

1.1功能需求

天气预报短信服务系统中,有一个显示天气情况的用户界面,可以通过图片和文字显示当前和未来几天的天气状况,包括温度、湿度、风向和雨雪情况等。

这些天气数据是通过后台服务获取的,这个后台服务可以按照一定时间间隔,从Yahoo上获取天气预报信息,并将天气信息保存在后台服务中。

系统还需要提供基于SMS短信的天气数据服务,其他手机用户可以向本示例所在的手机上发送SMS短信,并在短信中包含用户指定的关键字,则可以将保存在后台服务中的天气情况,再通过SMS短信回复给用户。

最后,每个被发送的SMS短信都要被记录下来,用户可以浏览或删除这些回复信息。

本系统还要显示地图,在地图上显示某地方的天气信息。

1.2界面需求

本示例包含三个主要的用户界面:

(1)显示天气预报的用户界面;

(2)显示已发送SMS短信的用户界面;

(3)浏览和设置配置信息的用户界面;

(4)Google地图,在地图上覆盖天气信息。

1.3部功能

隐藏在用户界面后面的部功能,是用户界面能够正确实现的基础,如下所述:

(1)显示天气预报的用户界面;

(2)获取Yahoo的天气数据;

(3)显示SMS短信的用户界面;

(4)根据关键字监视SMS短信;

(5)发送包含天气信息的SMS短信;

(6)将发送的SMS短信写入数据库;

(7)浏览和设置配置信息的用户界面;

(8)将用户设置的配置信息保存到数据库;

(9)启动时读取数据库中的配置信息;

(10)恢复缺省设置;

(11)显示Google地图且覆盖天气信息的用户界面,写入获取的谷歌密钥。

2.程序设计

2.1用户界面设计

详细分析应用程序中四个主要用户界面包含的显示容,如下所述:

(1)在“显示天气预报的用户界面”中,根据Yahoo可以提供的数据,在界面上可以显示当前的天气状况,包括城市名称、温度、雨雪情况和获取数据时间等信息;还可以显示未来一天的天气状况,仅包括温度和雨雪情况;

(2)在“显示已发送SMS短信的用户界面”中,应显示每个回复短信的时间、目标手机、城市名称、当天的天气状况和未来一天的天气状况;

(3)在“浏览和设置配置信息的用户界面”中,应显示获取天气预报的目标城市名称、获取数据的频率和短信的关键字,并允许用户设置是否提供短信服务以及是否记录回复的短信信息;

(4)在“显示谷歌地图及在地图上覆盖天气信息界面”中,应显示Google地图,当用户点击地图上某城市时,会显示某城市信息及天气情况。

2.2数据库设计

本系统主要存储两种数据,详述如下:

(1)配置信息:

因为配置信息的数据量很小,从Android支持的存储方式上分析,可以保存在SharePreference、文件或SQLite数据库中;

(2)SMS短信服务信息:

SMS短信服务信息是一个随着时间推移而不断增加的数据,属于文本信息,且有固定的格式,因此适合使用SQLite数据库进行存储。

综合分析这两种需要存储的数据,选择SQLite数据库作为存储数据的方法

2.2.1配置信息

配置信息中主要保存天气信息查询的城市名称,访问Yahoo更新天气信息的频率,请求天气信息SMS短信的关键字,且是否提供短信服务和是否记录短信服务容,其数据库表如下:

表2_1配置信息的数据库

属性

数据类型

说明

_id

integer

自动增加的主键

city_name

text

进行天气信息查询的城市名

refresh_speed

text

进行天气信息查询的频率,单位为秒/次

sms_service

text

是否提供短信服务,即接收到请求短信后是否回复包含天气信息的短信

sms_info

text

是否记录发出的SMS短信的信息

key_word

text

短信服务的关键字,用以确定哪条是请求天气服务的短信

2.2.2SMS短信服务信息

SMS短信服务信息主要保存请求服务短信的发送者、短信容、接收时间和回复信息的容,其数据库表如下:

表2_2SMS短信服务信息的数据库

属性

数据类型

说明

_id

integer

自动增加的主键

sms_sender

text

请求服务短信的发送者

sms_body

text

请求服务短信的容信息

sms_receive_time

text

接收到请求服务短信的时间

return_result

text

回复短信的容

2.3程序模块设计

从功能需求上分析,可以将整个应用程序划分为4个模块,分别是用户界面、后台服务、数据库适配器和短信监听器。

1.由模块结构图中可知,后台服务是整个应用程序的核心,主要包含两个子模块,一个是“数据获取模块”,负责周期性的从Yahoo获取天气信息;另一个是“短信服务模块”,负责处理接收到的服务请求短信,并发送包含天气信息的短信

2.后台服务由用户界面通过Intent启动,启动后的后台服务可以在用户界面关闭后仍然保持运行状态,直到用户通过用户界面发送Intent停止服务,或系统因资源不足而强行关闭服务

3.用户界面从后台服务获取天气信息,而没有直接通过网络访问Google的天气数据

(1)一方面是因为后台服务使用了工作线程,通过后台服务获取天气数据可以避免因网络通信不畅造成界面失去响应

(2)另一方面,在用户关闭界面后,后台服务仍然需要更新天气信息,以保证短信服务数据的准确性。

用户界面还会调用数据库适配器,向SQLite数据库中写入、读取配置信息,或对SMS短信服务信息进行操作

4.短信监听器是一个BroadcastReceiver,监视所有接收到的短信

(1)如果短信中包含用户自定义的关键字,短信监听器则会认为这条短信是天气服务请求短信,将短信的相关信息写入后台服务的短信服务队列

(2)如果用户在配置信息中选择无需提供短信服务,短信监听器仍然继续监听所有短信,只是后台服务不再允许将服务请求短信写入服务队列

5.数据库适配器封装了所有对SQLite数据库操作的方法,用户界面和后台服务会调用它实现数据库操作。

3.程序开发

3.1文件结构与用途

在程序开发阶段,首先确定“天气预报短信服务系统”的工程名称为MyWeather,包名称为edu.hrbeu.WeatherDemo,据程序模块设计的容,建立WeatherDemo。

为了使源代码文件的结构更加清晰,WeatherDemo设置了多个命名空间,分别用来保存用户界面、数据库、后台服务、SMS短信和天气数据的源代码文件,命名空间的名称以及说明参考表3_1。

表3_1WeatherDemo的命名空间

命名空间

说明

edu.hrbeu.WeatherDemo

存放与用户界面相关的源代码文件

edu.hrbeu.WeatherDemo.DB

存放与SQLite数据库相关的源代码文件

edu.hrbeu.WeatherDemo.Service

存放与后台服务相关的源代码文件

edu.hrbeu.WeatherDemo.SMS

存放与SMS短信相关的源代码文件

WeatherDemo示例将不同用途的源代码文件放置在不同的命名空间中,源代码文件的名称和用途可以参考表3_2。

表3_2WeatherDemo的文件用途说明

包名称

文件名

说明

.WeatherDemo

HistoryActivity.java

“历史数据”页的Activity

SetupActivity.java

“系统设置”页的Activity

WeatherActivity.java

“天气预报”页的Activity

GoogleMapActivity.java

“谷歌地图”页的Activity

TextOverlay.java

地图覆盖天气信息的类

WeatherDemo.java

程序启动缺省的Activity

.WeatherDemo.DB

Config.java

保存配置信息的类

DBAdapter.java

数据库适配器

City.java

覆盖天气的城市信息的类

.WeatherDemo.Service

SmsReceiver.java

短信监听器

WeatherAdapter.java

数据获取模块

WeatherService.java

后台服务

.WeatherDemo.SMS

SimpleSms.java

简化的SMS短信类

SmsAdapter.java

短信发送模块

.WeatherDemo.Weather

Forecast.java

未来信息的类

Weather.java

当前天气信息的类

Android的资源文件保存在/res的子目录中:

(1)/res/drawable目录中保存的是图像文件

(2)/res/layout目录中保存的是布局文件

(3)/res/values目录中保存的是用来定义字符串和颜色的文件

(4)/res/xml目录保存的是XML格式的数据文件

所有在程序开发阶段可以被调用的资源都保存在这些目录中,具体每个资源文件的用途可以参考表3_3。

表3_3资源文件名称与用途

资源目录

文件

说明

drawable

icon.png

图标文件

sunny.png

调试用的天气图片

tab_history.png

TabHost中“历史数据”页的图片

tab_map.png

TabHost中“谷歌地图”页的图片

tab_setup.png

TabHost中“系统设置”页的图片

tab_weather.png

TabHost中“天气预报”页的图片

layout

data_row.xml

“历史数据”页ListActivity的每行数据的布局

tab_history.xml

TabHost中“历史数据”页的布局

tab_map.xml

TabHost中“谷歌地图”页的布局

tab_setup.xml

TabHost中“系统设置”页的布局

tab_weather.xml

TabHost中“天气预报”页的布局

values

color.xml

保存颜色的XML文件

string.xml

保存字符串的XML文件

xml

api.xml

从Google下载的天气数据文件。

在程序运行时没有实际作用,但在开发过程中可以让读者了解数据格式

3.2数据库适配器

数据库适配器是最底层的模块,主要用于封装用户界面和后台服务对SQLite数据库的操作,数据库适配器的核心代码主要在DBAdapter.java文件中,用户保存配置信息的类文件Config.java。

Config.java文件的全部代码如下

packageedu.hrbeu.WeatherDemo.DB;

publicclassConfig{

publicstaticStringCityName;

publicstaticStringRefreshSpeed;

publicstaticStringProvideSmsService;

publicstaticStringSaveSmsInfo;

publicstaticStringKeyWord;

publicstaticvoidLoadDefaultConfig(){

CityName="chaohu";

RefreshSpeed="20";

ProvideSmsService="true";

SaveSmsInfo="true";

KeyWord="HF";

}

从代码中不难看出,公有静态属性CityName、RefreshSpeed、ProvideSmsService、SaveSmsInfo和KeyWord,完全对应数据库中保存配置信息表的属性。

在程序启动后,保存在数据库中的城市名称、更新频率、是否提供短信服务、是否保存短信信息和关键字等容,将被写入这个Config类中,供其他模块在做逻辑判断

LoadDefaultConfig()函数保存了程序置的配置参数,此函数会在两个情况下被调用

(1)用户主动选择“恢复缺省设置”

(2)首次启动程序时,用来初始化保存配置参数的数据库

DBAdapter类与以往介绍过的数据库适配器类相似,都具有继承SQLiteOpenHelper的帮助类DBOpenHelper。

DBOpenHelper在建立数据库时,同时建立两个数据库表,并对保存配置信息的表进行了初始化,初始化的相关代码在如下:

privatestaticfinalStringDB_NAME="weather_app.db";

privatestaticfinalStringDB_TABLE_CONFIG="setup_config";

privatestaticfinalStringDB_CONFIG_ID="1";

privatestaticfinalintDB_VERSION=1;

publicstaticfinalStringKEY_ID="_id";

publicstaticfinalStringKEY_CITY_NAME="city_name";

publicstaticfinalStringKEY_REFRESH_SPEED="refresh_speed";

publicstaticfinalStringKEY_SMS_SERVICE="sms_service";

publicstaticfinalStringKEY_SMS_INFO="sms_info";

publicstaticfinalStringKEY_KEY_WORD="key_word";

privatestaticfinalStringDB_TABLE_SMS="sms_data";

publicstaticfinalStringKEY_SENDER="sms_sender";

publicstaticfinalStringKEY_BODY="sms_body";

publicstaticfinalStringKEY_RECEIVE_TIME="sms_receive_time";

publicstaticfinalStringKEY_RETURN_RESULT="return_result";

/**静态Helper类,用于建立、更新和打开数据库*/

privatestaticclassDBOpenHelperextendsSQLiteOpenHelper{

publicDBOpenHelper(Contextcontext,Stringname,CursorFactoryfactory,intversion){

super(context,name,factory,version);

}

privatestaticfinalStringDB_CREATE_CONFIG="createtable"+

DB_TABLE_CONFIG+"("+KEY_ID+"integerprimarykeyautoincrement,"+

KEY_CITY_NAME+"textnotnull,"+KEY_REFRESH_SPEED+"text,"+

KEY_SMS_SERVICE+"text,"+KEY_SMS_INFO+"text,"+

KEY_KEY_WORD+"text);";

privatestaticfinalStringDB_CREATE_SMS="createtable"+

DB_TABLE_SMS+"("+KEY_ID+"integerprimarykeyautoincrement,"+

KEY_SENDER+"textnotnull,"+KEY_BODY+"text,"+

KEY_RECEIVE_TIME+"text,"+KEY_RETURN_RESULT+"text);";

Override

publicvoidonCreate(SQLiteDatabase_db){

_db.execSQL(DB_CREATE_CONFIG);

_db.execSQL(DB_CREATE_SMS);

//初始化系统配置的数据表

Config.LoadDefaultConfig();

ContentValuesnewValues=newContentValues();

newValues.put(KEY_CITY_NAME,Config.CityName);

newValues.put(KEY_REFRESH_SPEED,Config.RefreshSpeed);

newValues.put(KEY_SMS_SERVICE,Config.ProvideSmsService);

newValues.put(KEY_SMS_INFO,Config.SaveSmsInfo);

newValues.put(KEY_KEY_WORD,Config.KeyWord);

_db.insert(DB_TABLE_CONFIG,null,newValues);

}

Override

publicvoidonUpgrade(SQLiteDatabase_db,int_oldVersion,int_newVersion){

_db.execSQL("DROPTABLEIFEXISTS"+DB_TABLE_CONFIG);

_db.execSQL("DROPTABLEIFEXISTS"+DB_CREATE_SMS);

onCreate(_db);

}

}

在DBAdapter类中,用户界面会调用SaveConfig()和LoadConfig(),从SQLite数据库中保存和读取配置信息。

保存配置信息时,SaveConfig()函数会将Config类中的公有静态属性写入数据库;反之,LoadConfig()会将数据库中的配置信息写入Config类中的公有静态属性

SaveConfig()和LoadConfig()的代码如下

publicvoidSaveConfig(){

ContentValuesupdateValues=newContentValues();

updateValues.put(KEY_CITY_NAME,Config.CityName);

updateValues.put(KEY_REFRESH_SPEED,Config.RefreshSpeed);

updateValues.put(KEY_SMS_SERVICE,Config.ProvideSmsService);

updateValues.put(KEY_SMS_INFO,Config.SaveSmsInfo);

updateValues.put(KEY_KEY_WORD,Config.KeyWord);

db.update(DB_TABLE_CONFIG,updateValues,KEY_ID+"="+DB_CONFIG_ID,null);

Toast.makeText(context,"系统设置保存成功",Toast.LENGTH_SHORT).show();

}

另一个会调用DBAdapter类的是后台服务,即WeatherService类。

后台服务主要调用SaveOneSms(SimpleSmssms)、DeleteAllSms()和GetAllSms()函数,分别用来保存SMS短信记录、删除所有SMS数据记录和获取所有SMS数据记录。

在GetAllSms()函数中,调用了一个私有函数ToSimpleSms(Cursorcursor),用来将从数据库获取的数据转换为SimpleSms对象数组。

SimpleSms类将在下面容中进行介绍

下面是SaveOneSms(SimpleSmssms)、DeleteAllSms()和GetAllSms()函数的代码:

publicvoidSaveOneSms(SimpleSmssms){

ContentValuesnewValues=newContentValues();

newValues.put(KEY_SENDER,sms.Sender);

newValues.put(KEY_BODY,sms.Body);

newValues.put(KEY_RECEIVE_TIME,sms.ReceiveTime);

newValues.put(KEY_RETURN_RESULT,sms.ReturnResult);

db.insert(DB_TABLE_SMS,null,newValues);

}

publiclongDeleteAllSms(){

returndb.delete(DB_TABLE_SMS,null,null);

}

publicSimpleSms[]GetAllSms(){

Cursorresults=db.query(DB_TABLE_SMS,newString[]{KEY_ID,KEY_SENDER,

KEY_BODY,KEY_RECEIVE_TIME,KEY_RETURN_RESULT},

null,null,null,null,null);

returnToSimpleSms(results);

}

privateSimpleSms[]ToSimpleSms(Cursorcursor){

intresultCounts=cursor.getCount();

if(resultCounts==0||!

cursor.moveToFirst()){

returnnull;}

SimpleSms[]sms=newSimpleSms[resultCounts];

for(inti=0;i

sms[i]=newSimpleSms();

sms[i].Sender=cursor.getString(cursor.getColumnIndex(KEY_SENDER));

sms[i].Body=cursor.getString(cursor.getColumnIndex(KEY_BODY));

sms[i].ReceiveTime=cursor.getString(cursor.getColumnIndex(KEY_RECEIVE_TIME));

sms[i].ReturnResult=cursor.getString(cursor.getColumnIndex(KEY_RETURN_RESULT));

cursor.moveToNext();

}

returnsms;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 动态背景

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1