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);
}
}
Android Mms发送流程
最新推荐文章于 2021-05-27 04:42:01 发布