您的位置:首页 > 移动开发 > Android开发

Android接收彩信时解析PDU的过程记录

2015-11-19 22:04 567 查看
彩信是以PDU数据包的方式传输的,因此接收彩信的过程也就是解析PDU的过程,解析PDU的方法在PduParser.parse()中。通过HTTP请求下载到彩信的PDU,装入到ByteArrayInputStream字节流中,对该字节流按照PDU的数据包格式逐一解析。

1、通过protected PduHeaders parseHeaders(ByteArrayInputStream pduDataStream){...}方法,获取PDU的包头

2、protected PduBody parseParts(ByteArrayInputStream pduDataStream) {...}方法获取PDUbody,body中包含了彩信的所有附件Part

protected PduBody parseParts(ByteArrayInputStream pduDataStream) {
PduBody body = new PduBody();
int count = parseUnsignedInt(pduDataStream);//获取Part的个数
for(int i = 0; i < count; i++){
/* parse part's content-type */
HashMap<Integer, Object> map = new HashMap<Integer, Object>();
byte[] contentType = parseContentType(pduDataStream, map);//parseContentType中调用parseContentTypeParams方法,会解析出Part相关的各个字段,包括name,cid,cl等等
/* get name parameter */
byte[] name = (byte[]) map.get(PduPart.P_NAME);
if (null != name) {
part.setName(name);
}
/* get charset parameter */
Integer charset = (Integer) map.get(PduPart.P_CHARSET);
if (null != charset) {
part.setCharset(charset);
}
//通过类似的方式将各个字段放入part中
//接下来将附件的文件内容存入文件
}
}

3、通过上面的方法,解析出彩信的所有内容,然后通过PduPersist.persist()方法将彩信内容写入数据库,该方法会调用如下方法,逐一将PduPart写入数据库
public Uri persistPart(PduPart part, Uri uri, HashMap<Uri, InputStream> preOpenedFiles){
ContentValues values = new ContentValues();
values.put(Part.CHARSET, part.getCharset());
...//依次获取各个字节
//最后insert到数据库
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android PDU 彩信