Android开发中使用开发中使用mms模块收发单卡和双卡短信的教程模块收发单卡和双卡短信的教程
一一.信息发送信息发送:
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。
当然,对于单卡手机和双卡双待手机的短信发送流程是有区别的(短信接收的流程是相同的,相对流程也比较简洁),关于具体的流程还是直接用
UML图来说明更为直接:
信息发送与接收时序图:
发送短信
单卡手机短信发送的时序图如图所示: