您的位置:首页 > 移动开发 > Android开发

Android:MMS流程分析

2013-09-17 12:01 218 查看
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对象)

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息