MMS发送流程代码版android.docx
《MMS发送流程代码版android.docx》由会员分享,可在线阅读,更多相关《MMS发送流程代码版android.docx(32页珍藏版)》请在冰豆网上搜索。
![MMS发送流程代码版android.docx](https://file1.bdocx.com/fileroot1/2022-10/12/d275b889-5003-4f39-89ff-812bb33456bc/d275b889-5003-4f39-89ff-812bb33456bc1.gif)
MMS发送流程代码版android
MMS发送流程(代码版)
Android2。
2packages/apps/Mms
1。
点击发送按钮Src/com/android/mms/ui/ComposeMessageActivity.java
publicvoidonClick(View v) {
if((v== mSendButton)&& isPreparedForSending()){
confirmSendMessageIfNeeded();//确认是否需要发送短信-—》
}
}
2。
src/com/android/mms/ui/ComposeMessageActivity.java
privatevoidconfirmSendMessageIfNeeded(){
if (!
isRecipientsEditorVisible()) { //编辑联系人不可见时,也就是给已存在会话的联系人发送短信时
sendMessage(true);
return;
}
booleanisMms=mWorkingMessage.requiresMms(); //是否需要以彩信形式发送
if(mRecipientsEditor。
hasInvalidRecipient(isMms)){//是否含有不合法的收件人
if(mRecipientsEditor。
hasValidRecipient(isMms)){//有合法的和不合法的,弹出尝试发送对话框
String title=getResourcesString(R.string.has_invalid_recipient,
mRecipientsEditor。
formatInvalidNumbers(isMms));
newAlertDialog.Builder(this)
。
setIcon(android。
R.drawable.ic_dialog_alert)
。
setTitle(title)
.setMessage(R.string。
invalid_recipient_message)
。
setPositiveButton(R.string。
try_to_send,
newSendIgnoreInvalidRecipientListener())
。
setNegativeButton(R.string.no,newCancelSendingListener())
.show();
} else{//如果全是不合法的联系人,提示不能发送信息
newAlertDialog。
Builder(this)
。
setIcon(android.R.drawable。
ic_dialog_alert)
。
setTitle(R。
string.cannot_send_message)
。
setMessage(R.string.cannot_send_message_reason)
.setPositiveButton(R.string.yes,newCancelSendingListener())
。
show();
}
}else{//判断收件人没有问题,接着发送信息-—》
sendMessage(true);
}
}
3.src/com/android/mms/ui/ComposeMessageActivity。
java
privatevoid sendMessage(boolean bCheckEcmMode){
Log.v(TAG,"sendMessage");
if(bCheckEcmMode){
// TODO:
exposethisintelephony layerfor SDKbuild
StringinEcm=SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE); //判断电话是否处于紧急拨号模式,得到的inEcm一般为空
Log。
v(TAG, ”inEcm="+inEcm);
if(Boolean。
parseBoolean(inEcm)) {
try{
startActivityForResult(
new Intent(TelephonyIntents。
ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS,null),
REQUEST_CODE_ECM_EXIT_DIALOG);
return;
}catch(ActivityNotFoundException e){
// continueto sendmessage
Log.e(TAG,"CannotfindEmergencyCallbackModeExitDialog", e);
}
}
}
if(!
mSendingMessage){
//send canchangetherecipients。
Makesure weremove thelistenersfirstandthenadd
//thembackoncetherecipientlisthassettled.
removeRecipientsListeners(); //取消对收件人的监听
mWorkingMessage.send(); //发送信息-—》
mSentMessage = true;
mSendingMessage=true;
addRecipientsListeners();//重新添加收件人监听
}
//Butbailoutif wearesupposed toexit afterthemessageissent。
if(mExitOnSent){//如果mExitOnSent为true,信息发送完成后退出Activity
finish();
}
}
4。
src/com/android/mms/data/WorkingMessage.java
/**
*Sendthis messageoverthenetwork. Willcallback withonMessageSent()once
*ithasbeendispatchedtothetelephonystack。
This WorkingMessageobjectis
*nolongeruseful afterthis methodhasbeen called.
*/
publicvoid send(){
if(Log.isLoggable(LogTag。
TRANSACTION, Log。
VERBOSE)){
LogTag.debug(”send”);
}
//Getreadytowriteto disk。
prepareForSave(true/* notify*/);//主要做一下同步收件人和WorkingMessage,彩信时在准备其他一些东西
//Weneedtherecipient list forbothSMSandMMS.
finalConversationconv=mConversation;
String msgTxt=mText.toString();
Log.v(TAG,"msgText=”+ msgTxt);
if(requiresMms()||addressContainsEmailToMms(conv,msgTxt)){
//Makelocalcopiesofthe bitsweneedforsendingamessage,
//becausewewillbedoing itoff ofthemainthread,whichwill
//immediatelycontinueontoresettingsome ofthisstate。
final Uri mmsUri=mMessageUri; //如果第一次发送,此时mmsUri为null,如果是重发,则是草稿箱的地址mMessageUri=content:
//mms/drafts/1
final PduPersister persister =PduPersister。
getPduPersister(mContext);
finalSlideshowModelslideshow=mSlideshow;
finalSendReqsendReq= makeSendReq(conv,mSubject);
//Dothe dirty workof sending themessageoffofthemainUIthread。
newThread(new Runnable(){