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

Android2.3 短信接收 从 framework 到 MMS.apk 小记

2011-12-06 11:01 423 查看
在短信中 SMSDispatcher 是短信的核心部分。 提供发送SMS等操作接口,同时也提供接收SMS和返回报告等接口。被集成到GSMPhone 中。

接收方面:

SMSDispatcher 启动时,会注册一些回调接口。

mCm.setOnNewSMS(this, EVENT_NEW_SMS, null); //新短信

mCm.setOnSmsStatus(this, EVENT_NEW_SMS_STATUS_REPORT, null);

有信的消息上来的时候:

SMSDispatcher 的消息处理函数 handleMessage 处理 EVENT_NEW_SMS 消息,其主要由dispatchMessage完成。

dispatchMessage() 【GSMSmsDispatcher.java】

1.如果是简单的不需要分条接收的短信, 则通过dispatchPdus()完成,并发送广播给

MMS应用中的PrivilegedSmsReceiver.java中。

接收到广播后, 调用了beingstartService() 启动 SmsReceiverService.java.

之后完成短信接收 存储等功能。

2.如果是需要分条接收的短信, 则dispathcher会调用processMessagePart() 函数进行操作。

其子短信有一个头部,里面包含一个结构体:

public static class ConcatRef {
public int refNumber;    // 短信相关号1-255 相同的短信的子短信有相同的此号
public int seqNumber;    // 短信编号
public int msgCount;     // 分割成的得到短信条数
public boolean isEightBits;
}


收到子短信时,它会把短信暂时存储在一个mResolver, 等到收到了所有短信的时候,再将所有的短信取出拼接,而后删除暂存在mResolver 里面的子短信。 之后同样dispatchPdus() 调用,发送广播将pdus数据发送出去。

在启动了SmsReceiverService 之后, onStartCommand --> handleMessage -->handleSmsReceived。

在handleSmsReceived 中,通过getMessagesFromIntent(intent); (函数路径Telephony.java(frameworks\base\core\java\android\provider)) 对intent 中的pdu进行解析。获取到 相关信息, 及messageBody 信息内容。

SmsMessage[] msgs = Intents.getMessagesFromIntent(intent);然后insertMessage -->storeMessage; 结束。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐