彩信发送和接收关键流程

来源:互联网 发布:淘宝办理出版物许可证 编辑:程序博客网 时间:2024/06/08 07:40

MMS 的设计基于WAP协议;

DataConnection 手机上网数据连接,其中5种常用类型的APN配置信息中就有MMS类型,即收发彩信时需要建立手机上网数据连接;


MMS发送和接收,就是TransactionService基于WAP的网络传输层的处理机制,基于观察者设计模式;

彩信发送的核心是TransactionService和它的4个子Transaction:

SendTransaction 发送短信

NotificationTransaction彩信接收

RetrieveTransaction彩信下载(彩信检索)

ReadRecTransaction 发送彩信阅读报告


public abstract class Transaction extends Observable 

public class TransactionService extends Service implements Observer, ITransactionServiceCallback 

public class SendTransaction extends Transaction implements Runnable

public class NotificationTransaction extends Transaction implements Runnable 

public class RetrieveTransaction extends Transaction implements Runnable 

public class ReadRecTransaction extends Transaction implements Runnable 


TransactionService就是彩信收发的Service,它会创建MMS类型的上网数据连接,并构造Transaction对象,并将其放入等待发送的彩信列表mPending中;

两个彩信列表:

mProcessing 列表中保存正在执行的Transaction对象

mPending 列表中保存等待执行的Transaction对象


Transaction执行结束通知观察者,就是TransactionService和RetryScheduler;

TransactionService检查mProcessing和mPending两个列表,当两个列表同时为空时,关闭MMS类型的数据连接,结束彩信传输服务;

RetryScheduler的作用是当Transaction执行失败后,重新执行Transaction传输;


3GPP规范,彩信阅读报告两种形式:

1、以新彩信方式给服务器发送一条彩信;

2、发送ReadRecTransaction类中创建的PDU方式;


TransactionService为核心的彩信传输机制

1、TransactionService服务检查当前MMS数据连接是否有效

2、构造Transaction对象

扫描到待发送彩信,发送EVENT_TRANSACTION_REQUEST消息

3、处理Transaction对象

processTransaction处理逻辑有两个:

1)创建MMS上网数据连接

2)保存Transaction对象到mPending待发送彩信列表中

创建MMS上网数据连接通过调用beginMmsConnectivity方法完成

4、MMS数据连接成功后调用process方法执行彩信传输

5、Transaction对象通知观察者TransactionService

所有的Transaction对象保存在ProcessList列表中,可实现多线程传输


Transaction对象执行彩信传输

Transaction对象的process方法执行彩信传输,其子类SendTransaction和NotificationTransaction的process方法,分别实现了彩信的发送和接收传输过程;

SendTransaction.process  --> run --> sendPdu --> HttpUtils.httpConnection

NotificationTransaction.process  --> run --> getPdu --> HttpUtils.httpConnection


基于WAP PUSH的彩信接收与下载

彩信接收是基于WAP PUSH加上Transaction传输实现;

WAP PUSH通知有新彩信,Transaction将从彩信服务器上下载彩信;

当收到SMS短信的端口是2948时,SMSDispatcher会将接收到的PDU转发给WapPushOverSms类的dispatchWapPdu处理;

dispatchWapPdu发送WAP_PUSH_RECEIVED_ACTION广播通知MMS应用,启动TransactionService,调用NotificationTransaction.process接收彩信;



0 0
原创粉丝点击