三级项目(天气预报短信提供系统)精讲课件.ppt

上传人(卖家):晟晟文业 文档编号:4473166 上传时间:2022-12-12 格式:PPT 页数:91 大小:1.57MB
下载 相关 举报
三级项目(天气预报短信提供系统)精讲课件.ppt_第1页
第1页 / 共91页
三级项目(天气预报短信提供系统)精讲课件.ppt_第2页
第2页 / 共91页
三级项目(天气预报短信提供系统)精讲课件.ppt_第3页
第3页 / 共91页
三级项目(天气预报短信提供系统)精讲课件.ppt_第4页
第4页 / 共91页
三级项目(天气预报短信提供系统)精讲课件.ppt_第5页
第5页 / 共91页
点击查看更多>>
资源描述

1、AndroidAndroid手机开发手机开发第第20-2220-22课课 AndroidAndroid天气预报短信服务软件 项目项目设计与开发设计与开发 讲授:讲授:刘发久刘发久本章学习目标:n掌握Android应用项目的开发过程n掌握Android应用项目的需求分析n掌握Android应用项目的系统设计n掌握Android应用项目的实现方法n掌握Android应用项目的测试方法20.1 需求分析n设计本章的初衷q希望能够根据实际项目的需求,准确的分析出Android应用程序开发所可能涉及到的知识点,并学会如何通过分析软件的需求,快速的设计出应用程序的用户界面和模块结构,并最终完成应用程序的开

2、发和调试20.1 需求分析n功能需求q本章提供的“天气预报短信服务软件”综合示例中,有一个显示天气情况的用户界面,可以通过图片和文字显示当前和未来几天的天气状况,包括温度、湿度、风向和雨雪情况等。这些天气数据是通过后台服务获取的,这个后台服务可以按照一定时间间隔,从Google上获取天气预报信息,并将天气信息保存在后台服务中。示例还需要提供基于SMS短信的天气数据服务,其他手机用户可以向本示例所在的手机上发送SMS短信,并在短信中包含用户指定的关键字,则可以将保存在后台服务中的天气情况,再通过SMS短信回复给用户。最后,每个被发送的SMS短信都要被记录下来,用户可以浏览或删除这些回复信息20.

3、1 需求分析n界面需求q本示例包含三个主要的用户界面n显示天气预报的用户界面n显示已发送SMS短信的用户界面n浏览和设置配置信息的用户界面20.1 需求分析n内部功能q隐藏在用户界面后面的内部功能,是用户界面能够正确实现的基础n显示天气预报的用户界面q获取Google的天气数据n显示SMS短信的用户界面q根据关键字监视SMS短信q发送包含天气信息的SMS短信q将发送的SMS短信写入数据库n浏览和设置配置信息的用户界面q将用户设置的配置信息保存到数据库q启动时读取数据库中的配置信息q恢复缺省设置20.2 项目设计n20.2.1 用户界面设计q详细分析应用程序中三个主要用户界面包含的显示内容n在“

4、显示天气预报的用户界面”中,根据Google可以提供的数据,在界面上可以显示当前的天气状况,包括城市名称、温度、湿度、风向、雨雪情况和获取数据时间等信息;还可以显示未来四天的天气状况,但仅包括温度和雨雪情况n在“显示已发送SMS短信的用户界面”中,应显示每个回复短信的时间、目标手机号码、城市名称、当天的天气状况和未来一天的天气状况n在“浏览和设置配置信息的用户界面”中,应显示获取天气预报的目标城市名称、获取数据的频率和短信的关键字,并允许用户设置是否提供短信服务以及是否记录回复的短信信息20.2 项目设计n20.2.1 用户界面设计q用户界面的草图20.2 项目设计n20.2.2 数据库设计q

5、本示例主要存储两种数据n配置信息:因为配置信息的数据量很小,从Android支持的存储方式上分析,可以保存在SharePreference、文件或SQLite数据库中nSMS短信服务信息:SMS短信服务信息是一个随着时间推移而不断增加的数据,属于文本信息,而且有固定的格式,因此适合使用SQLite数据库进行存储q综合分析这两种需要存储的数据,选择SQLite数据库作为存储数据的方法20.2 项目设计n20.2.2 数据库设计q配置信息n配置信息中主要保存天气信息查询的城市名称,访问Google更新天气信息的频率,请求天气信息SMS短信的关键字,以及是否提供短信服务和是否记录短信服务内容n配置信

6、息的数据库表结构属性属性数据类型数据类型说明说明_idinteger自动增加的主键city_nametext进行天气信息查询的城市名refresh_speedtext进行天气信息查询的频率,单位为秒/次sms_servicetext是否提供短信服务,即接收到请求短信后是否回复包含天气信息的短信sms_infotext是否记录发出的SMS短信的信息key_wordtext短信服务的关键字,用以确定哪条短信是请求天气服务的短信20.2 项目设计n20.2.2 数据库设计qSMS短信服务信息nSMS短信服务信息主要保存请求服务短信的发送者、短信内容、接收时间和回复信息的内容nSMS短信服务信息的数据

7、库表结构属性属性数据类型数据类型说明说明_idinteger自动增加的主键sms_sendertext请求服务短信的发送者sms_bodytext请求服务短信的内容信息sms_receive_timetext接收到请求服务短信的时间return_resulttext回复短信的内容20.2 项目设计n20.2.3 程序模块设计q从功能需求上分析,可以将整个应用程序划分为4个模块,分别是用户界面、后台服务、数据库适配器和短信监听器。下图是模块结构图20.2 项目设计n20.2.3 程序模块设计q由模块结构图中可知,后台服务是整个应用程序的核心,主要包含两个子模块,一个是“数据获取模块”,负责周期性

8、的从Google获取天气信息;另一个是“短信服务模块”,负责处理接收到的服务请求短信,并发送包含天气信息的短信q后台服务由用户界面通过Intent启动,启动后的后台服务可以在用户界面关闭后仍然保持运行状态,直到用户通过用户界面发送Intent停止服务,或系统因资源不足而强行关闭服务20.2 项目设计n20.2.3 程序模块设计q用户界面从后台服务获取天气信息,而没有直接通过网络访问Google的天气数据n一方面是因为后台服务使用了工作线程,通过后台服务获取天气数据可以避免因网络通信不畅造成界面失去响应n另一方面,在用户关闭界面后,后台服务仍然需要更新天气信息,以保证短信服务数据的准确性。用户界

9、面还会调用数据库适配器,向SQLite数据库中写入、读取配置信息,或对SMS短信服务信息进行操作20.2 项目设计n20.2.3 程序模块设计q短信监听器是一个BroadcastReceiver,监视所有接收到的短信n如果短信中包含用户自定义的关键字,短信监听器则会认为这条短信是天气服务请求短信,将短信的相关信息写入后台服务的短信服务队列n如果用户在配置信息中选择无需提供短信服务,短信监听器仍然继续监听所有短信,只是后台服务不再允许将服务请求短信写入服务队列q数据库适配器封装了所有对SQLite数据库操作的方法,用户界面和后台服务会调用它实现数据库操作20.3 程序开发n20.3.1 文件结构

10、与用途q在程序开发阶段,首先确定“天气预报短信服务软件”的工程名称为WeatherDemo,包名称为edu.hrbeu.WeatherDemo,据程序模块设计的内容,建立WeatherDemo示例20.3 程序开发n20.3.1 文件结构与用途qWeatherDemo示例源代码的文件结构20.3 程序开发n20.3.1 文件结构与用途qWeatherDemo示例设置了多个命名空间,分别用来保存用户界面、数据库、后台服务、SMS短信和天气数据的源代码文件qWeatherDemo示例的命名空间命名空间命名空间说明说明edu.hrbeu.WeatherDemo存放与用户界面相关的源代码文件edu.h

11、rbeu.WeatherDemo.DB存放与SQLite数据库相关的源代码文件edu.hrbeu.WeatherDemo.Service存放与后台服务相关的源代码文件edu.hrbeu.WeatherDemo.SMS 存放与SMS短信相关的源代码文件edu.hrbeu.WeatherDemo.Weather 存放与天气数据有关的源代码文件20.3 程序开发n20.3.1 文件结构与用途qWeatherDemo示例将不同用途的源代码文件放置在不同的命名空间中包名称包名称文件名文件名说明说明.WeatherDemoHistoryActivity.java“历史数据”页的ActivitySetupA

12、ctivity.java“系统设置”页的ActivityWeatherActivity.java“天气预报”页的ActivityWeatherDemo.java程序启动缺省的Activity.WeatherDemo.DBConfig.java保存配置信息的类DBAdapter.java数据库适配器.WeatherDemo.ServiceSmsReceiver.java短信监听器WeatherAdapter.java数据获取模块WeatherService.java后台服务.WeatherDemo.SMS SimpleSms.java简化的SMS短信类SmsAdapter.java短信发送模块.

13、WeatherDemo.WeatherForecast.java未来天气信息的类Weather.java当前天气信息的类20.3 程序开发n20.3.1 文件结构与用途qAndroid的资源文件保存在/res的子目录中n/res/drawable目录中保存的是图像文件n/res/layout目录中保存的是布局文件n/res/values目录中保存的是用来定义字符串和颜色的文件n/res/xml目录保存的是XML格式的数据文件q所有在程序开发阶段可以被调用的资源都保存在这些目录中20.3 程序开发n20.3.1 文件结构与用途q资源文件名称与用途资源目录资源目录文件文件说明说明drawablei

14、con.png图标文件sunny.png调试用的天气图片tab_history.pngTabHost中“历史数据”页的图片tab_setup.pngTabHost中“系统设置”页的图片tab_weather.pngTabHost中“天气预报”页的图片layoutdata_row.xml“历史数据”页ListActivity的每行数据的布局tab_history.xmlTabHost中“历史数据”页的布局tab_setup.xmlTabHost中“系统设置”页的布局tab_weather.xmlTabHost中“天气预报”页的布局valuescolor.xml保存颜色的XML文件string.x

15、ml保存字符串的XML文件xmlapi.xml从Google下载的天气数据文件。在程序运行时没有实际作用,但在开发过程中可以让读者了解数据格式20.3 程序开发n20.3.2 数据库适配器q数据库适配器是最底层的模块,主要用于封装用户界面和后台服务对SQLite数据库的操作,数据库适配器的核心代码主要在DBAdapter.java文件中q用户保存配置信息的类文件Config.javaqConfig.java文件的全部代码如下1.package edu.hrbeu.WeatherDemo.DB;2.3.public class Config 4.public static String City

16、Name;5.public static String RefreshSpeed;6.public static String ProvideSmsService;7.public static String SaveSmsInfo;8.public static String KeyWord;9.20.3 程序开发n20.3.2 数据库适配器q从代码中不难看出,公有静态属性CityName、RefreshSpeed、ProvideSmsService、SaveSmsInfo和KeyWord,完全对应数据库中保存配置信息表的属性。在程序启动后,保存在数据库中的城市名称、更新频率、是否提供短信服

17、务、是否保存短信信息和关键字等内容,将被写入这个Config类中,供其他模块在做逻辑判断时使用10.public static void LoadDefaultConfig()11.CityName=;12.RefreshSpeed=60;13.ProvideSmsService=true;14.SaveSmsInfo=true;15.KeyWord=NY;16.17.20.3 程序开发n20.3.2 数据库适配器n代码第10行的LoadDefaultConfig()函数,保存了程序内置的配置参数q此函数会在两个情况下被调用n用户主动选择“恢复缺省设置”n首次启动程序时,用来初始化保存配置参数

18、的数据库qDBAdapter类与以往介绍过的数据库适配器类相似,都具有继承SQLiteOpenHelper的帮助类DBOpenHelperqDBOpenHelper在建立数据库时,同时建立两个数据库表,并对保存配置信息的表进行了初始化,初始化的相关代码在第4249行20.3 程序开发n20.3.2 数据库适配器1.private static final String DB_NAME=weather_app.db;2.private static final String DB_TABLE_CONFIG=setup_config;3.private static final String DB

19、_CONFIG_ID=1;4.private static final int DB_VERSION=1;5.6.public static final String KEY_ID=_id;7.public static final String KEY_CITY_NAME=city_name;8.public static final String KEY_REFRESH_SPEED=refresh_speed;9.public static final String KEY_SMS_SERVICE=sms_service;10.public static final String KEY_

20、SMS_INFO=sms_info;11.public static final String KEY_KEY_WORD=key_word;12.13.private static final String DB_TABLE_SMS=sms_data;14.public static final String KEY_SENDER=sms_sender;15.public static final String KEY_BODY=sms_body;16.public static final String KEY_RECEIVE_TIME=sms_receive_time;17.public

21、static final String KEY_RETURN_RESULT=return_result;18.20.3 程序开发n20.3.2 数据库适配器19./*静态Helper类,用于建立、更新和打开数据库*/20.private static class DBOpenHelper extends SQLiteOpenHelper 21.public DBOpenHelper(Context context,String name,CursorFactory factory,int version)22.super(context,name,factory,version);23.24.

22、25.private static final String DB_CREATE_CONFIG=create table +26.DB_TABLE_CONFIG+(+KEY_ID+integer primary key autoincrement,+27.KEY_CITY_NAME+text not null,+KEY_REFRESH_SPEED+text,+28.KEY_SMS_SERVICE+text,+KEY_SMS_INFO+text,+29.KEY_KEY_WORD+text);30.31.private static final String DB_CREATE_SMS=creat

23、e table +32.DB_TABLE_SMS+(+KEY_ID+integer primary key autoincrement,+33.KEY_SENDER+text not null,+KEY_BODY+text,+34.KEY_RECEIVE_TIME+text,+KEY_RETURN_RESULT+text);35.20.3 程序开发n20.3.2 数据库适配器36.Override37.public void onCreate(SQLiteDatabase _db)38._db.execSQL(DB_CREATE_CONFIG);39._db.execSQL(DB_CREATE

24、_SMS);40.41./初始化系统配置的数据表42.Config.LoadDefaultConfig();43.ContentValues newValues=new ContentValues();44.newValues.put(KEY_CITY_NAME,Config.CityName);45.newValues.put(KEY_REFRESH_SPEED,Config.RefreshSpeed);46.newValues.put(KEY_SMS_SERVICE,Config.ProvideSmsService);47.newValues.put(KEY_SMS_INFO,Config

25、.SaveSmsInfo);48.newValues.put(KEY_KEY_WORD,Config.KeyWord);49._db.insert(DB_TABLE_CONFIG,null,newValues);50.51.20.3 程序开发n20.3.2 数据库适配器52.Override53.public void onUpgrade(SQLiteDatabase _db,int _oldVersion,int _newVersion)54._db.execSQL(DROP TABLE IF EXISTS +DB_TABLE_CONFIG);55._db.execSQL(DROP TABL

26、E IF EXISTS +DB_CREATE_SMS);56.onCreate(_db);57.58.20.3 程序开发n20.3.2 数据库适配器q在DBAdapter类中,用户界面会调用SaveConfig()和LoadConfig(),从SQLite数据库中保存和读取配置信息。保存配置信息时,SaveConfig()函数会将Config类中的公有静态属性写入数据库;反之,LoadConfig()会将数据库中的配置信息写入Config类中的公有静态属性qSaveConfig()和LoadConfig()的代码如下1.public void SaveConfig()2.ContentValu

27、es updateValues=new ContentValues();3.updateValues.put(KEY_CITY_NAME,Config.CityName);4.updateValues.put(KEY_REFRESH_SPEED,Config.RefreshSpeed);5.updateValues.put(KEY_SMS_SERVICE,Config.ProvideSmsService);6.updateValues.put(KEY_SMS_INFO,Config.SaveSmsInfo);7.updateValues.put(KEY_KEY_WORD,Config.KeyW

28、ord);20.3 程序开发n20.3.2 数据库适配器8.db.update(DB_TABLE_CONFIG,updateValues,KEY_ID+=+DB_CONFIG_ID,null);9.Toast.makeText(context,系统设置保存成功,Toast.LENGTH_SHORT).show();10.11.12.public void LoadConfig()13.Cursor result=db.query(DB_TABLE_CONFIG,new String KEY_ID,KEY_CITY_NAME,14.KEY_REFRESH_SPEED,KEY_SMS_SERVIC

29、E,KEY_SMS_INFO,KEY_KEY_WORD,15.KEY_ID+=+DB_CONFIG_ID,null,null,null,null);16.if(result.getCount()=0|!result.moveToFirst()17.return;18.20.3 程序开发n20.3.2 数据库适配器19.Config.CityName=result.getString(result.getColumnIndex(KEY_CITY_NAME);20.Config.RefreshSpeed=result.getString(result.getColumnIndex(KEY_REFR

30、ESH_SPEED);21.Config.ProvideSmsService=result.getString(result.getColumnIndex(KEY_SMS_SERVICE);22.Config.SaveSmsInfo=result.getString(result.getColumnIndex(KEY_SMS_INFO);23.Config.KeyWord=result.getString(result.getColumnIndex(KEY_KEY_WORD);24.Toast.makeText(context,系统设置读取成功,Toast.LENGTH_SHORT).show

31、();25.20.3 程序开发n20.3.2 数据库适配器q另一个会调用DBAdapter类的是后台服务,即WeatherService类q后台服务主要调用SaveOneSms(SimpleSms sms)、DeleteAllSms()和GetAllSms()函数,分别用来保存SMS短信记录、删除所有SMS数据记录和获取所有SMS数据记录q在GetAllSms()函数中,调用了一个私有函数ToSimpleSms(Cursor cursor),用来将从数据库获取的数据转换为SimpleSms对象数组qSimpleSms类将在下一小节进行介绍q下面是SaveOneSms(SimpleSms sms

32、)、DeleteAllSms()和GetAllSms()函数的代码20.3 程序开发n20.3.2 数据库适配器1.public void SaveOneSms(SimpleSms sms)2.ContentValues newValues=new ContentValues();3.newValues.put(KEY_SENDER,sms.Sender);4.newValues.put(KEY_BODY,sms.Body);5.newValues.put(KEY_RECEIVE_TIME,sms.ReceiveTime);6.newValues.put(KEY_RETURN_RESULT,s

33、ms.ReturnResult);7.db.insert(DB_TABLE_SMS,null,newValues);8.9.public long DeleteAllSms()10.return db.delete(DB_TABLE_SMS,null,null);11.12.public SimpleSms GetAllSms()13.Cursor results=db.query(DB_TABLE_SMS,new String KEY_ID,KEY_SENDER,14.KEY_BODY,KEY_RECEIVE_TIME,KEY_RETURN_RESULT,15.null,null,null,

34、null,null);16.return ToSimpleSms(results);17.18.private SimpleSms ToSimpleSms(Cursor cursor)20.3 程序开发n20.3.2 数据库适配器19.int resultCounts=cursor.getCount();20.if(resultCounts=0|!cursor.moveToFirst()21.return null;22.23.24.SimpleSms sms=new SimpleSmsresultCounts;25.for(int i=0;iresultCounts;i+)26.smsi=n

35、ew SimpleSms();27.smsi.Sender=cursor.getString(cursor.getColumnIndex(KEY_SENDER);28.smsi.Body=cursor.getString(cursor.getColumnIndex(KEY_BODY);29.smsi.ReceiveTime=cursor.getString(cursor.getColumnIndex(KEY_RECEIVE_TIME);30.smsi.ReturnResult=cursor.getString(cursor.getColumnIndex(KEY_RETURN_RESULT);3

36、1.cursor.moveToNext();32.33.return sms;34.20.3 程序开发n20.3.3 短信监听器q短信监听器本质上是BroadcastReceiver,用于监听Android系统所接收到的所有SMS短消息,可以在应用程序关闭后仍然继续运行,核心代码在SmsReceiver.java文件中q在介绍SmsReceiver类前,先说明用来保存SMS短信内容和相关信息的SimpleSms类。android.telephony.gsm.SmsMessage是Android提供的短信类,但这里需要一个更精简、小巧的类,保存少量的信息,因此构造了SimpleSms类,仅用来保

37、存短信的发送者、内容、接收时间和返回结果。这里的“返回结果”指的是返回包含天气信息的短信内容20.3 程序开发n20.3.3 短信监听器qSimpleSms.java文件完整代码:1.package edu.hrbeu.WeatherDemo.SMS;2.import java.text.SimpleDateFormat;3.4.public class SimpleSms 5.public String Sender;6.public String Body;7.public String ReceiveTime;8.public String ReturnResult;9.10.publi

38、c SimpleSms()11.20.3 程序开发n20.3.3 短信监听器n第5行到第8行代码的属性Sender、Body、ReceiveTime和ReturnResult,分别表示SMS短信的发送者、内容、接收时间和返回结果n第15行和第16行的代码在SimpleSms类的构造函数中,直接将系统时间以“年-月-日 小时:分:秒”的格式保存在ReceiveTime属性中12.public SimpleSms(String sender,String body)13.this.Sender=sender;14.this.Body=body;15.SimpleDateFormat tempDat

39、e=new SimpleDateFormat(yyyy-MM-dd+hh:mm:ss);16.this.ReceiveTime=tempDate.format(new java.util.Date();17.this.ReturnResult=;18.19.20.3 程序开发n20.3.3 短信监听器qSmsReceiver类继承BroadcastReceiver,重载了onReceive()函数q系统消息的识别和关键字的识别并不复杂,只要接收android.provider.Telephony.SMS_RECEIVED类型的系统消息,则表明是Android系统接收到了短信;将短信的内容拆分后

40、,判断消息内容是否是配置信息中定义的关键字,即可判断该短信是否为天气服务请求短信20.3 程序开发n20.3.3 短信监听器qSmsReceiver.java文件的核心代码1.public class SmsReceiver extends BroadcastReceiver2.private static final String SMS_ACTION=android.provider.Telephony.SMS_RECEIVED;3.4.Override5.public void onReceive(Context context,Intent intent)6.if(intent.get

41、Action().equals(SMS_ACTION)7.Bundle bundle=intent.getExtras();8.if(bundle!=null)9.Object objs=(Object)bundle.get(pdus);10.SmsMessage messages=new SmsMessageobjs.length;11.for(int i=0;iobjs.length;i+)12.messagesi=SmsMessage.createFromPdu(byte)objsi);13.20.3 程序开发n20.3.3 短信监听器14.String smsBody=messages

42、0.getDisplayMessageBody();15.String smsSender=messages0.getDisplayOriginatingAddress();16.if(smsBody.trim().equals(Config.KeyWord)&Config.ProvideSmsService.equals(true)17.SimpleSms simpleSms=new SimpleSms(smsSender,smsBody);18.WeatherService.RequerSMSService(simpleSms);19.Toast.makeText(context,接收到服

43、务请求短信,Toast.LENGTH_SHORT).show();20.21.22.23.24.20.3 程序开发n20.3.3 短信监听器n第10行代码将带有pdus字符串特征的对象,通过Bundle.get()函数提取出来n在第12行代码使用SmsMessage.CreateFromPdu()函数构造SmsMessage对象n在第20行代码使用循环语句是因为接收到的短信可能不止一条n从第14行和第15行代码上看,这里只处理第1条短信n第17行代码构造SimpleSms对象n在代码第18行调用WeatherService类的RequerSMSService()函数,将SimpleSms对象添

44、加到短信队列中20.3 程序开发n20.3.3 短信监听器q在AndroidManifest.xml文件中注册短信监听器SmsReceiver,并声明可以接收短信的用户许可android.permission.RECEIVE_SMSq如果注册的组件不在根命名空间中,则需要将子命名空间写在类的前面20.3 程序开发n20.3.3 短信监听器q例如下面在代码第1行中,因为SmsReceiver.java文件在edu.hrbeu.WeatherDemo.Service命名空间下,而不在根命名空间edu.hrbeu.WeatherDemo下,因此注册组件时需要在类名SmsReceiver前添加.Ser

45、vice1.2.3.4.5.6.20.3 程序开发n20.3.4 后台服务q后台服务是WeatherDemo示例的核心模块,在用户启动后持续在后台运行,直到用户手动停止服务q后台服务功能n一是发送包含天气信息的SMS短信(短信发送模块)n二是周期性的获取Google的天气数据(数据获取模块)20.3 程序开发n20.3.4 后台服务q短信发送模块:后台服务在单独的线程上运行n首先调用ProcessSmsList()函数,检查短信队列中是否有需要回复的短信n然后调用GetGoogleWeatherData()函数获取天气数据n最后线程暂停1秒,以释放CPU资源qWeatherDemo示例后台服务

46、的核心代码在WeatherService.java文件中20.3 程序开发n20.3.4 后台服务q下面是线程调用函数的部分代码1.private static ArrayList smsList=new ArrayList();2.3.private Runnable backgroudWork=new Runnable()4.Override5.public void run()6.try7.while(!Thread.interrupted()8.ProcessSmsList();9.GetGoogleWeatherData();10.Thread.sleep(1000);11.12.c

47、atch(InterruptedException e)13.e.printStackTrace();14.15.16.;20.3 程序开发n20.3.4 后台服务qProcessSmsList()函数用来检查短信列表smsList,并根据Weather类中保存的天气数据,向请求者的发送回复短信qWeatherService.java文件的ProcessSmsList()函数代码如下20.3 程序开发n20.3.4 后台服务1.private void ProcessSmsList()2.if(smsList.size()=0)3.return;4.5.SmsManager smsManage

48、r=SmsManager.getDefault();6.PendingIntent mPi=PendingIntent.getBroadcast(this,0,new Intent(),0);7.while(smsList.size()0)8.SimpleSms sms=smsList.get(0);9.smsList.remove(0);10.smsManager.sendTextMessage(sms.Sender,null,Weather.GetSmsMsg(),mPi,null);11.sms.ReturnResult=Weather.GetSmsMsg();12.SaveSmsDat

49、a(sms);13.14.20.3 程序开发n20.3.4 后台服务n发送短信是使用SmsManager对象的sendTextMessage()方法,该方法一共需要5个参数q第1个参数是收件人地址q第2个参数是发件人地址q第3个参数是短信正文q第4个参数是发送服务q第5个参数是送达服务nsendTextMessage()方法的收件人地址和短信正文是不可为空的参数,而且一般GSM规范要求短信内容要控制在70个汉字以内n代码第8行的Weather.GetSmsMsg(),用来获得供回复短信使用的天气信息,因为考虑到短信的字数限制,仅返回当天和未来一天的天气状况20.3 程序开发n20.3.4 后台

50、服务qWeather.java文件的代码如下1.package edu.hrbeu.WeatherDemo.Weather;2.import android.graphics.Bitmap;3.4.public class Weather 5.public static String city;6.public static String forecase_date;7.public static String current_date_time;8.public static String current_condition;9.public static String current_te

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(三级项目(天气预报短信提供系统)精讲课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|