1概要
本文主要描述L1860项目中信息模块的涉及双卡双待的主要功能,包含有:
- 短信收发机能
- 彩信收发机能
- WAP PUSH
2机能说明
2.1短信收发
2.1.1模块构成图
模块说明:
- com.android.internal.telephony:对短信的收发进行处理,发送时将APP中的数据封装后传入RIL,接收时把RIL传入的数据解析后广播给APP。
- android.provider:提供MMS数据库的抽象定义,可使用该模块提供的变量与方法与数据库交互。
- android.telephony:封装短信信息并且提供一系列管理短信的操作(发送、分割短信等)。
- com.android.mms.transaction:提供APP层对短信的逻辑处理,解析短信pdu、将短信信息保存至数据库等。
- com.android.mms.data:管理当前当前编辑短信的相关信息(使用的sub、短彩信、附件类型等)。
- com.android.mms.ui:提供短信的UI处理类。
2.1.2数据流
方案说明:
- 接收短信时需要在framework广播的intent中加入subId,MMS APP在接收到广播之后把subId取出,并存入数据库。
- 发送短息时需要判断当前是否支持双卡模式,并能取得当前用户默认选择的卡槽(插入两张卡时能够选择,插入一张卡时默认使用插入的卡),点击发送后把用户选择的卡槽保存。Framework需提供带有参数subId的发送方法。
2.1.2发送短信时序图
发送短信处理概要:
- 当用户在发送短信界面点击发送短信时,需调用framework接口isMultiSimEnabled()判断当前设备是否支持双卡模式。
- 如果支持的话则使用默认的卡槽进行发送(用户能够选择默认的卡槽,双卡模式下只插入一张卡则使用插入的卡为默认卡槽),使用接口getPreferredSmsSubscription()获得当前默认的卡槽。
- 将卡槽ID设置到WorkingMessage中。在调用sendSmsWorker()中初始化SmsMessageSender时,传入设置的subId,SmsMessageSender需新增成员变量mSubscription。
- 调用SmsMessageSender的sendMessage()方法发送短信,在此方法中调用带有参数subId的addMessageToUri()方法将短信信息存入数据库。
- 经过SmsReceiverService处理后最终调用SmsManager的sendMultipartTextMessage()方法发送,转入framework处理,参数subId同时通过此方法传入framework。
2.1.3接收短信时序图
接收短信处理概要:
- framework接收到一条短信之后,通过dispatchIntent想APP层广播action为SMS_DELIVER_ACTION的intent,该intent需含有subId。
- SmsReceiver在接收到广播之后,启动SmsReceiverService进行处理。
- handleSmsReceived()方法通过Intents.getMessagesFromIntent()从广播的intent中取得SmsMessage对象数组,在 getMessagesFromIntent()方法中取出intent携带的subId后通过setSubId()设置到SmsMessage中。
- 在调用storeMessage()是通过SmsMessage的getSubId()取出subId,存入MMS数据库。