短信发送流程应用层解析
1、涉及的类
com.android.mms.ui.ComposeMessageActivity
com.android.mms.data.WorkingMessage
com.android.mms.transaction.MessageSender
com.android.mms.transaction.SmsMessageSender
com.android.mms.transaction.SmsSingleRecipientSender
com.android.mms.transaction.SmsReceiverService
com.android.mms.transaction.SmsReceiver
2、时序图
说明:从ui界面开始,到调用中间层SmsManger的方法发送短信,大致时序就是这样,参考代码是android 2.3
3、流程解析
3.1 ComposeMessageActivity工作
该类是我们编辑短信的UI,与用户交互,如下图所示
当用户编辑完成,即可点击发送的按钮,将短信内容发送出去,点击sendbutton就会触发该button对应的监听器,由于ComposeMessageActivity实现了OnClickListener接口,所以最终调用到了onclick方法里。
1)onClick分析
该方法做了两件件事情:
一是调用isPreparedForSending方法判断当前短信是否准备发送,依据就是短信短信的接收者是否超过允许的上限,是否有接收者,以及短信是否有内容或者附件、主题之类的,不允许用户发送一条什么都没有的短信出去。
二是,上面的检查通过调用confirmSendMessageIfNeeded方法开始发送流程。当然并不是调用了该方法就一定能发送成功,该方法同样会做一系列的检查,直到符合要求了才会放行。
2)confirmSendMessageIfNeeded分析
该方法的逻辑调用如下图所示:
3)sendMessage方法分析
上图可以看出最后都要走到sendMessage来,我们来看看这个方法到底做了哪些工作。
通过查看代码我们可以发现最最核心的工作就是: 把发送