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. ...
随机推荐
- git 代码冲突处理
在使用git pull代码时,经常会碰到有冲突的情况,提示如下信息: error: Your local changes to 'c/environ.c' would be overwritten b ...
- python filter函数
number_list = range(-, ) less_than_zero = list(filter(lambda x: x < , number_list)) print(less_th ...
- Phpstorm配置scss不生成缓存
--no-cache 加上这个,就不会生成 .sass-cache 文件夹了.
- 编写 R Markdown 文档
数据分析师的工作不仅是将数据放入模型并得出一些结论.通常需要完成从数据收集.数据清理.可视化.建模再到最后编写报告或制作演示文稿的完整工作流程.在前面几章中,我们从不同方面深入学习 R 编程语言,从各 ...
- Oracle学习笔记(二)——临时表
在针对大数据量的多表级联查询或复杂事务处理的时候,引入Oracle临时表是一种不错的策略.因此,在解决实际需求时经常会遇到需要使用存储过程和临时表相互配合的情况.下面就Oracle如何创建临时表以及注 ...
- 小行星碰撞 Asteroid Collision
2018-08-07 11:12:01 问题描述: 问题求解: 使用一个链表模拟栈,最后的状态一定是左侧全部是负值,表示的是向左飞行,右侧的全部是正值,表示的是向右飞行. 遍历整个数组,对于每个读到的 ...
- DownLoadImage
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA&quo ...
- Black Widow CodeForces - 704C (dp)
大意: 给定一个m个bool变量的方程, 求方程解的个数 给定方程的形式类似于这样 每个括号是一个子式, 每个子式里变量数不超过2, 每个变量出现次数不超过2, 方程右侧一直是1 对每个变量出现的式子 ...
- hdu2328 kmp
Beside other services, ACM helps companies to clearly state their “corporate identity”, which includ ...
- Oracle解析复杂json的方法(转)
转:Oracle解析复杂json的方法 问题背景: 当前在Oracle数据库(11G之前的版本)解析json没有可以直接使用的系统方法,网上流传的PLSQL脚本大多也只可以解析结构较单一的json串, ...