Android 源码阅读之SMS,MMS
主界面:
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的更多相关文章
- Android源码阅读 – Zygote
@Dlive 本文档: 使用的Android源码版本为:Android-4.4.3_r1 kitkat (源码下载: http://source.android.com/source/index.ht ...
- Android拓展系列(11)--打造Windows下便携的Android源码阅读环境
因为EXT和NTFS格式的差异,我一直对于windows下阅读Android源码感到不满. 前几天,想把最新的android5.0的源码下下来研究一下,而平时日常使用的又是windows环境,于是专门 ...
- Android源码阅读技巧--查找开发者选项中显示触摸操作源码
在开发者模式下,在开发者选项中,可以勾选“显示触摸操作”,然后只要点击屏幕就会在点击的位置有圈圈显示.如何找到绘制圈圈的代码部分,有什么技巧来阅读代码量这么大的android系统源码呢?以下请跟着小老 ...
- Android源码阅读-Filter过滤器
Filter 顺便看看,Android中过滤器是怎么实现的? 注释中提到,Filter一般通过继承Filterable实现 具体实现 这是SimpleAdapter出现的一个过滤首字母item的一个过 ...
- Android源码阅读笔记二 消息处理机制
消息处理机制: .MessageQueue: 用来描述消息队列2.Looper:用来创建消息队列3.Handler:用来发送消息队列 初始化: .通过Looper.prepare()创建一个Loope ...
- Android 源码阅读笔记
Zygote: .Zygote 是系统启动之后创建的第二个进程2.Zygote 创建zygote Socket.虚拟机3.Zygote 在虚拟机中通过forkSystemServer, 创建Serve ...
- 【安卓本卓】Android系统源码篇之(一)源码获取、源码目录结构及源码阅读工具简介
前言 古人常说,“熟读唐诗三百首,不会作诗也会吟”,说明了大量阅读诗歌名篇对学习作诗有非常大的帮助.做开发也一样,Android源码是全世界最优秀的Android工程师编写的代码,也是A ...
- Android拓展系列(10)--使用Android Studio阅读整个Android源码
之前一直在windows下用source insight阅读android源码,效果非常好.后来远程异地服务器,网络限制,一直用ssh + vim,现在主要还是以这种方式.最近发现一个不错的东西(早就 ...
- 【Android 系统开发】使用 Source InSight 阅读 Android 源码
1. 安装 Source Insight (1) Source Insight 相关资源 安装相关资源 : -- 下载地址 : http://www.sourceinsight.com/down35. ...
随机推荐
- Planar Shadow
Unity上平面阴影的计算与实现 //如何求顶点投影到平面上的点(阴影点) //当平面上取不相等的任意两个点组成一个向量,与平面的法线总是垂直的,向量垂直点乘为0,因此可以通过一个点和一个法线来定义, ...
- 第五次程序设计作业 C++计算器雏形 调用文件输入输出
一.C++计算器作业系列链接 第三次作业:C++计算器雏形 第三次作业附加:代码规范 第四次作业:命令行的调用及计算 MyGithub 二.本次作业相关 要求:第五次程序设计作业 根据这一次的作业要求 ...
- UVa 1001 奶酪里的老鼠(Dijkstra或Floyd)
https://vjudge.net/problem/UVA-1001 题意:一个奶酪里有n个洞,老鼠在奶酪里的移动速度为10秒一个单位,但是在洞里可以瞬间移动.计算出老鼠从A点到达O点所需的最短时间 ...
- java 编程技巧
1. 参数可空: @注解表示修改的字段可为空值.看它的定义,可以修饰在方法,参数和字段(类似c#中的?)上. @Target({ElementType.METHOD, ElementType.PARA ...
- 安装Zookeeper和kafka,安装完毕后,遇到的错误
按照原文链接 http://www.cnblogs.com/swneng/p/10212460.html 在windows下进行安装 之后运行 D:\00H_Bigdata\kafka_2.11-2. ...
- SQL 存储过程中的IF_BEGIN_END作用域
USE [DB_NAME] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [DBO].[PROC_TEST_I ...
- MongoDB(课时17 更新函数)
3.4.3 数据更新操作 MongoDB数据存的是副本数据, 最终的数据还要保存在传统的数据库里,所以如果关系型数据库里数据变了,最好的方法是删除里面的MongoDB数据重新插入. 在MongoDB里 ...
- angular5 表单元素 checkbox radio 组讲解
一.checkedbox 1.ngModel绑定方式 <input [(ngModel)]="item.checked" value="item.checked&q ...
- Java数组常用API
java.util.Arrays Arrays.asList() 数组转换成列表 String[] strArray = {"zhang", "xue", &q ...
- python-day34--进程补充
一.进程补充: 1,生产者消费者模型: 两类角色,一类负责生产数据,另外那类负责数据 生产完放到共享空间,另外那类到空间取数据进行处理 好处: 生产数据的同时可以进行数据的处理,不用等(并发效果) 问 ...