欢迎来到天天文库
浏览记录
ID:6335830
大小:416.50 KB
页数:8页
时间:2018-01-10
《android短彩信收发流程(framework)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Android短彩信收发流程(Framework)短信部分:短信的发送,Framework部分从SmsManager的sendTextMessage(普通短信,无分段)与sendMultipartTextMessage(长短信,已分段)开始,一直到RIL。主要涉及到的类有。SmsManager、Isms、IccSmsInterfaceManager、SMSDispatcher、ImsSMSDispatcher、GsmSMSDispatcher、CdmaSMSDispatcher、SmsMessage、SmsTrac
2、ker、CommandsInterface、BaseCommands、RIL、LocalSocket、RilRequest、Parcel等。 SmsManager->RIL:sendTextMessage和sendMultipartTextMessage的过程其实差不多,无非是sendMultipartTextMessage对长短信进行了一下处理,为每一个part设置了SmsHeader。ImsSMSDispatcher中包含了两种不同的SmsDispatcher,IccSmsInterfaceManager调用
3、SmsDispatcher中各个方法时,会根据手机类型的不同,调用不同SmsDispatcher的相应方法。大致过程为:1、计算编码方式;2、对每一个分段构造SmsHeader、SubmitPdu、SmsTracker,并设置RadioTechnologyFamily;3、利用SmsTracker构造当消息正常发送后调用的Message对象;4、调用与手机卡类型有关的RIL中的相应方法发送。 RIL中发送:sendImsGsmSms、sendSms、sendCdmaSms、sendImsCdmaSms这四个方法基
4、本流程是大致相同的,都是先构造RILRequest,再调用send方法发送。区别就在于不同的方法在获得RILRequest时传入的请求类型不同,构造出来的pdu结构不同,以及两个Ims方法需要先往RILRequest中写入一个数字。 发送后的处理:已发送状态修改(sentIntent的调用过程)RILReceiver->SMSDispatcher:在RIL的构造方法中,创建了一个RILReceiver对象,该对象实现了Runnable接口。它的作用是不停地从下层获取数据,分析类型,转到相应SMSDispatche
5、r处理。当短信通过LocalSocket发送出去后,由于是主动请求,下层会传上来一个响应,其基本类型为RESPONSE_SOLICITED,转入processSolicited处理。在该方法中,对于短信发送的处理,均调用responseSMS方法获取SmsResponse对象。(前面四种方式对应的事件类型为sendSMS-RIL_REQUEST_SEND_SMS、sendCdmaSms-RIL_REQUEST_CDMA_SEND_SMS、sendImsGsmSms&sendImsCdmaSms-RIL_REQUES
6、T_IMS_SEND_SMS)然后创建AsyncResult对象,将SmsResponse对象与SmsTracker对象(SMSRequest中的)传入,更新之前在各个SMSDispatcher中创建的消息正常发送后调用的Message中的obj,设为创建的AsyncResult对象。将消息发送至相应SmsDispatcher处理。 已发送状态修改(sentIntent的调用过程)SMSDispatcher.handleMessage:由于之前在构造Message对象时设置了what为SEND_SMS_COMPL
7、ETE,因此,此处调用handleSendComplete方法进行短信发送的后续处理。若需要发送报告,将SmsTracker加入deliveryPendingList中,这样后面收到发送报告时,能够从该列表中取出进行处理(具体参见应用层部分发送报告的处理)。 deliveryIntent(发送报告)RIL->SMSDispatcher:对于GSM,在构造方法中,将GsmSMSDispatcher注册为RIL接收到发送报告时该事件的接收者,并设置消息类型为EVENT_NEW_SMS_STATUS_REPORT,相应
8、的Registrant类为mSmsStatusRegistrant。而对于CDMA,则设置消息类型为EVENT_NEW_SMS,相应的Registrant类为mCdmaSMSRegistrant。当RIL收到底层传来的发送报告后(过程与已发送状态修改相同),会产生一个基本类型为RESPONSE_UNSOLICITED,转入processUnsolicited
此文档下载收益归作者所有