Android Mms发送流程

mSendButtonSms = (ImageButton) findViewById(R.id.send_button_sms);
mSendButtonSms.setOnClickListener(this);

---
	@Override
    public void onClick(View v) {
        if (v == mSendButtonSms || v == mSendButtonMms) {
            MmsLog.d(TAG, "onClick send button click!");
            if (mSendButtonCanResponse) {
                mSendButtonCanResponse = false;
                if (isPreparedForSending()) {
                    updateSendButtonState(false);
                    checkRecipientsCount();
                    mUiHandler.sendEmptyMessageDelayed(MSG_RESUME_SEND_BUTTON,
                            RESUME_BUTTON_INTERVAL);
                } else {
                    mSendButtonCanResponse = true;
                    unpreparedForSendingAlert();
                }
            }
        }
---
checkRecipientsCount

private void checkRecipientsCount() {
	...
    subSelection();
}    
---

private void subSelection() {
	...
    if (mSubCount == 1) {
        mSelectedSubId = (int) mSubInfoList.get(0).getSubscriptionId();
        confirmSendMessageIfNeeded();
    }
}
---
confirmSendMessageIfNeeded
private void confirmSendMessageIfNeeded() {
		...
        if (mRecipientsEditor.hasInvalidRecipient(isMms)) {

        } else {
            checkConditionsAndSendMessage(true);
        }
}
---

public void checkConditionsAndSendMessage(final boolean bCheckEcmMode) {
      if (!mOpComposeExt.checkConditionsAndSendMessage(mWorkingMessage.requiresMms(),
               bCheckEcmMode)) {
           checkBeforeSendMessage(bCheckEcmMode);
      }
}
---
checkBeforeSendMessage

private void checkBeforeSendMessage(boolean bCheckEcmMode) {
    boolean needSendIpMessage =
        mIpCompose.checkIpMessageBeforeSendMessage(mSelectedSubId, bCheckEcmMode);
    if (!needSendIpMessage) {
        sendMessage(bCheckEcmMode);
    }
}
---

public void sendMessage(boolean bCheckEcmMode) {
	...
	mWorkingMessage.send(mDebugRecipients, mSelectedSubId);
}

初始化的时候
mWorkingMessage = WorkingMessage.createEmpty(this);

---

public void send(final String recipientsInUI, final int subId) {
	if (spliter.getSMSConversation() != null) {
	            new Thread(new Runnable() {
	             public void run() {
	              preSendSmsWorker(spliter.getSMSConversation(), msgTxt, recipientsInUI, subId,
                            (spliter.getMMSConversation() != null) ? true : false);
                  updateSendStats(spliter.getSMSConversation());
                 }
                }
               }
}

---

private void preSendSmsWorker(Conversation conv, String msgText, String recipientsInUI,
            int subId, boolean hasBeenSplit) {
			...
			sendSmsWorker(msgText, semiSepRecipients, threadId, subId);
}

---

private void sendSmsWorker(String msgText,
            String semiSepRecipients, long threadId, int subId) {
		        String[] dests = TextUtils.split(semiSepRecipients, ";");
        MessageSender sender = new SmsMessageSender(mActivity, dests, msgText, threadId, subId);
        try {
            sender.sendMessage(threadId);
            // Make sure this thread isn't over the limits in message count
            Recycler.getSmsRecycler().deleteOldMessagesByThreadId(mActivity, threadId);
        } catch (Exception e) {
            Log.e(TAG, "Failed to send SMS message, threadId=" + threadId, e);
        }
        mStatusListener.onMessageSent();
        MmsWidgetProvider.notifyDatasetChanged(mActivity);
}

---
这里的MessageSender 是个接口对象,一般调用的时候会调用子类的方法
SmsSingleRecipientSender 继承了SmsMessageSender,
public class SmsSingleRecipientSender extends SmsMessageSender
---

public boolean sendMessage(long token) throws MmsException {
		...
        if (isMultiPartNotSupported == true) {
           for (int msgSegemtSent = 0; msgSegemtSent < messageCount; msgSegemtSent++) {
                smsManager.sendTextMessage(mDest,
                   mServiceCenter,
                   messages.get(msgSegemtSent),
                   sentIntents.get(msgSegemtSent),
                   deliveryIntents.get(msgSegemtSent));

          }

       } else  if (!mOpSmsSenderExt.sendMessage(mContext,
                     mSubId, mDest, mServiceCenter, messages, sentIntents, deliveryIntents)) {
                 smsManager.sendMultipartTextMessageWithEncodingType(mDest, mServiceCenter,
                 messages, codingType, sentIntents, deliveryIntents);
       }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值