Android 短彩信收发流程(应用层) 下图为ComposeMessageActivity 中 confirmSendMessageIfNeeded 部分的信息发送流程。主要以接收者有效性的确认为主,然后转向sendMessage 方法进行发送。 下图为ComposeMessageActivity 中 confirmSendMessageIfNeeded 部分的信息发送流程。主要以接收者有效性的确认为主,然后转向sendMessage 方法进行发送。 WorkingMessage.send 从下图可以看出,在本方法中,对于不同类型的消息,分别调用不同的方法对其进行处理。并对彩信进行一些简要的预处理。 短信部分: WorkingMessage.preSendSmsWorker 如下图所示,这是短信部分的发送流程。本方法中所涉及到的东西就比较多了。由于已经转到了新线程中利用 WorkingMessage 进行消息的发送,那么原来 ComposeMessage 中的那个WorkingMessage 就可以更新了。然后确认一下所属的会话是否存在,如果不存在就新建一个。 接着,将接收者序列化,调用 sendSmsWorker。创建一个 SmsMessageSender,将消息存入发送队列中(type 字段设为 6)。通知 SmsReceiver 发送。 SmsReceiver 则调用 SmsReceiverService 发送队列中的第一条短信。 在发送之前,还要根据手机卡的不同,将短信内容分成若干块,保证每块的大小不超过该卡的限制。在分段后的最后一条短信的 sentIntent 中,设置 EXTRA_MESSAGE_SENT_SEND_NEXT 为true。这样当短信发送成功后,会调用 SmsReceiverService 的 handleSmsSent 方法,发送队列中的第一条。 然后,对每块都指定一个 sentIntent,当发送出去之后,修改其状态。若需要报告,还会指定一个 deliveryIntent,用于消息报告的处理。这两个 Intent 都会被封装到 SmsTracker 中,当发送成功后,在 SMSDispatcher 的 handleSendComplete 中被取出。sentIntent 会被立即执行,将消息状态转为已发送。而deliveryIntent 则会被加入 deliveryPendingList,等收到消息报告后才被执行(具体代码在不同的 dispatcher 中)。 发送完毕后,还要对短信上限、消息显示列表、草稿进行相应的处理。 SmsReceiverService.handleSmsSent 消息发送后的处理 当sentIntent 被执行后,会根据不同的结果更新消息的所处信箱 MessageStatusReceiver 消息报告 当需要接收报告时,会在报告收到之后,在SMSDispatcher 中根据不同类型手机从deliveryPendingList 中取出并执行相应的 deliveryIntent SmsReceiverServi...