主界面:

com.android.mms.ui.ConversationList.java  [extends ListActivity]

点击新建信息:onListItemClick -〉 position == 0 -〉createNewMessage()-〉
startActivity[ComposeMessageActivity]

com.android.mms.ui.ComposeMessageActivity.java

点击发送按钮:onClick -> mSendButton -> confirmSendMessageIfNeeded()  -> sendMessage(true) ->

mWorkingMessage.setPhoneId(phoneId); mWorkingMessage.send(mDebugRecipients);

com.android.mms.data.WorkingMessage.java

send:如果是彩信 sendMmsWork 如果是短信preSendSmsWorker

-------------------------------------------------------------------------------------------------------

短信流程:

preSendSmsWorker -〉 sendSmsWorker -〉SmsMessageSender.sendMessage(threadId)

com.android.mms.transaction.SmsMessageSender.java

sendMessage -> queueMessage ->

mContext.sendBroadcast[SmsReceiverService.ACTION_SEND_MESSAGE, SmsReceiver.class]

com.android.mms.transaction.SmsReceiver.java

com.android.mms.transaction.SmsReceiverService.java

handleMessage -> ACTION_SEND_MESSAGE -> handleSendMessage -> sendFirstQueuedMessage ->

SmsSingleRecipientSender.sendMessage

com.android.mms.transaction.SmsSingleRecipientSender.java

sendMessage -> SmsManager.sendMultipartTextMessage

进入Framework层

frameworks/base/telephony/java/android/telephony/SmsManager.java

sendMultipartTextMessage -> 一条短信是不是需要分多个部分(太长)?

ISms.sendMultipartText | ISms.sendText

frameworks/base/telephony/java/com/android/internal/telephony/IccSmsInterfaceManager.java

sendText -> CdmaSMSDispatcher.sendText | GsmSMSDispatcher.sendText

[cdma]

frameworks/base/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java

sendText -> sendSubmitPdu -> sendRawPdu ->

sendSms | sendMessage

sendSms -> CommandsInterface.sendCdmaSms

frameworks/base/telephony/java/com/android/internal/telephony/RIL.java

sendCdmaSms -> RIL_REQUEST_CDMA_SEND_SMS

hardware/ril_c/reference-ril/reference-cpb71.c

case RIL_REQUEST_CDMA_SEND_SMS: requestSendCdmaSMS -> at_send_command

[gsm]

frameworks/base/telephony/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java

sendText -> sendRawPdu ->

sendSms | sendMessage

sendSms -> CommandInterface.sendSMS

frameworks/base/telephony/java/com/android/internal/telephony/RIL.java

sendSMS -> RIL_REQUEST_SEND_SMS

现在读彩信,从sendMmsWork开始:

com.android.mms.data.WorkingMessage.java

sendMmsWorker -> MmsMessageSender.sendMessage(threadId)

com.android.mms.transaction.MmsMessageSender.java

sendMessage -> mContext.startService[TransactionService.class]

[注意 pdu.getMessageType() != PduHeaders.MESSAGE_TYPE_SEND_REQ throw new MmsException]

com.android.mms.transaction.TransactionService.java

onStartCommand -> launchTransaction -> ServiceHandler.sendMessage[EVENT_TRANSACTION_REQUEST]

ServiceHandler:handlemessage - EVENT_TRANSACTION_REQUEST -
Transaction.SEND_TRANSACTION -

transaction = new SendTransaction - processTransaction(transaction)

SendTransaction.process

[注意,标红处查看代码 getTransactionType case PduHeaders.MESSAGE_TYPE_SEND_REQ:

return Transaction.SEND_TRANSACTION]

com.android.mms.transaction.SendTransaction.java

process -> run -> sendPdu -> HttpUtils.httpConnection

Android 源码阅读之SMS,MMS的更多相关文章

  1. Android源码阅读 – Zygote

    @Dlive 本文档: 使用的Android源码版本为:Android-4.4.3_r1 kitkat (源码下载: http://source.android.com/source/index.ht ...

  2. Android拓展系列(11)--打造Windows下便携的Android源码阅读环境

    因为EXT和NTFS格式的差异,我一直对于windows下阅读Android源码感到不满. 前几天,想把最新的android5.0的源码下下来研究一下,而平时日常使用的又是windows环境,于是专门 ...

  3. Android源码阅读技巧--查找开发者选项中显示触摸操作源码

    在开发者模式下,在开发者选项中,可以勾选“显示触摸操作”,然后只要点击屏幕就会在点击的位置有圈圈显示.如何找到绘制圈圈的代码部分,有什么技巧来阅读代码量这么大的android系统源码呢?以下请跟着小老 ...

  4. Android源码阅读-Filter过滤器

    Filter 顺便看看,Android中过滤器是怎么实现的? 注释中提到,Filter一般通过继承Filterable实现 具体实现 这是SimpleAdapter出现的一个过滤首字母item的一个过 ...

  5. Android源码阅读笔记二 消息处理机制

    消息处理机制: .MessageQueue: 用来描述消息队列2.Looper:用来创建消息队列3.Handler:用来发送消息队列 初始化: .通过Looper.prepare()创建一个Loope ...

  6. Android 源码阅读笔记

    Zygote: .Zygote 是系统启动之后创建的第二个进程2.Zygote 创建zygote Socket.虚拟机3.Zygote 在虚拟机中通过forkSystemServer, 创建Serve ...

  7. 【安卓本卓】Android系统源码篇之(一)源码获取、源码目录结构及源码阅读工具简介

    前言        古人常说,“熟读唐诗三百首,不会作诗也会吟”,说明了大量阅读诗歌名篇对学习作诗有非常大的帮助.做开发也一样,Android源码是全世界最优秀的Android工程师编写的代码,也是A ...

  8. Android拓展系列(10)--使用Android Studio阅读整个Android源码

    之前一直在windows下用source insight阅读android源码,效果非常好.后来远程异地服务器,网络限制,一直用ssh + vim,现在主要还是以这种方式.最近发现一个不错的东西(早就 ...

  9. 【Android 系统开发】使用 Source InSight 阅读 Android 源码

    1. 安装 Source Insight (1) Source Insight 相关资源 安装相关资源 : -- 下载地址 : http://www.sourceinsight.com/down35. ...

随机推荐

  1. 解决方案:c调用python,PyImport_Import或者PyImport_ImportModule总是返回为空

    下面c_python_utils.h是处理工具函数,test.cpp是测试程序,hello.py是python类 可是当我集成到项目中的时候,PyImport_Import总是返回为空,起初我以为是i ...

  2. cartographer安装--Ubuntu14.04--indigo

    0.安装所有依赖项 sudo apt-get install -y google-mock libboost-all-dev  libeigen3-dev libgflags-dev libgoogl ...

  3. Selenium UI自动化测试 Selenium Automatic Testing

    https://www.cnblogs.com/sunada2005/archive/2013/12/22/3486314.html UI Automatic Testing 1. 什么样的项目适合自 ...

  4. re.sub

    1.re.sub主要功能实现正则的替换. re.sub定义: sub(pattern, repl, string, count=0, flags=0) 意思为:对字符串string按照正则表达式pat ...

  5. c++ primer plus 第五章 课后题答案

    #include <iostream> using namespace std; int main() { ; cout << "Please enter two n ...

  6. Activity生命周期之我见

    关于Activity生命周期的文章很多,而且大部分也说得很详细,所以作为关于这方面的内容我本来不想多说,但是大家可能跟我之前一样,在看这方面的内容的时候都能很容易地看懂,但是过几天又忘了,或者在用的程 ...

  7. javascript对象使用总结

    javascript对象使用总结 一.总结 一句话总结:js对象的主要知识点是创建对象和继承,并且创建对象和继承的方法都是逐步层层递进的 创建对象 继承 原型 创建对象 1 <script> ...

  8. SpringBoot读取war包jar包Resource资源文件解决办法

    SpringBoot读取war包jar包Resource资源文件解决办法 场景描述 在开发过程中我们经常会碰到要在代码中获取资源文件的情况,而我在最近在SpringBoot项目中时碰到一个问题,就是在 ...

  9. The requested URL /phpmyadmin was not found on this server.

    这个报错,我弄了好久,第一次我以为我安装有问题,我就卸载重新安装了,但是在结果还是报这样子的错. 查找phpmyadmin的安装位置输入: sudo dpkg -L phpmyadmin 可以看到很多 ...

  10. Socket编程基础篇

    Socket又称"套接字",应用程序通常通过“套接字”向网络发生请求或者应答网络请求. Socket和ServerSocket类库位于java.net包中,ServerSocket ...