Applications应用层:
packages\apps\Mms\src\com\android\mms\ui:
1.ConversationList.java:是短彩信的显示界面,在此页面中点击新建按钮,即可进入短彩信编辑界面,响应此事件的是
createNewMessage()方法,在createNewMessage()方法中通过startActivity()启动ComposeMessageActivity.java的Activity。
2.ComposeMessageActivity.java:在短彩信编辑界面中完成编辑后点击发送按钮发送短彩信,响应发送按钮事件的是onClick()方法,
在onClick()方法中调用confirmSendMessageIfNeeded()方法进行发送处理。在confirmSendMessageIfNeeded()方法中会完成两个
任务,其一通过 isMms标志判断是短信还是彩信,以及对双卡/单卡进行判断,如果是双卡调用sendMsimMessage()处理,第二如果
是单卡直接调用sendMessage()方法发送,双卡手机则在sendMsimMessage()方法中再次调用sendMessage()方法发送,在
ComposeMessageActivity.java会创建WorkingMessage对象mWorkingMessage,利用mWorkingMessage对象将短信内容进行封
装, 最后在sendMessage()方法会调用mWorkingMessage.send()进行短信的发送。
packages\apps\Mms\src\com\android\mms\data:
3.WorkingMessage.java:在send()方法中,它共有两个分支,分别用来处理彩信和短信的发送,如果是发送短信则会调用
preSendSmsWorker()方法处理,preSendSmsWorker()方法中会调用sendSmsWorker()方法进行发送操作,彩信则直接调用
sendMmsWorker()方法,这样分别处理彩信和短信。在sendSmsWorker()中首先创建SmsMessageSender的MessageSender
对象 sender,然后调用sender.sendMessage()继续发送短信请求。
packages\apps\Mms\src\com\android\mms\transaction:
4.SmsMessageSender.java:在sendMessage()方法中调用queueMessage()方法进行处理,queueMessage()方法中完成两
个任务,第一将短信的内容保存到数据库中,第二发出ACTION_SEND_MESSAGE类型的广播,SmsReceiver类中的onReceive()方
法会接受并处理此广播。
5.SmsReceive.java:中的onReceive()方法会接收到ACTION_SEND_MESSAGE广播,它会调用当前类中的
onReceiveWithPrivilege()方法继续传递发送短信的请求.在onReceiveWithPrivilege()方法通过 AIDL服务的学习, 直接进入
SmsReceiverService类中的onStartCommand()方法。
6. SmsReceiverService.java:在onStartCommand()方法中通过创建的ServerHandler的 mServiceHandler 对象,在当前类中进行Handler
消息的发送和接收处理。在 handleMessage()方法中,会继续调用sendFirstQueuedMess()方法继续发送短信的请求.
sendFirstQueuedMess()方法将读取数据库中的短信内容,根据短信内容创建SmsSingleRecipientSender 的对象sender,调用其
sender.sendMessage()继续发送。
7.SmsSingleRecipientSender.java:在sendMessage()方法中创建SmsManager对象smsManager,然后调用
smsManager.divideMessage() 方法对短信进行拆分,调用smsManager.sendMultipartTextMessag()方法完成短信发送。至此短信
发送的App层结束,转入FrameWorks层。
Frameworks框架层:
frameworks\opt\telephony\src\java\android\telephony:
1.SmsManager.java:在sendMultipartTextMessag()方法调用sendTextMessage()方法,在sendTextMessage()方法中会得到
IccSmsInterfaceManager 的实例iccISms,然后调用iccIsms.sendText()方法发送单条短信。
2.IccSmsInterfaceManager 抽象类实现了ISms.Stub 接口,它有两个子类:RuimSmsInterfaceManager和 SimSmsInterfaceManager,分别
对应 USIM 卡和 SIM卡,最终都是通过 mDispatcher 对象分别调用对应的短信发送。IccSmsInterfaceManager.java:中的sendText()
方法中创建SMSDispatcher 的对象mDispatcher,调用mDispatcher.sendText()方法处理。
frameworks\otp\telephony\src\java\com\android\internal\telephony:
3.SMSDispatcher.java: 类继承了Handler 类,其sendMultipartText 和sendText 方法,首先将短信内容构造成SubmitPdu 对象,接着调用
mCi.sendSMs方法向 RIL 发起短信发送请求。(mCi 是 RIL对象)