欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android Mms之:PDU的使用详解

程序员文章站 2023-11-20 17:58:10
android当中的mms对mms(multimedia messaging service)的操作关乎mms协议部分都是通过frameworks中提供的api来完成的:c...
android当中的mms对mms(multimedia messaging service)的操作关乎mms协议部分都是通过frameworks中提供的api来完成的:com.google.android.mms这个包在sdk中是不开放的,只能供内部程序使用,它封装了所有mms所需要的api。
这个包就是android中对mms协议的实现,包括一些数据结构:genericpdu,multimediamessagepdu,sendreq,sendconf,notificationind,retrieveconf,pduheaders,pdubody,pdupart等。也包括操作这些数据的类:pdupersister,pduparser和pducomposer。pdupersister主要供给android内部的应用程序使用;而pduparser和pducomposer会涉及到pdu相关的协议,会与mmsc或其他平台有相互影响(比如所打包的字节流是否符合标准,能否被其他平台成功解析和识别等)
这个包的功能就是在发送时把多媒体数据打包成标准mmsc能识别的pdu格式数据,在接收时把pdu数据包解析出来以供更加方便的应用程序使用,同时也提供一些存储上的接口,比如把pdu保存到数据库,从数据库加载出pdu。

class purpose
pdupersister 用于管理pdu存储
pduparser 用于解析pdu
pducomposer 用于生成pdu

pdupersister: 用于管理pdu存储,关键的方法:

return
method
description
pdupersister
getpdupersister(context)
get the object
uri
persist(genericpdu, uri)
把一个genericpdu保存到uri所指定的数据库中,返回指向新生成数据的uri
genericpdu
load(uri)
从数据库把uri所指的数据加载出来成一个genericpdu对象
uri
move(uri, uri)
把pdu从一个地方移到另一个地方,比如从草稿箱移动到发件箱,当mms已发送时。

为什么会要把pdu的存储也封装成pdupersister呢?因为pdu的存储方式 是放在标准的sqlitedatabase中,通过telephonyprovider,而sqlitedatabase中存储不能以直接的pdu的字节流来存储,必须要把pdu拆解成为可读的字段,因此在存储pdu和从存储加载pdu的过程 中涉及到pdu数据上面的处理,因此封装出来,更方便使用。
pduparser:用于把pdu字节流解析成为android可识别的genericpdu

return method description
pduparser pduparser(byte[]) construct an object
genericpdu parse() parse the pdu byte stream into android pdu genericpdu

pducomposer:把genericpdu打包生成pdu字节流

return method description
pducomposer pducomposer(context, genericpdu) construct an object
byte[] make() transfer the genericpdu into a pdu byte stream