【第22期】观点:IT 行业加班,到底有没有价值?

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

原创 2015年11月19日 22:04:53

彩信是以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彩信的拦截与发送,于是就在网上找了一些资料,开始研究它的实现过程。 PS:需要从系统源码中扣取部分文件,大概在30个左右,不知道能不能精简,没认真看过。这里我重点说一下彩信的拦截和解析,因为彩信解析方面的资料相对较少。发送的部分我会提供...
  • mmdev
  • mmdev
  • 2012-04-13 11:10
  • 436

Android短彩信源码解析-短信发送流程(三)

android短信pdu的压缩与解析代码逻辑。短信发送是发送短信打包成的byte数组信息,这个byte数组信息内包含了短信属性标识信息、短信正文信息、短信时间戳信息等。

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

MMS-MTK-Obigo03c

MMS-MTK-Obigo03c 2011年02月20日   技 术 文 件   技术文件名称:[b]MTK --MMS   [/b] 技术文件编号:   版 本:1.2   拟 制 2010-08-03 ...

Android 收发彩信(MMS)

前段时间(已经过去两个月了....)公司让搞一下android彩信的拦截与发送,于是就在网上找了一些资料,开始研究它的实现过程。 PS:需要从系统源码中扣取部分文件,大概在30个左右,不知道能不能精...

MMS-MTK-Obigo03c

MMS-MTK-Obigo03c 2011年02月20日   技 术 文 件   技术文件名称:[b]MTK --MMS   [/b] 技术文件编号:   版 本:1.2   拟 制 2010-08-03 ...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)