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神奇般的又出现了)