SMS发送流程 Android2.2

本文详细介绍了在Android 2.2系统中发送SMS短信的步骤,从点击发送按钮开始,涉及ComposeMessageActivity、WorkingMessage、SmsMessageSender和SmsReceiverService等多个关键组件的交互过程。
摘要由CSDN通过智能技术生成

SMS发送流程

Android2.2packages/apps/Mms

1.      点击发送按钮Src/com/android/mms/ui/ComposeMessageActivity.java

public void onClick(View v) {
        if ((v == mSendButton) && isPreparedForSending()) {
            confirmSendMessageIfNeeded(); //确认是否需要发送短信—-》
        }
}

2.src/com/android/mms/ui/ComposeMessageActivity.java

private void confirmSendMessageIfNeeded() {
        if (!isRecipientsEditorVisible()) {  //编辑联系人不可见时,也就是给已存在会话的联系人发送短信时
            sendMessage(true);
            return;
        }
 
        boolean isMms = mWorkingMessage.requiresMms();   //是否需要以彩信形式发送
                if (mRecipientsEditor.hasInvalidRecipient(isMms)) {//是否含有不合法的收件人
            if (mRecipientsEditor.hasValidRecipient(isMms)) {//有合法的和不合法的,弹出尝试发送对话框
                String title =getResourcesString(R.string.has_invalid_recipient,
                        mRecipientsEditor.formatInvalidNumbers(isMms));
                new AlertDialog.Builder(this)
                   .setIcon(android.R.drawable.ic_dialog_alert)
                    .setTitle(title)
                    .setMessage(R.string.invalid_recipient_message)
                   .setPositiveButton(R.string.try_to_send,
                            newSendIgnoreInvalidRecipientListener())
                   .setNegativeButton(R.string.no, new CancelSendingListener())
                    .show();
            } else {//如果全是不合法的联系人,提示不能发送信息
                new AlertDialog.Builder(this)
                   .setIcon(android.R.drawable.ic_dialog_alert)
                    .setTitle(R.string.cannot_send_message)
                    .setMessage(R.string.cannot_send_message_reason)
                   .setPositiveButton(R.string.yes, new CancelSendingListener())
                    .show();
            }
        } else {//判断收件人没有问题,接着发送信息 --》
            sendMessage(true);
        }
}

3. src/com/android/mms/ui/ComposeMessageActivity.java

private void sendMessage(boolean bCheckEcmMode) {
    Log.v(TAG, "sendMessage");
        if (bCheckEcmMode) {
            // TODO: expose this in telephony layer for SDK build
            String inEcm = SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE);     //判断电话是否处于紧急拨号模式,得到的inEcm一般为空
            Log.v(TAG, "inEcm = " + inEcm);
            if (Boolean.parseBoolean(inEcm)) {
                try {
                    startActivityForResult(
                            new Intent(TelephonyIntents.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS,null),
                            REQUEST_CODE_ECM_EXIT_DIALOG);
                    return;
                } catch (ActivityNotFoundException e) {
                    // continue to send message
                    Log.e(TAG, "Cannot find EmergencyCallbackModeExitDialog", e);
                }
            }
        }
 
        if (!mSendingMessage) {
            // send can change the recipients. Make sure we remove the listeners firstand then add
            // them back once the recipient list has settled.
            removeRecipientsListeners();  //取消对收件人的监听
            mWorkingMessage.send();   //发送信息—-》
            mSentMessage = true;
            mSendingMessage = true;
            addRecipientsListeners(); //重新添加收件人监听
        }
        // But bail out if we are supposed to exit after the message is sent.
        if (mExitOnSent) {//如果mExitOnSent为true,信息发送完成后退出Activity
            finish();
        }
    }

4. src/com/android/mms/data/WorkingMessage.java

/**
     * Send this message over the network.  Will call back with onMessageSent() once
     * it has been dispatched to the telephonystack.  This WorkingMessage object is
     * no longer useful after this method hasbeen called.
     */
    public void send() {
        if (Log.isLoggable(LogTag.TRANSACTION, Log.VERBOSE)) {
            LogTag.debug("send");
        }
 
        // Get ready to write to disk.
        prepareForSave(true /* notify */);//主要做一下同步收件人和WorkingMessage,彩信时在准备其他一些东西
 
        // We need the recipient list for both SMS and MMS.
        final Conversation conv = mConversation;
        String msgTxt = mText.toString();
        Log.v(TAG, "msgText = " + msgTxt);
        if (requiresMms() ||addressContainsEmailToMms(conv, msgTxt)) {
            // Make local copies of the bits we need for sending a message,
            // because we will be doing it off of the main thread, which will
            // immediately continue on to resetting some of this state.
            
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值