简单掌握Android开发中彩信的发送接收及其附件的处理
作者:时之沙 发布时间:2023-04-18 02:32:24
一. 彩信发送:
彩信比短信麻烦很多。从sendMmsWorker函数的参数就可以看出来:(conv, mmsUri, persister, slideshow, sendReq) 上下文,uri,PduPersister(彩信是用pdu的),slideshow 包含了所有的彩信信息,sendreq包含了mime封装mms时的headers,也包括了from,to等信息 。
(1)函数 sendMmsWorker:
private void sendMmsWorker(Conversation conv, Uri mmsUri,
PduPersister persister, SlideshowModel slideshow, SendReq sendReq) {
.....
}
前面挺长一段代码,检查这个对话(conversation)之前还有没有未发送的信息。需要提到一下MessageStatusListener,这个Interface接口定义在WorkingMessage.java里,而实现是在ComposeMessageActivity.java中,所以前者在一些状态改变的时候可以很方便的调用后者的一些函数作相应的改动。MessageStatusListener中主要包括: onProtocolChanged彩信短信互切换,onAttachmentChanged附件改变,onPreMessageSent发消息前,onMessageSent发消息后。这里调用了onPreMessageSent这个监听函数, 然后ComposeMessageActivity 就会调用resetMessage函数 ,这个函数会调整显示,focus,软键盘等。
检查mmsUri。如果这个uri是空的话,直接造一个新的uri继续发送。这个createDraftMmsMessage(persister, sendReq, slideshow);函数可以包含所有发送需要的信息, 如果uri不为空,调用的是updateDraftMmsMessage(mmsUri, persister, slideshow, sendReq); 总之功能是把这个将发送的mms,存disk了,也就是存draft了。
deleteDraftSmsMessage 删除草稿 。
创建一个MmsMessageSender,用这个sender来调用sendMessage函数。
如果函数返回值表示刚刚发送出去的其实是一个短信sms,而已。于是要把数据库里存着的draft删掉。
调用onMessageSent这个监听函数,调用ComposeMessageActivity的onMessageSent,这个函数功能是重新显示conversationList。
(2)createDraftMmsMessage(persister, sendReq, slideshow); 和 updateDraftMmsMessage(mmsUri, persister, slideshow, sendReq); 这两个函数从本质上讲是一样的,把附件的东西以pdubody的形式存下来,另外就是更新uri。
3)MmsMessageSender.java类,在mms/transaction下面,实现了MessageSender接口,这个接口sendMessage并返回boolean的值。若发送的是mms,返回true。若发送的是sms,返回false。
单卡手机彩信发送的时序图如图所示
双卡手机彩信发送的时序图如图1.5所示:
二.彩信接收
彩信接收的时序图如图1.3所示:
三、接收Wappush信息及彩信附件增加删除
1..Wappush接收的时序图如图所示:
2.彩信附件增加删除
彩信附件添加:在ComposeMessageActivity里的addAttachment(int type) 函数 根据type的不同,分成7个case
MediaSelectListActivity.ADD_IMAGE
MediaSelectListActivity.TAKE_PICTURE
MediaSelectListActivity.ADD_VIDEO
MediaSelectListActivity.RECORD_VIDEO
MediaSelectListActivity.ADD_SOUND
MediaSelectListActivity.RECORD_SOUND
MediaSelectListActivity.ADD_SLIDESHOW
从外面的activity读取媒体数据的应用返回的时候都回到onActivityResult()函数。
删除附件,AttachmentEditor里面有个handler,用来给ComposeMessageActivity传消息。所有删除附件操作的按钮都在AttachmentEditor上。对不同的媒体类型有不同的按钮,但是按下之后出口是一样的,之所以一样是因为所有的附件都存在SlideshowModel里,而这个SlideshowModel是: ArrayList<SlideModel> mSlides; 一列儿slide组成的。 每个slide可以包含video,image,audio,text, 其中前三者一般不能两两同时存在,唯一的例外是image和audio.
说回到那个remove操作,composeMessageActivity的Handler里的handleMessage函数,接到这个删除msg之后的操作是setAttachment().


猜你喜欢
- 一、引言在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理就是这样的一个例子,因为目录可以包括单独的文
- 这篇文章主要介绍了Java 比较接口comparable与comparator区别解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作
- Listview现在用的很少了,基本都是使用Recycleview,但是不得不说Listview具有划时代的意义,拓展性很强,我们可以自己添
- mybatis resulttype 返回值异常在使用mybatis时。resulttype返回自定义的类时,可能返回的类中字段数据存在缺失
- 查看公司项目代码时,存在这样一个问题:winform界面上有很多信息填写,提交
- 本文主要记录JAVA中对象的初始化过程,包括实例变量的初始化和类变量的初始化以及final关键字对初始化的影响。另外,还讨论了由于继承原因,
- Spring Boot中可以在配置文件中直接进行数据库配置,spring.datasource.username= rootspring.d
- 一、什么时候会加载类?使用到类中的内容时加载:有三种情况1.创建对象:new StaticCode();2.使用类中的静态成员:Static
- Task执行任务,等待任务完成代码://任务Func<int> Funcs = () =>{? ? Console.Wri
- Spring Security简介:Spring Security 是针对Spring项目的安全框架,也是Spring Boot底层安全模块
- 一、简介1.1 Log4.net优点几乎所有的大型应用都会有自己的用于跟踪调试的API。因为一旦程序被部署以后,就不太可能再利用专门的调试工
- Spring中提供了很多PostProcessor供开发者进行拓展,例如:BeanPostProcessor、BeanFactoryPost
- 简介说明本文用实例介绍stream的使用。JDK8新增了Stream(流操作) 处理集合的数据,可执行查找、过滤和映射数据等操作。使用Str
- 存储的可选项Android 的文件系统类似于其他平台的基于磁盘的文件系统。包括以下几种存储类别:App 私有的存储空间共享的存储空间Pref
- spring-data-redis项目  spring-data-redis提供了在Spring应用中通
- 定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。类型:行为类
- 目录场景介绍自动填充处理器Mybatis-Plus配置类配置实体类中相关字段的自动填充策略在阿里开发手册的建表规约中有说明,数据库表中应该都
- Windows10 上的JDK安装配置1、前往 JDK 官网下载对应 jdk 版本安装包:下载地址本文以 jdk-8u161-windows
- 前言 对于服务端,达到高性能、高扩展离不开异步。对于客户端,函数执行时间是1毫秒还是100毫秒
- 使用adb or fastboot命令进入高通的9008(edl)模式已经有人写过了,下面两种是其中之一,我再加一个如题,两种方法1. ad