最近在研究如何备份和恢复Message,发现网上实现的大多是对短信的备份与恢复,大多数方法都是采用XML的方式,这里我就不多加描述了。
我们都知道 ,手机中的MMS 是以PDU 的格式进行收发的,Android 系统中framework层有对MMS 封装为PDU格式的API ,让我们设想,如果以PDU格式
的文件对MMS进行备份和恢复,我们就少去了很多麻烦,下面我们来看一下核心的函数。
Google framework层中提供了专门的API ,在如下路径中:android\frameworks\base\core\java\com\google\android\mms\
在这个路径下包含很多文件,其中我们使用到的主要是3个类:
PduPersister
定义了对Android 系统识别的GenericPdu (android 自定义的数据类型)格式的对象的各种操作,我们可以同过函数 PduPersister.getPduPersister(context).load(uri)返回一个
GenericPdu 的对象。
PduComposer
可以实现将GenericPdu 对象封装为标准的PDU格式数据流,可以使用
GenericPdu msg = PduPersister.getPduPersister(context).load(uri);
byte[] message=new PduComposer(context, msg).make();
这样我们就实现了MMS 备份为PDU格式
PduParser
可以实现对备份PDU格式数据流的解析
Uri CONTENT_URI_RESTORE = Uri.parse("content://mms/sent");
GenericPdu msg= new PduParser(message).parse();
Uri uri= PduPersister.getPduPersister(context).persist(msg, CONTENT_URI_RESTORE);
其中 CONTENT_URI_RESTORE 为MMS要存在的位置,message 为通过PduComposer备份数据流,persist 方法根据URI 实现了将MMS插入到mmssms.db中
mmssms.db 中存储了手机中所有的彩信。
通过如上可知,我们通过这几个函数就可以实现对MMS的备份与恢复,当然具体实现起来还需要更多细节上的判断,例如 PUD 格式中对MMS的插入时间和彩信是在收件箱和发件箱
中都没有记录,这样我们就需要对这些字段进行单独记录,恢复的时候再重新插入到mmssms.db中,还有恢复的时候如何插入,这些都需要进一步的去判断,这样就需要我们不断
的去完善。
所以以上是对MMS 备份和恢复为PDU格式的核心方法,希望能对大家有帮助。