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. ...
随机推荐
- 使用caffenet微调时的一些总结
1,比较笨的方法生成图片列表(两类举例)data/myself/train 目录下 find -name cat.\*.jpg |cut -d '/' -f2-3 >train.txtsed - ...
- 发现 一个 http 压测库
代码库:https://github.com/wg/wrk 安装 https://github.com/wg/wrk
- 《剑指offer》第二十一题(调整数组顺序使奇数位于偶数前面)
// 面试题21:调整数组顺序使奇数位于偶数前面 // 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有 // 奇数位于数组的前半部分,所有偶数位于数组的后半部分. #inclu ...
- 监控视频采集与Web直播开发全流程分析
内容概要: 摄像头 => FFmpeg => Nginx服务器 => 浏览器 从摄像头拉取rtsp流 转码成rtmp流向推流服务器写入 利用html5播放 1.开发流程 1.1 通过 ...
- 算法笔记--priority_queue
算法笔记 priority_queue<int>que;//默认大顶堆 或者写作:priority_queue<int,vector<int>,less<int&g ...
- border可以这样给控件加边框
<Border.BorderBrush> <SolidColorBrush Color="Red" Opacity="0" / ...
- arcgis for silverlight 地图放大到某个点或者几何对象
http://blog.csdn.net/xuan444150/article/details/7727866 分类: silverlight王国 GIS王国 2012-07-09 08:50 1 ...
- Vladik and Entertaining Flags CodeForces - 811E (并查集,线段树)
用线段树维护每一块左右两侧的并查集, 同色合并时若不连通则连通块数-1, 否则不变 #include <iostream> #include <algorithm> #incl ...
- AND Graph CodeForces - 987F (状压)
链接 大意:给定$m$个数, 若$x\&y=0$, 则在$x$与$y$之间连一条无向边. 求无向图的连通块个数 暴力连边显然超时的, 可以通过辅助结点优化连边, 复杂度$O(n2^n)$ #i ...
- python-day8-列表的内置方法
# l=[1,2,3] #l=list([1,2,3])# print(type(l)) #pat1===>优先掌握部分# 索引## 切片l=['a','b','c','d','e','f'] ...