调用安卓调用服务器接口短信接口发短信怎么处理sms

Android 短信SDK操作回调 | Mob文档中心
Android 短信SDK操作回调
注册回调:
Objective-C
SMSSDK.registerEventHandler(EventHandler);
SMSSDK.registerEventHandler(EventHandler);
其中的EventHandler即为操作回调。它包括4个方法,分别为:
Objective-C
public void onRegister();
public void beforeEvent(int event, Object data);
public void afterEvent(int event, int result, Object data);
public void onUnregister();
public void onRegister();public void beforeEvent(int event, Object data);public void afterEvent(int event, int result, Object data);public void onUnregister();
其中onRegister在回调对象注册的时候被触发。beforeEvent在操作执行前被触发,其参数event表示操作的类型,data是从外部传入的数据。afterEvent在操作结束时被触发,同样具备event和data参数,但是data是事件操作结果,其具体取值根据参数result而定。result是操作结果,为SMSSDK.RESULT_COMPLETE表示操作成功,为SMSSDK.RESULT_ERROR表示操作失败。
当result=SMSSDK.RESULT_ERROR,则data的类型为Throwable;如果服务器有返回错误码,那么这个Throwable的message就存放着服务器返回的json数据,你可以从中读取相关信息。示例如下:
读取data中的message信息
//#if def{lang} == cn
// 根据服务器返回的网络错误,给toast提示
//#elif def{lang} == en
// show toast according to the error code
Throwable throwable = (Throwable)
throwable.printStackTrace();
JSONObject object = new JSONObject(throwable.getMessage());
String des = object.optString("detail");//错误描述
int status = object.optInt("status");//错误代码
if (status & 0 && !TextUtils.isEmpty(des)) {
Toast.makeText(activity, des, Toast.LENGTH_SHORT).show();
} catch (Exception e) {
//do something
123456789101112131415161718
//#if def{lang} == cn// 根据服务器返回的网络错误,给toast提示//#elif def{lang} == en// show toast according to the error code//#endiftry {&&&& Throwable throwable = (Throwable) data;&&&& throwable.printStackTrace();&&&& JSONObject object = new JSONObject(throwable.getMessage());&&&& String des = object.optString("detail");//错误描述&&&& int status = object.optInt("status");//错误代码&&&& if (status & 0 && !TextUtils.isEmpty(des)) {&&&&Toast.makeText(activity, des, Toast.LENGTH_SHORT).show();&&&&return;&&&& }} catch (Exception e) {&&&& //do something&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
当result=SMSSDK.RESULT_COMPLETE,则data的类型如下表所示。onUnregister在被反注册的时候被触发。
EVENT_GET_SUPPORTED_COUNTRIES
ArrayList&HashMap&String,Object&&
返回支持发送验证码的国家列表
EVENT_GET_VERIFICATION_CODE
请求发送验证码,无返回
EVENT_SUBMIT_VERIFICATION_CODE
HashMap&String,Object&
校验验证码,返回校验的手机和国家代码
EVENT_GET_CONTACTS
ArrayList&HashMap&String,Object&&
获取手机内部的通信录列表
EVENT_SUBMIT_USER_INFO
提交应用内的用户资料
EVENT_GET_FRIENDS_IN_APP
ArrayList&HashMap&String,Object&&
获取手机通信录在当前应用内的用户列表
EVENT_GET_VOICE_VERIFICATION_CODE
请求发送语音验证码,无返回
短信SDK采用“广播”的方式发送操作结果。这就是说,每次调用registerEventHandler都会设置一个新的EventHandler到SDK内部,当事件发生时,这些注册进来的EventHandler都能收到信息而不会发生“后者替换前者”的问题。为了避免EventHandler注册后不再使用而造成内存泄漏,请务必在确定不使用某个EventHandler时,调用反注册代码将其注销,反注册的方法为:
Objective-C
SMSSDK.unregisterEventHandler(EventHandler);
SMSSDK.unregisterEventHandler(EventHandler);
在EventHandler的4个回调方法都可能不在UI线程下,因此如果要在其中执行UI操作,请务必使用Handler发送一个消息给UI线程处理。android 中调用接口发送短信 - ziyu_1 - ITeye技术网站
博客分类:
android中可以通过两种方式发送短信
第一:调用系统短信接口直接发送短信;主要代码如下:
//直接调用短信接口发短信
SmsManager smsManager = SmsManager.getDefault();
List&String& divideContents = smsManager.divideMessage(content);
for (String text : divideContents) {
smsManager.sendTextMessage("150xxxxxxxx", null, text, sentPI, deliverPI);
第二:调起系统发短信功能;主要代码如下:
Uri uri = Uri.parse("smsto:10010");
Intent it = new Intent(Intent.ACTION_SENDTO, uri);
it.putExtra("sms_body", "102");
activity.startActivity(it);
这里主要讲解第一种方法,其中大部分信息来源于互联网:
1.获取短信管理器
SmsManager smsManager = SmsManager.getDefault();
2.拆分短信内容(手机短信长度限制)
List&String& divideContents = smsManager.divideMessage(content);
3.发送拆分后的内容
List&String& divideContents = smsManager.divideMessage(content);
for (String text : divideContents) {
smsManager.sendTextMessage("150xxxxxxxx", null, text, sentPI, deliverPI);
4.处理返回的发送状态
String SENT_SMS_ACTION = "SENT_SMS_ACTION";
Intent sentIntent = new Intent(SENT_SMS_ACTION);
PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, sentIntent,
// register the Broadcast Receivers
context.registerReceiver(new BroadcastReceiver() {
public void onReceive(Context _context, Intent _intent) {
switch (getResultCode()) {
case Activity.RESULT_OK:
Toast.makeText(context,
"短信发送成功", Toast.LENGTH_SHORT)
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
case SmsManager.RESULT_ERROR_RADIO_OFF:
case SmsManager.RESULT_ERROR_NULL_PDU:
}, new IntentFilter(SENT_SMS_ACTION));
5.处理返回的接收状态
String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION";
// create the deilverIntent parameter
Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION);
PendingIntent deliverPI = PendingIntent.getBroadcast(context, 0,
deliverIntent, 0);
context.registerReceiver(new BroadcastReceiver() {
public void onReceive(Context _context, Intent _intent) {
Toast.makeText(context,
"收信人已经成功接收", Toast.LENGTH_SHORT)
}, new IntentFilter(DELIVERED_SMS_ACTION));
发送短信的参数说明
smsManager.sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent)
-- destinationAddress:目标电话号码
-- scAddress:短信中心号码,测试可以不填
-- text: 短信内容
-- sentIntent:发送 --&中国移动 --& 中国移动发送失败 --& 返回发送成功或失败信号 --& 后续处理&& 即,这个意图包装了短信发送状态的信息
-- deliveryIntent: 发送 --&中国移动 --& 中国移动发送成功 --& 返回对方是否收到这个信息 --& 后续处理& 即:这个意图包装了短信是否被对方收到的状态信息(供应商已经发送成功,但是对方没有收到)。
浏览 39046
浏览: 121519 次
把demo发一下好吗?谢谢了!clshanghe@126.co ...
symark 写道scheduleInfoManager这个b ...
多谢楼主。问题解决。
helwens 写道这个工具的局限性在于不能解析出节点属性因为 ...
谢谢你的提示,我的问题解决了
再次感谢!android短信发送demo - 下载频道
- CSDN.NET
&&&&android短信发送demo
android短信发送demo
1,跳转到系统或短信应用的发送界面。
2,直接调用系统的短信接口发送,该方法可以判断是否发送成功和对方是否接受。
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
您可能还需要
移动开发下载排行android MMS/SMS 收发流程分析(接收发送)-android100学习网
android MMS/SMS 收发流程分析(接收发送)
Messaging中的ReceiverR eceiver广播 接收器用于响应系统中的各种广播事件并执行相关业务代码的组件,常用于完成如:启动service、显示Activity等 任务 。在Messagin应用中一共有7个 R eceiver:1、.trans...
Messaging中的Receiver
R eceiver广播 接收器用于响应系统中的各种广播事件并执行相关业务代码的组件,常用于完成如:启动service、显示Activity等 任务 。在Messagin应用中一共有7个 R eceiver:
1、.transaction.SmsReceiver : 短消息 广播 接收器,它负责处理与收到短消息相关的广播事件。触发该接收器运行的intent有两个:
A.android.intent.action.BOOT_COMPLETED---&Android系统启动完成时会发出该广播,即SmsReceiver会在系统启动完成时接收到调用;
B.com.android.mms.transaction.MESSAGE_SENT ---&定义在 SmsReceiverService.java中的常量,被用在SmsMessageSender.sendMessage方法中&&即短消息发送后 触发的广播事件;
完全和预想的一样,在 SmsReceiver中会启动 SmsReceiverService,启动代码在beginStartingService方法里。值得注意的是它同时还做了&屏幕唤醒锁定 (WakeLock)& 操作,最终在service启动完成后,通过回调用finishStartingService方法,解除了屏幕唤醒锁定。
SmsReceiver.java中有编译错误,因为无法访问android.provider.Telephony.Sms.Intents。其实 Intents 所在位置是:myeclair/frameworks/base/core/java/android/provider /Telephony.java,它被标记为@hide。
2、 . transaction.PrivilegedSmsReceiver :该接收器是SmsReceiver的子类,唯一的区别在于该Receiver被申明有permission为android.permission.BROADCAST_SMS。
3、.transaction.MmsSystemEventReceiver :Mms系统事件接收器,它负责 在收到新消息时 向通知区域(即标题栏)显示小图标,和 重新发送在发件箱中的MM。触发该接收器运行的两个Intent是:
A. android.intent.action.BOOT_COMPLETED ---& :与SmsReceiver中的情况相同;
B.android.intent.action.CONTENT_CHANGED ---& :连接方式改变时系统会发出该广播,即在连接方式变化,例如从gprs--&wifi时该接收器将被调用 ;
在MmsSystemEventReceiver类中,程序一旦获得数据连接时就会启动TransactionService服务;当连接方式改变时还会 调用PduCache.purge()方法清理缓存;还有当系统刚刚启动时 会同步通知区域的图标、未读消息个数等信息。
MmsSystemEventReceiver.java中有编译错误,因为它无法访问以下类:
1、com.google.android.mms.util.PduCache:位置-myeclair/frameworks/base/core /java/com/google/android/mms/util/PduCache.java,该类未包含在默认的android.jar文件中, 需要重新编译;
2、android.provider.Telephony.Mms: 位置- myeclair/frameworks/base/core/java/android/provider/Telephony.java,该类被标记为 @hide 。
3、com.android.internal.telephony.TelephonyIntents:位置-myeclair/frameworks /base/telephony/java/com/android/internal/telephony /TelephonyIntents.java,该类是一个常量类是未被开放的API。
4、com.android.internal.telephony.Phone: 位置- myeclair/frameworks/base/telephony/java/com/android/internal/telephony /Phone.java, 该类被标记为 @hide 。
4、.transaction.PushReceiver : WAP_PUSH 事件的广播接收器,该事件发生时 代表手机收到了一条新的WAP PUSH message。该接收器被调用后,首先唤醒手机屏幕5秒钟,然后在一个后台线程中处理push-data,将消息数据插入到数据库中,必要时启动 TransactionService服务以更新通知信息 。触发该接收器运行的 Intent是:
(intent.action=android.provider.Telephony.WAP_PUSH_RECEIVED, data=application/vnd.wap.mms-message),其中Action.Name定义在 android.provider.Telephony类中。值得注意的是该Receiver有申明权 限:android.permission.BROADCAST_WAP_PUSH,这意味着发出该广播时必须携带该授权,否则本 Receiver将不会被触发执行。
PushReceiver.java中有编译错误,因为它无法访问以下类:
1、android.provider.Telephony : 位置- myeclair/frameworks/base/core/java/android/provider/Telephony.java,该类被标记为 @hide 。
2、com.google.android.mms.*: 位置- myeclair/frameworks/base/core/java/com/google/android/mms/*,这些类未包括在公开的API中。
5、. transaction.MessageStatusReceiver :消息状态改变时的广播接收器,消息状态改变是指消息的投递状态(即:是否成功送达、是否被目标用户阅读等)的变化,触发该接收器的Intent 是:com.android.mms.transaction.MessageStatusReceiver. MESSAGE_STATUS_RECEIVED,该值是申明在MessageStatusReceiver.java文件中的常量。该广播事件是在 SmsMessageSender.sendMessage()方法中被发出的,收到广播事件后,Receiver的会做两件事情:a-取得pdu数据包 更新消息状态(在updateMessageStatus方法中);b-更新通知区域的新消息指示信息 (在MessagingNotification.updateNewMessageIndicator()方法中)。
MessageStatusReceiver.java中有编译错误,因为它无法访问以下类:
1、android.provider.Telephony : 位置- myeclair/frameworks/base/core/java/android/provider/Telephony.java,该类被标记为 @hide 。
2、com.google.android.mms.util.SqliteWrapper: 位置- myeclair/frameworks/base/core/java/com/google/android/mms/ util/SqliteWrapper.java,该类未包括在公开的API中。
6、.transaction.SimFullReceiver :Sim卡短信存储空间满的事件通知,当系统发现Sim卡中存储短信的空间耗尽时会发出该广播事件。该接收器完成的工作是在通知区域显示相关信息,点击通 知信息后,可以进入管理Sim卡中短消息的Activity界面 。
SimFullReceiver.java中有编译错误,因为它无法访问 android.provider.Telephony 类,所在位置-myeclair/frameworks/base/core/java/android/provider /Telephony.java,该类被标记为 @hide 。
7、.transaction.SmsRejectedReceiver :短消息被拒绝时的事件接收器,当手机的存储空间不足时会拒绝接收新的短消息,当该事件发生时SmsRejectedReceiver被调用,它会检查确 认是否是存储空间不足,然后在通知区域显示相关通知信息。
SmsRejectedReceiver.java中有编译错误,因为它无法访问 android.provider.Telephony 类,所在位置-myeclair/frameworks/base/core/java/android/provider /Telephony.java,该类被标记为 @hide 。
Messaging中的Activity
Activity是用来构建UI(用户界面 )的组件,用户操作界面代表了应用程序提供的基本功能,是应用程序和用户之间的交互接口。在Messaging应用中有以下的Activity:
1、.ui.ConversationList ,对话列表界面,这是进入应用程序的主界面。它有两个配置属性值得我们特别注 意,a.android:configChanges=&orientation|keyboardHidden&:在Android系统中,当程序所运 行的环境(如:屏幕方向、键盘状态、字体等级,等等 )发生变化后 会导致Activity被重新启动(以适应环境变化 ),然而 Activity也可以宣称自己来应付某些变化(而不是一股脑地全让系统重启自己), configChanges 属性 正是用于 指定自己愿意 应付 的变化情况。此处该属性有两个值, orientation代表屏幕方向发生改变,keyboardHidden表示键盘可访问状态发生变化(即键盘弹出/收起 ),这意味着当屏幕方向和键盘可用状态 发生变化时, Activity不会被重新启动,而是调用其onConfigurationChanged方法,通常是在该方法中对自己做出调整,以适应变 化;b.launchMode=&singleTop&:该属性指示了Activity的加载模式,这与Activity在不同Task之间的重用有关, 该属性共有4个可用选项standard, singleTop,singleTask,singleInstance,它们将与Intent中的FLAG_ACTIVITY_* 标记 常量 协同产生相关作用。
ConversationList类中定义了程序中涉及到的选项菜单、会话(Conversation)项上的上下文菜单等UI元素。另外该类中的runOneTimeStorageLimitCheckForLegacyMessages方法用于检测存储空间限制。
SmsRejectedReceiver .java中有编译错误,因为它无法访问以下类:
1.android.provider.Telephony 类,所在位置- myeclair/frameworks/base/core/java/android/provider/Telephony.java,该类被标记为 @hide 。
2. com.google.android.mms.*: 位置- myeclair/frameworks/base/core/java/com/google/android/mms/*,这些类未包括在公开的API中。
2、.ui.ComposeMessageActivity ,创建新消息的用户界面,通过选项菜单menu_compose_new会调用到该界面。这是个很庞大的类,内部实现也很复杂,等仔细看了再写补充吧。
ComposeMessageActivity .java中有编译错误,因为它无法访问以下类:
1.com.android.internal.widget.ContactHeaderWidget类,所在位置 -myeclair/frameworks/base/core/java/com/android/internal/widget /ContactHeaderWidget.java,该类被标记为 @hide 。
2.com.android.internal.telephony.* 类,所在位置- myeclair/frameworks/ base/telephony/java/com/android/internal/telephony/*,这些类未包括在公开的API中 。
3. com.google.android.mms.*: 位置- myeclair/frameworks/base/core/java/com/google/android/mms/*,这些类未包括在公开的API中 。
3、 .ui.ForwardMessageActivity ,用于转发消息的Activity,这是ComposeMessageActivity的别名,用于把一条现有消息的内容带到创建消息的界面上;
4、.ui.DeliveryReportActivity ,投递报告 Activity, 用于报告消息的投递状态,它采用对话框风格的主题(android:theme=&
:style/Theme.Dialog&)。
DeliveryReportActivity .java中有编译错误,因为它无法访问以下类:
1. com.google.android.mms.*: 位置- myeclair/frameworks/base/core/java/com/google/android/mms/*,这些类未包括在公开的API中 。
2. android.provider.Telephony 类,所在位置- myeclair/frameworks/base/core/java/android/provider/Telephony.java,该类被标记为 @hide 。
5、.ui.WarnOfStorageLimitsActivity ,存储空间限制警告,用于告知用户 关于存储空间限制的设置信息。
WarnOfStorageLimitsActivity .java中有编译错误,因为它无法访问以下类:
1. com.android.internal.app.AlertActivity类, 位置- myeclair/frameworks/base/core/java/com/android/internal/app /AlertActivity.java,该类未包括在公开的API中 。
2. com.android.internal.app.AlertController类, 位置- myeclair/frameworks/base/core/java/com/android/internal/app /AlertController.java,该类未包括在公开的API中 。
6.ui.ConfirmRateLimitActivity ,发送多条彩信时向用户提示确认的界面,它包括了自动 应答操作&&即用户 超过一段时间 未作出响应时自动取消发送。
7、.ui.ClassZeroActivity ,ClassZero是一种特殊的短消息类型,它会直接显示在用户屏幕上并等待用户操作。ClassZeroActivity正是用来显示此类型的短信消息 ,并运行用户将信息保存起来 。
ClassZeroActivity .java中有编译错误,因为它无法访问以下类:
1. android.provider.Telephony 类,所在位置- myeclair/frameworks/base/core/java/android/provider/Telephony.java,该类被标记为 @hide 。
2. com.google.android.mms.util.SqliteWrapper: 位置- myeclair/frameworks/base/core/java/com/google/android/mms/ util/SqliteWrapper.java ,该类未包括在公开的API中。
8、.ui.MessagingPreferenceActivity ,这是Messaging应用的系统配置界面,其中有针对SMS、MMS、存储限制等配置属性,以及管理存储在 SIM卡中 的短信消息。该Activity启动时会检查当前是否有SIM,以及是否支持MMS来动态调整配置项列表。
MessagingPreferenceActivity .java中有编译错误,因为它无法访问TelephonyManager.getDefault()方法,可以考虑使用 Context.getSystemService(Context.TELEPHONY_SERVICE)方法来得到类实例。
9、.ui.ManageSimMessages ,用于管理Sim卡中短消息的界面,它以列表的形式显示了存储在SIM卡中的短消息,并允许用户将信息转存到手机内存中,或者删除消息。
ManageSimMessages .java中有编译错误,因为它无法访问以下类:
1. android.provider.Telephony 类,所在位置- myeclair/frameworks/base/core/java/android/provider/Telephony.java,该类被标记为 @hide 。
2. com.google.android.mms.util.SqliteWrapper: 位置- myeclair/frameworks/base/core/java/com/google/android/mms/ util/SqliteWrapper.java ,该类未包括在公开的API中。
10、.ui.SearchActivity ,用于信息搜索的操作界面。Android通过系统服务Context. SEARCH_SERVICE(即SearchManager类)提供了强大的信息搜索功能。在该应用中通过对联系人(或者电话号码)、主题等信息的匹配 来搜索信息,并将结果显示在一个列表中。
SearchActivity .java中有编译错误,因为它无法访问以下类:
1. android.provider.Telephony 类,所在位置- myeclair/frameworks/base/core/java/android/provider/Telephony.java,该类被标记为 @hide 。
11、.ui.SlideshowEditActivity , 所谓Slide是指MM中的一页内容 即一帧,通常被称为幻灯片。 SlideshowEditActivity是彩信中所有内容(即多个Slide)的列表,用户可以选定列表项进入Slide播放/修改界面。
SlideshowEditActivity .java中有编译错误,因为它无法访问以下类:
1. com.google.android.mms.*: 位置- myeclair/frameworks/base/core/java/com/google/android/mms/*,这些类未包括在公开的API中 。
12、.ui.SlideshowActivity , 用于播放Slide幻灯片的界面,它会在全屏状态下显示幻灯片的内容。
SlideshowActivity .java中有编译错误,因为它无法访问以下类:
1. com.google.android.mms.*: 位置- myeclair/frameworks/base/core/java/com/google/android/mms/*,这些类未包括在公开的API中 。
13、.ui.SlideEditorActivity ,用于编辑Slide幻灯片内容的操作界面,它提供了:添加、移除 文本/图片/音乐,以及Slide等功能。
SlideEditorActivity .java中有编译错误,因为它无法访问以下类:
1. com.google.android.mms.*: 位置- myeclair/frameworks/base/core/java/com/google/android/mms/*,这些类未包括在公开的API中 。
14、.ui.EditSlideDurationActivity ,用于修改Slide幻灯片持续显示时间 的操作界面 ,默认持续显示时间是5秒。
EditSlideDurationActivity .java编译无错误。
Messaging中的Service
应用中共有两个service:.transaction.TransactionService 和 .transaction.SmsReceiverService,前者负责处理与彩信(MMS)相关的网络业务,后者是短消息(SMS)的接收器,两者 都会响应来自通讯网络的通知并收取信息。它们只用于本应用内部(因为其未声明任何intent-filter),上文介绍的广播接收器中有显式启动它们的 代码。以下我们将分别分析两个Service的基本实现。
1、.transaction.SmsReceiverService ,它被创建时首先 初始化了新的工作线程(HandlerThread对象)用来在后台完成相关动作,紧接着在onStartCommand方法里会将具体的任务通过消息 (即调用service的Intent)发送给工作线程进行处理。根据Intent.Action的名称,工作线程会处理4中情况:
A.系统启动完成后BOOT_COMPLETED:把发件箱(outbox)中的消息移动到发送队列(QueuedBox),然后开始发送队列中的消息,最后调用updateNewMessageIndicator方法更新状态栏消息指示图标;
B.处理Sms接收handleSmsReceived:从Intent中取得消息对象,直接显示给用户(Class0类型)或者保持到数据库中。
C.处理Sms发送handleSmsSent:从待发送消息队列中取得消息,并按次序逐个发送;
D.处理通讯网络状态改变handleServiceStateChanged:用户从无信号状态进入有信息号状态后,继续执行发送任务的情况;
2、.transaction.TransactionService , 是处理与彩信相关业务的服务组件,根据代码中的注释可以了解到: 收发彩信时可以是移动数据网络(mobile data network)或Wi-Fi网络。当没有可用的移动数据网络连接时,会尝试通过Wi-Fi网络发送/接收MMS信息(如果有 Wi-Fi 网络的话)。
它 同样在onCreate方法里首先创建了后台工作线程,通过NetworkConnectivityListener类( 一个被@hide的类 )监听通讯网络链接状态的变化,并根据不同的链接状态作出相应的反应。
紧接着就是onStartCommand方法了,它首先会检测当前的网络连接状态,然后分别完成以下几件事情:
A.针对收发彩信的业务,它将intent.getExtras()包装成一个DTO&& TransactionBundle,再通过launchTransaction()方法将具体工作交给后台工作线程去处理。
B.如果 intent.getExtras()为Null时,它会尝试从数据库中扫描是否有(上次系统结束时)未完成的操作,如果有则遍历所有操作项,逐个调用launchTransaction()方法,以完成操作;
重点还是在后台工作线程的处理逻辑上,在代码中表现为handleMessage方法,它共处理以下几种不同类型的业务消息:
Ⅰ.EVENT_CONTINUE_MMS_CONNECTIVITY ,与彩信系统建立网络连接,它首 先会检查当前是否有待处理的业务,然后通过调用beginMmsConnectivity方法来创建于彩信系统的网络连接,如果网络连接被正确建立,那么 它会通过一个30秒间隔的计时器来维持连接的持续存在;
Ⅱ.EVENT_DATA_STATE_CHANGED ,网络连接状态发生改变分支,这一分支是通过对NetworkConnectivityListener对象的监听而获得回调。在该分支中首先确认了网络 连接的有效性,(代码在此处仅允许ConnectivityManager.TYPE_MOBILE_MMS类型那么wi-fi连接属于该类型? ),然后创建 TransactionSettings对象,并调用processPendingTransaction方法处理具体的彩信业务;
Ⅲ.EVENT_TRANSACTION_REQUEST ,这是对具体彩信业务的处理分支,它首 先创建了承载业务参数的TransactionSettings对象,该对象包含有彩信中心服务地址(mmscUrl)、代理服务器地址和端口等用于建立 网络连接的参数,然后根据不同的业务类型,分别进行处理。当前仅明确处理了以下4中业务:
1、NOTIFICATION_TRANSACTION,通过一条Push数据,通知手机端收到有新信息;
2、RETRIEVE_TRANSACTION,收取彩信;
3、SEND_TRANSACTION,发送彩信;
4、READREC_TRANSACTION,彩信阅读报告;
用于处理具体业务的关键代码在processTransaction方法中,它首先检查业务是否已存在于处理队列中(mProcessing & mPending),然后调用beginMmsConnectivity()方法确认网络连接有效性,并点亮终端屏幕,然后将业务对象条件到处理队列中并 向业务附加观察者,最后调用业务自身process()方法完成网络通信。注意:业务的process方法被调用又会触发观察者(即当前service) 的update方法被调用,这使得刚才被处理掉的业务从队列中被移除,并且开始处理下一条业务;
Ⅴ.EVENT_HANDLE_NEXT_PENDING_TRANSACTION ,这是一个多条彩信业务能够 被 连续 处理的关键分支,首先在当前service中有mProcessing数组列表用于缓存连续的彩信业务,每条彩信业务是一个可被观察的对象(注:观察者模 式 ), 当前service是唯一观察者,其会感知到一条业务已处理结束,并触发下一条业务处理的开始;

我要回帖

更多关于 安卓调用服务器接口 的文章

 

随机推荐