本文主要从以下几个方面来学习MMS在android系统中的处理:MMS初始化、MMS发送、MMS接收(包括push MMS接收和从MMSC中提取MMS内容)、MMS存储/删除等数据操作。
Android MMS基本知识点
一、MMS概述
MMS是在短消息业务基础上发展起来的一种消息业务,它可以用于传送文字、图片、动画、音频和视频等多媒体信息。MMS采用"存储转发"的技术,用户创建的信息能够自动、快速的在手机和手机之间传送;信息的传送仍然按接收方手机号码进行定位;当接收方关机或暂时不在服务区的情况下,信息将存储在多媒体消息中心(MMSC),直到能够正确送达为止。MMS消息服务要求一个WAP网关,一个数据传输网如电路交换网、GPRS或WCDMA网络,和一个多媒体消息中心(MMSC)。在目前,MMS业务主要是以WAP作承载,以短消息作提示通知,由MMS手机自动到多媒体消息中心(MMSC)去提取来实现的。
在android中,MMS主要的处理都在app层,在framework层中主要涉及MMS pdu包的解析处理和发送和接受MMS时的网络处理。
MMS会使用telephony framework部分的类,详细信息请参考《Android_telephony_framework》系列文档。
二、MMS相关Service
1. TransactionService
主要是通过相应的transaction来处理MMS的发送、接收等请求。TransactionService包含一个ServiceHandler handler内部类,用来处理MMS相应事件。
三、MMS相关receiver
1. PushReceiver
接受Intent.WAP_PUSH_RECEIVED_ACTION,启动TransactionService来传递对应的push数据。
2. MmsSystemEventReceiver
接受Mms.Intents.CONTENT_CHANGED_ACTION、TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED和intent.ACTION_BOOT_COMPLETED。
四、MMS相关handler
1. SMSDispatcher
对SMS/MMS上报事件的处理,它有两个子类:GsmSMSDispatcher和CdmaSMSDispatcher,分别是GSMPhone和CdmaPhone的handler类。
2. WapPushOverSms
WapPushOverSms类虽然没有继承自handler类,但它的作用却实实在在的是一个handler类的作用,是它通过SMSDispatcher的dispatch方法来实现的。该类的作用是把接收到的push PDU包通过intent方式派送到应用模块的receiver处理。
五、MMS相关transaction
1. Transaction
继承自Observable类,是NotificationTransaction、ReadRecTransaction、RetrieveTransaction和SendTransaction的抽象类。
2. NotificationTransaction
继承自Transaction类,并实现Runnable接口。主要处理MMS的notifications (M-Notification.ind)消息,也就是push彩信通知消息。主要功能:
1)根据DownloadManager. mAutoDownload状态判断是否需要立即从MMSC中下载MMS内容。
2)发送GET请求给MMSC
3)获取M-Retrieve.conf数据并解析
4)保存接收到的MMS到inbox
5)删除M-Notification.ind信息
6)发送the M-NotifyResp.ind给MMSC
7)处理完成后通知TransactionService做相应处理。
3.ReadRecTransaction
继承自Transaction类,并实现Runnable接口。主要处理MMS的read report notifications (M-read-rec.ind)。主要功能:
1)Loads the read report indication from storage (Outbox). 即从mmssms.db中取出read report indication pdu。
2)Packs M-read-rec.ind and sends it.
3)Notifies the TransactionService about succesful completion.
4. RetrieveTransaction
继承自Transaction类,并实现Runnable接口。主要处理从MMSC中提取MMS(M-Retrieve.conf)。主要功能:
1)Sends a GET request to the MMSC server
2)Retrieves the binary M-Retrieve.conf data and parses it.
3)Persists the retrieve multimedia message.
4)Determines whether an acknowledgement is required.
5)Creates appropriate M-Acknowledge.ind and sends it to MMSC server.
6)Notifies the TransactionService about succesful completion.
5. SendTransaction
继承自Transaction类,并实现Runnable接口。主要处理发送MMS到MMSC(M-Send.req)。主要功能:
1)Loads the multimedia message from storage (Outbox).
2)Packs M-Send.req and sends it.
3)Retrieves confirmation data from the server (M-Send.conf).
4)Parses confirmation message and handles it.
5)Moves sent multimedia message from Outbox to Sent.
6)Notifies the TransactionService about successf