基于Android4.4 + 联芯L1860平台的短彩双卡方案 ---- (1) 短信收发机能

1概要

本文主要描述L1860项目中信息模块的涉及双卡双待的主要功能,包含有:

  • 短信收发机能
  • 彩信收发机能
  • WAP PUSH

2机能说明

2.1短信收发

 

2.1.1模块构成图

 

 

模块说明:

  1.      com.android.internal.telephony:对短信的收发进行处理,发送时将APP中的数据封装后传入RIL,接收时把RIL传入的数据解析后广播给APP。
  2.      android.provider:提供MMS数据库的抽象定义,可使用该模块提供的变量与方法与数据库交互。
  3.      android.telephony:封装短信信息并且提供一系列管理短信的操作(发送、分割短信等)。
  4.      com.android.mms.transaction:提供APP层对短信的逻辑处理,解析短信pdu、将短信信息保存至数据库等。
  5.      com.android.mms.data:管理当前当前编辑短信的相关信息(使用的sub、短彩信、附件类型等)。
  6.      com.android.mms.ui:提供短信的UI处理类。 

 

2.1.2数据流

 

方案说明:

  1. 接收短信时需要在framework广播的intent中加入subIdMMS APP在接收到广播之后把subId取出,并存入数据库。
  2. 发送短息时需要判断当前是否支持双卡模式,并能取得当前用户默认选择的卡槽(插入两张卡时能够选择,插入一张卡时默认使用插入的卡),点击发送后把用户选择的卡槽保存。Framework需提供带有参数subId的发送方法。

 

2.1.2发送短信时序图

 

 

发送短信处理概要:

  1. 当用户在发送短信界面点击发送短信时,需调用framework接口isMultiSimEnabled()判断当前设备是否支持双卡模式。
  2. 如果支持的话则使用默认的卡槽进行发送(用户能够选择默认的卡槽,双卡模式下只插入一张卡则使用插入的卡为默认卡槽),使用接口getPreferredSmsSubscription()获得当前默认的卡槽。
  3. 将卡槽ID设置到WorkingMessage中。在调用sendSmsWorker()中初始化SmsMessageSender时,传入设置的subIdSmsMessageSender需新增成员变量mSubscription
  4. 调用SmsMessageSendersendMessage()方法发送短信,在此方法中调用带有参数subIdaddMessageToUri()方法将短信信息存入数据库。
  5. 经过SmsReceiverService处理后最终调用SmsManagersendMultipartTextMessage()方法发送,转入framework处理,参数subId同时通过此方法传入framework


2.1.3接收短信时序图

 

接收短信处理概要:

  1. framework接收到一条短信之后,通过dispatchIntentAPP层广播actionSMS_DELIVER_ACTIONintent,该intent需含有subId
  2. SmsReceiver在接收到广播之后,启动SmsReceiverService进行处理。
  3. handleSmsReceived()方法通过Intents.getMessagesFromIntent()从广播的intent中取得SmsMessage对象数组,在 getMessagesFromIntent()方法中取出intent携带的subId后通过setSubId()设置到SmsMessage中。
  4. 在调用storeMessage()是通过SmsMessagegetSubId()取出subId,存入MMS数据库。
posted @ 2016-07-18 13:32  neu_feng  阅读(429)  评论(0编辑  收藏  举报