短信frameworks发送流程,大致流程是这样的,注释不是很清楚,后续慢慢更新注释
frameworks/base/telephony/java/android/telephony/SmsManager.java--->sendTextMessage
@param destinationAddress 发送方电话号码
@param scAddress 短信中心号码
@param text 消息内容
@param sentIntent 发送报告
@param deliveryIntent消息递送报告
![](https://img.haomeiwen.com/i13870436/50b7ea8cd0a4bf65.png)
判断电话号码以及消息内容是否为空
GetISmsServiceOrThrow{
ISms.Stub.asInterface(ServiceManager.getService("isms"))
}在Binder注册isms服务,通过issms调用底层接口发送
![](https://img.haomeiwen.com/i13870436/c81e30f03833145f.png)
获取IccSmsInterfaceManager对象调用sendText函数,其中这里与应用层多传递了callingPackage 发送消息应用名,以及defaultsmsapp默认短信应用
![](https://img.haomeiwen.com/i13870436/3a00e57405617afb.png)
CheckCallingSendTextPermissions检查是否有发送短信权限
![](https://img.haomeiwen.com/i13870436/7f06d0439a86bea2.png)
csllingPackge:应用名称
Destaddr:发送号码
scAddr:服务中心号码
PersistMessageForNonDefaultSmsApp:默认短信应用
Priority:优先级
ExpectMore:是否串联短信
validityPeriod:优先级
![](https://img.haomeiwen.com/i13870436/903698bcc1d8e7f7.png)
判断是否注册上IMS网络服务等,我发发生gsm消息看mGsmsDispather.sendtext
![](https://img.haomeiwen.com/i13870436/3a4d904401b116b0.png)
Getsubmitpdu获取pdu组合,最后把pdu发送出去
![](https://img.haomeiwen.com/i13870436/1e2afff48d791985.png)
![](https://img.haomeiwen.com/i13870436/201489055a27ccbe.png)
![](https://img.haomeiwen.com/i13870436/446d78d1e2fe611b.png)
![](https://img.haomeiwen.com/i13870436/9439c26dfa249ec1.png)
如果消息不是IMS消息,且不是长短信就调用sendsms
![](https://img.haomeiwen.com/i13870436/595aa86635d63626.png)
RIL extends BaseCommands implements CommandsInterface
![](https://img.haomeiwen.com/i13870436/a4179866969a7615.png)
网友评论