Android源码分析--CDMA短信状态报告
RIL.java--的类RILReceiver中函数run检测socket事件,读取到信息后就调用函数:
RIL.java—processResponse,该函数如果发现该信息是主动上报,则调用:
RIL.java --函数processUnsolicited接收到RIL层的主动上报后调用:
RIL.java—函数responseCdmaSms调用:
SmsMessage.java—函数SmsMessage.newFromParcel,注意GSM和CDMA该函数有不同的形式。
在这个函数中根据ril中传送上来的值填充SmsMessage类 msg,在该类的子类中存在一个变量pdu,这个函数会根据主动上报的结构体来构造这个PDU串。
。。。。。。
cdmaSMSDispatcher.java--类cdmaSMSDispatcher中,dispatchMessage函数会被调用,在这个函数中根据不同的短信类别调用不同的处理函数,这里我们以短信发送的状态报告为例子,会调用函数:
cdmaSMSDispathcer.java--handleCdmaStatusReport来发送intent.send
MessageStatusReceiver.java--onReceive函数会接收到该intent, 该函数会调用:
MessageStatusReceiver.java--updateMessageStatus会从接收到的PDU串中创建SmsMessage类,message, 并将短信发送的状态写入到数据库中,主要的调用函数顺序为:->createFromPdu->parsePdu->parseSms