Android开发中使用mms模块收发单卡和双卡短信的教程

2019-12-10 19:02:21于丽
易采站长站为您分析Android开发中使用mms模块收发单卡和双卡短信的教程,文中举了MOTO XT800手机(估计已经落伍很久了--)的例子来说明如何解决双卡双待时的短信异常问题,需要的朋友可以参考下  

一.信息发送:
com.android.mms.data.WorkingMessage.java 类 
send()函数: 

public void send() {   
 
  ......  
 
  if (requiresMms() || addressContainsEmailToMms(conv, msgTxt)) {   
 
    // 彩信   
 
    slideshow.prepareForSend(); 
 
    new Thread(new Runnable() {   
 
      public void run() {   
 
        sendMmsWorker(conv, mmsUri, persister, slideshow, sendReq);   
 
      }   
 
    }).start();   
 
  } else {   
 
    // 短信   
 
    new Thread(new Runnable() {   
 
      public void run() {   
 
        preSendSmsWorker(conv, msgText);   
 
      }   
 
    }).start();   
 
  ...... 
 
}  


prapareForSend(). 先确保有slidshow,也就是实质内容。 确保文字已拷贝。确保标题。 根据消息分类,如果是短信直接起一个线程,跑preSendSmsWorker函数,发送短信;如果是彩信,先跑prapareForSave确保文本信息,然后起一个线程,单独跑sendMmsWorker函数。不管是短信还是彩信,起了那个worker函数之一就算发送信息成功了。 最后修改Recipient cache, 重置标志位,过程就结束了。
     短信发送先调用preSendSmsWorker函数,在preSendSmsWorker函数中又起了sendSmsWorker函数。

private void sendSmsWorker(String msgText, String semiSepRecipients, long threadId) { 
 
......  
 
MessageSender sender = new SmsMessageSender(mContext, dests, msgText, threadId); 
 
sender.sendMessage(threadId); 
 
......    
 
} 


 SmsMessageSender.java类,在mms/transaction下面,实现了MessageSender接口,这个接口sendMessage并返回boolean的值。若发送的是mms,返回true。若发送的是sms,返回false。