在笔记二中对短信的发送流程做了梳理,下面将对短信接受的流程做一下梳理。
一。当RILReceiver有消息收到时,会从RIL向上传递,经由SMSDispatcher的dispatchPdus方法生成Intent调用PrivilegedSmsReceiver。而再由PrivilegedSmsReceiver传给SmsReceiverService。
SmsReciverService的作用是当作一个"工作线程",允许我们将收到的短信存入数据库,更新通知。在不阻塞主线程运行的情况下,运行SmsReceiver。使用的广播为:DATA_SMS_RECEIVED_ACTION。当收到这个广播后,SmsReciverService将会调用handleSmsReciver()方法来做处理。进入该方法后的操作如下:
1.从Intent中获得短信,并且放到短信的数组中。
2.需要区分信息是否为直接显示的类型,如果是则直接转到ClassZeroActivity显示短信。如果不是,则需要分是否需要替换,如果是则利用Intent带的消息查询消息然后更新信息内容,调用的方法为replaceMessage()。否则直接将短信存储,调用的方法为storeMessage().
3.需要将得到的分段的信息内容组装在一起,设置一下Uri.将Message存储一下。
4.需要判断,当前Uri的会话是否存在,如果不存在则需要建立新的会话。
5.然后将短信放入会话框内,如果超出会话信息容量则删除最先收到的信息。
见下示例图: