当前位置: 移动技术网 > 移动技术>移动开发>Android > Android Mms之:PDU的使用详解

Android Mms之:PDU的使用详解

2019年07月24日  | 移动技术网移动技术  | 我要评论
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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网