目录
1. 需求分析. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
1.1功效需求. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
1.2界面需求. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
1.3 内部功效. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
2. 程序设计. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
2.1用户界面设计. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
2.2数据库设计. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
2.2.1配置信息. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
2.2.2 SMS短信服务信息. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
2.3程序模块设计. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
3. 程序开发. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
3.1文件结构和用途. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
3.2数据库适配器. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
3.3短信监听器. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
3.4后台服务. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
3.4.1短信发送模块. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
3.4.2数据库获取模块. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
3.5用户界面. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
3.5.1 WeatherAc tiv ity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
3.5.2 His toryAc tiv ity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
3.5.3 SetupActivity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
3.5.4谷歌MapAc tivity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
4.总结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
5.参考文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。
天气预报短信服务系统
1.需求分析
1.1功效需求
天气预报短信服务系统中有一个显示天气情况用户界面能够经过图片和文字显示目前和未来几天天气情况包含温度、湿度、风向和雨雪情况等。这些天气数据是经过后台服务获取这个后台服务能够根据一定时间间隔从Yahoo上获取天气预报信息并将天气信息保留在后台服务中。系统还需要提供基于SMS短信天气数据服务其它手机用户能够向本示例所在手机上发送SMS短信并在短信中包含用户指定关键字则能够将保留在后台服务中天气情况再经过SMS短信回复给用户。最终每个被发送SMS短信全部要被统计下来用户能够浏览或删除这些回复信息。本系统还要显示地图在地图上显示某地方天气信息。
1.2界面需求
本示例包含三个关键用户界面
(1)显示天气预报用户界面
(2)显示已发送SMS短信用户界面
(3)浏览和设置配置信息用户界面
(4)谷歌地图在地图上覆盖天气信息。
1.3 内部功效
隐藏在用户界面后面内部功效是用户界面能够正确实现基础 以下所述
(1)显示天气预报用户界面
(2)获取Yahoo天气数据
(3)显示SMS短信用户界面
(4)依据关键字监视SMS短信
(5)发送包含天气信息SMS短信
(6)将发送SMS短信写入数据库
(7)浏览和设置配置信息用户界面
(8)将用户设置配置信息保留到数据库
(9)开启时读取数据库中配置信息
(10)恢复缺省设置
(11)显示谷歌地图且覆盖天气信息用户界面写入获取谷歌密钥。
2.程序设计
2.1用户界面设计
具体分析应用程序中四个关键用户界面包含显示内容 以下所述
(1)在“显示天气预报用户界面”中依据Yahoo能够提供数据在界面上能够显示目前天气情况包含城市名称、温度、雨雪情况和获取数据时间等信息还能够显示未来一天天气情况仅包含温度和雨雪情况
(2)在“显示已发送SMS短信用户界面”中应显示每个回复短信时间、 目标手机号码、城市名称、当日天气情况和未来一天天气情况
(3)在“浏览和设置配置信息用户界面”中应显示获取天气预报目标城市名称、获取数据频率和短信关键字并许可用户设置是否提供短信服务和是否统计回复短信信息
(4)在“显示谷歌地图及在地图上覆盖天气信息界面”中应显示谷歌地图当用户点击地图上某城市时会显示某城市信息及天气情况。
2.2数据库设计
本系统关键存放两种数据详述以下
(1)配置信息因为配置信息数据量很小从Android支持存放方法上分析能够保留在SharePreference、文件或SQLite数据库中
(2)SMS短信服务信息SMS短信服务信息是一个伴随时间推移而不停增加数据属于文本信息且有固定格式所以适合使用SQLite数据库进行存放。
综合分析这两种需要存放数据选择SQLite数据库作为存放数据方法
2.2.1配置信息
配置信息中关键保留天气信息查询城市名称访问Yahoo更新天气信息频率请求天气信息SMS短信关键字且是否提供短信服务和是否统计短信服务内容其数据库表以下
表2_1配置信息数据库
key_word text 短信服务关键字用以确定哪条是请求天气服务短信
2.2.2 SMS短信服务信息
SMS短信服务信息关键保留请求服务短信发送者、短信内容、接收时间和回复信息内容其数据库表以下
表2_2 SMS短信服务信息数据库
2.3程序模块设计
从功效需求上分析能够将整个应用程序划分为4个模块分别是用户界面、后台服务、数据库适配器和短信监听器。
1.由模块结构图中可知后台服务是整个应用程序关键关键包含两个子模块一个是“数据获取模块”负责周期性从Yahoo获取天气信息另一个是“短信服务模块”负责处理接收到服务请求短信并发送包含天气信息短信
2.后台服务由用户界面经过Intent开启开启后后台服务能够在用户界面关闭后仍然保持运行状态直到用户经过用户界面发送Intent停止服务或系统因资源不足而强行关闭服务
3.用户界面从后台服务获取天气信息而没有直接经过网络访问谷歌天气数据
(1)首先是因为后台服务使用了工作线程经过后台服务获取天气数据能够避免因网络通信不畅造成界面失去响应
(2)其次在用户关闭界面后后台服务仍然需要更新天气信息 以确保短信服务数据正确性。用户界面还会调用数据库适配器向SQLite数据库中写入、读取配置信息或对SMS短信服务信息进行操作
4.短信监听器是一个BroadcastReceiver监视全部接收到短信
(1)假如短信中包含用户自定义关键字短信监听器则会认为这条短信是天气服务请求短信将短信相关信息写入后台服务短信服务队列
(2)假如用户在配置信息中选择无需提供短信服务短信监听器仍然继续监听全部短信只是后台服务不再许可将服务请求短信写入服务队列
5.数据库适配器封装了全部对SQLite数据库操作方法用户界面和后台服务会调用它实现数据库操作。
3.程序开发
3.1文件结构和用途
在程序开发阶段首先确定“天气预报短信服务系统”工程名称为MyWeather包名称为edu.hrbeu.WeatherDemo据程序模块设计内容建立WeatherDemo。
为了使源代码文件结构愈加清楚 WeatherDemo设置了多个命名空间分别用来保留用户界面、数据库、后台服务、 SMS短信和天气数据源代码文件命名空间名称和说明参考表3_1。
表3_1WeatherDemo命名空间
WeatherDemo示例将不一样用途源代码文件放置在不一样命名空间中源代码文件名称和用途能够参考表3_2。
表3_2WeatherDemo文件用途说明
Android资源文件保留在/res子目录中
(1)/res/drawable目录中保留是图像文件
(2)/res/layout目录中保留是布局文件
(3)/res/values目录中保留是用来定义字符串和颜色文件
(4)/res/xml目录保留是XML格式数据文件
全部在程序开发阶段能够被调用资源全部保留在这些目录中具体每个资源文件用途能够参考表3_3。
表3_3资源文件名称和用途
3.2数据库适配器
数据库适配器是最底层模块关键用于封装用户界面和后台服务对SQLite数据库操作数据库适配器关键代码关键在DBAdapter. java文件中用户保留配置信息类文件Config. java。
Config. java文件全部代码以下package edu.hrbeu.WeatherDemo.DB;public class Config {public static String CityName;public static String RefreshSpeed;public static String ProvideSmsService;public static String SaveSmsInfo;public static String KeyWord;public static void LoadDefaultConfig( ) {
CityName = "c haohu" ;
RefreshSpeed = "20" ;
ProvideSmsService = "t rue";
SaveSms Info = "t rue";
KeyWord = "H F";
}
从代码中不难看出,公有静态属性CityName 、 RefreshSpeed 、ProvideSmsService、 SaveSmsInfo和KeyWord完全对应数据库中保留配置信息表属性。在程序开启后保留在数据库中城市名称、更新频率、是否提供短信服务、是否保留短信信息和关键字等内容将被写入这个Config类中供其它模块在做逻辑判定
LoadDefaultConfig()函数保留了程序内置配置参数此函数会在两个情况下被调用
(1)用户主动选择“恢复缺省设置”
(2)首次开启程序时用来初始化保留配置参数数据库
DBAdapter类和以往介绍过数据库适配器类相同 全部含有继承SQLiteOpenHelper帮助类DBOpenHelper 。 DBOpenHelper在建立数据库时 同时建立两个数据库表并对保留配置信息表进行了初始化初始化相关代码在以下private static final String DB_NAME = "weather_app.db";private static final String DB_TABLE_CONFIG = "setup_config";private static final String DB_CONFIG_ID = "1" ;private static final int DB_VERSION = 1;public static final String KEY_ID = "_id";public static final String KEY_CITY_NAME = "city_name";public static final String KEY_REFRESH_SPEED = "refresh_speed";public static final String KEY_SMS_SERVICE = "sms_service" ;public static final String KEY_SMS_INFO = "sms_info" ;public static final String KEY_KEY_WORD = "key_word" ;private static final String DB_TABLE_SMS = "sms_data";public static final String KEY_SENDER = "sms_sender" ;public static final String KEY_BODY= "sms_body";public static final String KEY_RECEIVE_TIME = "sms_receive_time" ;public static final String KEY_RETURN_RESULT = "return_result";
/**静态Helper类用于建立、更新和打开数据库*/private static class DBOpenHelper extends SQLiteOpenHelper {public DBOpenHelper(Context context, String name, CursorFactoryfactory, int version) {super(context, name, factory, version) ;
}private static final String DB_CREATE_CONFIG = "create table " +
DB_TABLE_CONFIG+" ( " +KEY_ID+ " integer primary key autoincrement,
" +
KEY_CITY_NAME+ " text not null, " + KEY_REFRESH_SPEED+ " text, " +
KEY_SMS_SERVICE +" text, " + KEY_SMS_INFO + " text, " +
KEY_KEY_WORD + " text); ";private static final String DB_CREATE_SMS = "create table " +
DB_TABLE_SMS + " ( " +KEY_ID+ " integer primary key autoincrement,
" +
KEY_SENDER+ " text not null, " + KEY_BODY+ " text, " +
KEY_RECEIVE_TIME +" text, " + KEY_RE TURN_RESUL T + " text) ; ";
@Overridepublic void onCreate(SQLiteDatabase _db) {
_d b.exec SQL(DB_CREATE_CONFIG) ;
_db.execSQL(DB_CREATE_SMS) ;
//初始化系统配置数据表
Config.L oadDefaul tConfig() ;
ContentValues newValues = new ContentValues( );newVa lue s.p ut(KEY_CITY_NAME, Config.Ci tyName);newVa lues.put(KEY_REFRESH_SPEED, Config.RefreshSpeed) ;newVa lue s.p ut(KEY_SMS_SERVICE, Conf ig.Pro videSmsServi ce) ;newVa lue s.p ut(KEY_SMS_INFO, C onf ig.SaveSmsInfo) ;newVa lues.put(KEY_KEY_WORD, Conf ig.KeyWord);
_d b.i nse rt(DB_TABLE_CONFIG, n ull, n ewValu es) ;
}
@Overridepublic void onUpgrade(SQLiteDatabase _db, int _oldVersion, int_newVersion) {
_db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE_CONFIG);
_db.execSQL("DROP TABLE IF EXISTS " + DB_CREATE_SMS);onCreate(_db);
}
}
在DBAdapter类中用户界面会调用SaveConfig()和LoadConfig() 从SQLite数据库中保留和读取配置信息。保留配置信息时 SaveConfig()函数会将Config类中公有静态属性写入数据库反之 LoadConfig()会将数据库中配置信息写入Config类中公有静态属性
SaveConfig()和LoadConfig()代码以下public void SaveConfig( ){
ContentValues updateValues = new ContentValues() ;upd ateVal ues.put(KEY_CITY_NAME, Conf ig.CityName) ;updateValues.put(KEY_REFRESH_SPEED, Config.RefreshSpeed);updateValues.put(KEY_SMS_SERVICE, Config.ProvideSmsService);upd ateVal ues.put(KEY_SMS_INFO, Config.SaveSmsInfo);updateValues.put(KEY_KEY_WORD, Config.KeyWord);db.upd ate(DB_TABLE_CONFIG, upd ateVal ues, KEY_ID+"=" +DB_CONFIG_ID,null);
Toast.makeText(context, "系统设置保留成功",Toa st.LENGTH_SHORT) .s how();
}
另一个会调用DBAdapter类是后台服务 即WeatherService类。后台服务关键调用SaveOneSms(SimpleSms sms) 、 DeleteAllSms()和GetAllSms()函数分别用来保留SMS短信统计、删除全部SMS数据统计和获取全部SMS数据统计。在GetAllSms()函数中调用了一个私有函数ToSimpleSms(Cursor cursor) 用来将从数据库获取数据转换为SimpleSms对象数组。 SimpleSms类将在下面内容中进行介绍
下面是SaveOneSms(SimpleSms sms) 、 DeleteAllSms()和GetAllSms()函数代码:public void SaveOneSms(SimpleSms sms){
ContentValues newValues = new ContentValues() ;newVal ues.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);
}public long DeleteAllSms() {return db.delete(DB_TABLE_SMS, null, null) ;
}public SimpleSms[ ] GetAllSms() {
Cursor results = db.query(DB_TABLE_SMS, new String[ ] { KEY_ID,KEY_SENDER,
KEY_BODY, KEY_RECEIVE_TIME, KEY_RETURN_RESUL T},null, null, null, null, null);return ToSimpleSms(results) ;
}private SimpleSms[ ] ToSimpleSms(Cursor cursor){int resultCounts = cursor.getCount() ;if (resultCounts == 0 | | !cursor.moveToFirst( )){return null; }
SimpleSms[ ] sms = new SimpleSms[resultCounts] ;for (int i = 0 ; i<resultCounts; i++){sms[i] = new SimpleSms() ;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( );
VirMach,成立于2014年的美国IDC商家,知名的低价便宜VPS销售商,支持支付宝、微信、PayPal等方式付款购买,主打美国、欧洲暑假中心产品,拥有包括洛杉矶、西雅图、圣何塞、凤凰城在内的11个数据中心可以选择,可以自由搭配1Gbps、2Gbps、10Gbps带宽端口,有Voxility DDoS高防IP可以选择(500Gbps以上的防御能力),并且支持在控制面板付费切换机房和更换IP(带...
香港站群多ip服务器多少钱?想做好站群的SEO优化,最好给每个网站都分配一个独立IP,这样每个网站之间才不会受到影响。对做站群的站长来说,租用一家性价比高且提供多IP的香港多ip站群服务器很有必要。零途云推出的香港多ip站群云服务器多达256个IP,可以满足站群的优化需求,而且性价比非常高。那么,香港多ip站群云服务器价格多少钱一个月?选择什么样的香港多IP站群云服务器比较好呢?今天,小编带大家一...
快云科技: 12.12特惠推出全场VPS 7折购 续费同价 年付仅不到五折公司介绍:快云科技是成立于2020年的新进主机商,持有IDC/ICP等证件资质齐全主营产品有:香港弹性云服务器,美国vps和日本vps,香港物理机,国内高防物理机以及美国日本高防物理机产品特色:全配置均20M带宽,架构采用KVM虚拟化技术,全盘SSD硬盘,RAID10阵列, 国内回程三网CN2 GIA,平均延迟50ms以下。...