彩信的接收过程与短信略有不同,它主要是由应用程序负责从彩信服务中心(MMSC Multimedia Messaging Service Center)下载彩信信息。大致的流程是Frameworks会先发出一条短信,告知应用程序有一个彩信,短信中含有一些信息比如过期日期,发送者手机号码,彩信的URL等,然后应用程序自行通过HTTP取回URL所指的彩信内容。具体的流程为:
Telephony Frameworks会先发出一个Intent:android.provider.Telephony.Intents.WAP_PUSH_RECEIVED_ACTION=”android.provider.Telephony.WAP_PUSH_RECEIVED”告知上层应用有一个彩信来了。这个Intent中会含有一个”data”byte数组(通过byte[] data = intent.getByteArrayExtra(“data”)来获取),这个Byte数组是关于这个彩信的一些信息的描述,它是一个NotificationInd,里面含有彩信的一些信息,比如发送者手机号码,彩信的ContentLocation(URL)。之后是由应用程序来决定如何做下一步的处理。
在Mms中是由transaction.PushReceiver.java来接收WAP_PUSH_RECEIVED_ACTION,接收到彩信通知Intent后,它会做一些预处理,把data字段取出来,用Pdu的工具解析成为GenericPdu,然后转化为NotificationInd,并把它写入数据库,然后会启动TransactionService来做进一步的NOTIFICATION_TRANSACTION处理,同时把这个NotificationInd的Uri也传过去。
TransactionService被唤起,在其onStartCommand中会处理一下把PushReceiver所传来的Intent放入自己的MessageQueue中,然后在Handler.handleMessage()中处理TRANSACTION_REQUEST时处理NOTIFICATION_TRANSACTION。先是加载默认的一些彩信相关的配置信息,主要是MMSC,Proxy和Port,这些都是与运营商相关的信息,可以通过APN的设置来更改。TransactionService用PushReciver传来的NotificationInd的Uri和加载的配置信息TransactionSettings构建一个NotificationTransaction对象。之后,TransactionService检查其内的二个队列,或是加入Pending队列,或是直接处理(加入到正在处理队列),处理也是直接调用NotificationTransaction.process()。
NotificationTransaction的process()方法是继承自父类Transaction的方法,它只是简单的开启一个新的线程,然后返回,这样就可以让Service去处理其他的Transaction Request了。
在线程中,首先从DownloadManager和TelephonyManager中加载一些配置信息,是否彩信设置为自动获取(auto retrieve),以及Telephony是否设置为数据延迟(DATA_SUSPEND),然后会采取不同的措施,再从NotificationInd中取出彩信的过期日期。如果配置为不取数据(更确切的说,是不现在取数据),那么就先给DownloadManager的状态标记为STATE_UNSTARTED,再给MMSC发送一个Notify Response Indication,之后结束处理,函数返回,彩信的通知处理流程到此为止。用户可以通过操作UI,用其他方法手动下载彩信,这个会在后面详细讨论。
如果设置为自动获取或者数据传输是畅通的,那么就把DownloadManager状态标记为START_DOWNLOADING并开始下载彩信数据。彩信的获取是通过HTTP到彩信的ContentLocation(URL)取得数据。先是调用父类方法getPdu(),传入彩信的URL,最终调用HttpUtils的httpConnection方法发送HTTP GET请求,MMSC会把彩信数据返回,作为getPdu()的返回值返回。拿到的是一个byte数组,需要用Pdu的工具解析成为GenericPdu,然后用PduPersister把其写入数据库,再把彩信的大小更新到数据库,到这里一个彩信的接收就算完成了。剩下的就是,因为已经获得了彩信的数据,所以要把先前的通知信息(NotificationInd)删除掉,然后更新一下相关的状态,给MMSC返回Notify Response Indication,结束处理。因为数据库已经有所改变,所以UI会收到ContentChanged事件,刷新UI列表,新信息就会显示出来。
如前所述,如果彩信配置设置为不自动获取,那么UI刷新了后就会显示彩信通知:到期日期,彩信大小等,并提供一个”Download”按扭。用户可以点击按扭来下载彩信内容,点击按扭后,会启动TransactionService,把彩信通知的Uri,和RETRIEVE_TRANSACTION request打包进一个Intent传给TransactionService。TransactionService,像处理其他的Transaction一样,都是放进自己的MessageQueue,然后加载默认的TransactionSettings,构建RetrieveTransaction对象,然后处理调用RetrieveTransaction.process()。
RetrieveTransaction也是继承自Transaction,其process()也是创建一个线程,然后返回。在线程中,首先它用Pdu工具根据Uri从数据库中加载出彩信通知(NotificationInd),从NotificationInd中取得彩信的过期日期,检查过期日期,如果彩信已经过期,那么给MMSC发送Notify Response Indication。把DownloadManager状态标记为开始下载,然后如果彩信已过期,标记Transaction状态为Failed,然后返回,结束处理流程。如果一切正常,会用getPdu()从彩信的ContentLocation(URL)上面获取彩信内容,它会用HttpUtils.httpConnection()通过HTTP来获取,返回一个byte数组。用Pdu工具解析byte数组,得到GenericPdu,检查一下是否是新信息,是否是重复的信息,如果重复,标记状为失败,然后返回,结束处理。如果是新信息,先把GenericPdu用PduPersister写入数据库中,更新信息大小和ContentLocation(URL)到数据库中,到这里一个彩信其实已经全部获取完了。接下来就是发送收到确认信息给MMSC,标记处理状态为成功,结束处理。这时UI应该监听到数据库变化,并刷新,新信息应该会显示给用户。
总结,与信息发送类似,数据库在接收信息过程中也扮演了重要角色,信息接收到后进行解析,然后就写入数据库,与发送不同,接收的信息没有那么多状态,一旦写入了数据库就意味着信息接收已经成功,UI也是只监听数据库的变化,一旦有变化立刻刷新显示信息。
来源:http://blog.csdn.net/hitlion2008/article/details/7166075
分享到:
相关推荐
MMS接收流程** 1) 当MMSC接收到MMS时,它会发送一个包含MMS URL的SMS通知给接收者。 2) 接收者手机接收到短信后,MMS应用解析URL并发起HTTP/HTTPS请求到MMSC。 3) MMSC返回MMS内容,手机将其解码并显示给用户。 **...
在Android系统中,MMS...总的来说,Android MMS的接收流程涉及了多个组件的协同工作,包括底层硬件、Frameworks、广播接收器和服务。短信和彩信的处理方式各有特点,但都确保了用户能够及时、准确地接收到多媒体信息。
7. **MMS接收流程** 当MMS消息到达时,Android 4.0.4系统会触发MmsService的回调,服务会调用Mms类的解析方法处理MMS数据,并将其存储到PduProvider中。用户可以通过系统提供的MMS应用或者其他支持MMS的应用查看...
三、MMS接收流程 1. 手机接收到MMS通知,通常是通过GSM/UMTS信令或短信。 2. BroadcastReceiver监听到通知后,启动MmsService。 3. MmsService从MMSC下载MMS消息,通常会先下载缩略图以节省流量。 4. 下载完成后,...
6. **MMS接收流程**:当接收到MMS时,塞班系统会通过MMS代理服务器下载消息,并存储在本地。用户可以从通知或收件箱中查看和管理这些消息。 7. **WAP Gateway**:在塞班系统中,MMS通过WAP网关进行传输,该网关将...
MMS发送接收流程协议分析,以及在Android中的相关实现
3. **MMS接收流程** - 当手机接收到包含MMS URL的SMS时,`MMSC`解析短信内容。 - 使用WAP协议通过网关从指定URL下载MMS内容。 - 内容存储在本地数据库中,由`MMContentProvider`管理。 - MMS应用更新用户界面,...
- **mms接收时序图-手动.png** 和 **mms接收时序图-自动.png**:展示了两种不同接收模式下的时序流程,帮助理解不同模式下客户端与服务器的交互。 了解并掌握MMS业务流程及其代码实现,对于开发移动应用、特别是...
3. **MMS接收流程**: - **消息通知**:当有新的MMS到达时,MMSC会通过短信或者WAP推送通知到接收方手机。 - **消息下载请求**:接收方设备接收到通知后,会向MMSC发起下载请求,通常通过WAP或HTTP协议。 - **...
MMS(Multimedia Messaging Service,多媒体信息服务)是一种用于在移动设备之间发送和接收多媒体内容(如图片、视频、音频和文本)的服务。MMS系统流程图详细描述了MMS终端到MMS终端的业务处理过程,包括两种情况:...
此外,MMS接收部分的实现通常由移动操作系统的API提供,如Android的`BroadcastReceiver`和iOS的`MFMessageComposeViewController`,开发者通常不需要直接处理HTTP请求。 总的来说,理解和实现MMS的接收和发送涉及对...
在这个流程中,MMS消息从发起者(Originator MMS UA)通过MMS用户代理(UAMMSC)发送到接收者的MMS用户代理(Recipient MMS UA)。具体步骤如下: - **MM1_Submit.REQ**:发起者MMS终端发送提交请求。 - **MM1_...
Android MMS 彩信发送代码流程详解 Android MMS 彩信发送代码流程是 Android 操作系统中一个复杂的过程,涉及到多个应用层和系统服务的交互。下面将对该过程进行详细解释,从 Messaging 应用层到 framework 应用层...
文件列表中的`mms.pdf`很可能提供了更深入的技术细节,包括MMS协议栈的结构、消息格式、传输流程以及可能遇到的问题和解决方案。而`www.pudn.com.txt`可能是下载资源的来源记录,可能包含了更多相关的学习资料链接。...
4. **MMS传输流程**:MMS消息的发送通常涉及以下几个步骤:创建MMS消息,将消息上传到MMS服务器,服务器将消息路由到接收者的MMS代理,接收者下载消息。这个过程中可能涉及到身份验证、加密和重传机制。 5. **MMS...
5. **接收**:接收方设备通过相同的流程从MMS服务器获取并解码消息。 **实现细节** 在"mms"这个文件中,很可能包含了实现这一过程的源代码、配置文件或者编译好的库文件。可能包含以下部分: 1. **源代码**:用于...
本PPT主要探讨了MMS的原理、工作流程、技术细节以及在实际应用中的开发要点。 ### 1. MMS的基本概念 MMS基于SMS(短消息服务)扩展而来,能够支持更大的数据量,提供更丰富的媒体体验。与短信仅能传递文字不同,...
MMS消息的发送和接收涉及多个步骤,包括消息创建、消息提交、消息路由、消息接收等。用户通过UA创建MMS,然后由UA将消息发送到MMSC,MMSC再根据目的地信息转发消息,接收方的MMSC接收到消息后,通过UA推送给用户或...
通过分析提供的文件,开发者和研究人员可以深入理解MMS协议的工作流程,并能有效地实现MMS消息的发送和接收功能。同时,这也对网络管理员和系统集成者了解网络流量和优化多媒体服务提供了帮助。