Android Long SMS

Android Long SMS

 

SEND:

 

ap在发送long sms之前,会调用Framework的SmsManager的divideMessage()函数,将信息进行切分,然后sendMultipartTextMessage()判断是否为long sms,如果是调用sendMultipartText,以long sms的方式发送出去,否则为generic sms

 

 

RECEIVE:

 

接收到long sms的时候,SMSDispatcher会检查sms是否有header & header.ConcatRef,如果存在,则为long sms的part,交给processMessagePart函数去处理

 

processMessagePart函数的处理流程:

1.根据long sms的reference_number & address query出和当前part相关的part信息(From raw table)

2.比对信息数量,看是否已经接收到了所有的parts

2.1如果没接收到所有的parts,将当前的part存储到DB

2.2如果接收到所有的parts,取出所有相关parts的相关数据进行拼接,然后从DB中删除所有相关的parts,发送广播

 

 

PS:long sms的parts存在DB中的raw表中
    假如一条long sms被切分为两条parts,我们的device只接收到其中的一条part,由于generic sms的数据存储在sms表中,raw表中的残余part不会对generic sms造成影响,所有不做任何操作(保不齐哪天那条丢失的part神奇般的又出现了)

你可能感兴趣的:(android)