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

来源:互联网 发布:火车票网络订票时间 编辑:程序博客网 时间:2024/06/14 05:15

彩信是以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到数据库}

0 0
原创粉丝点击