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到数据库
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

彩信的通知短信PDU数据分析

目录 一、数据采集... 1 1、采集数据方法... 1 2、样品数据... 1 3、关键解码函数... 3 二、MMS Notification 的 Short Message 结构说明....

彩信MMSpdu

原文来自:点击打开链接 Android当中的Mms对MMS(Multimedia Messaging Service)的操作关乎MMS协议部分都是通过Frameworks中提供的API来完成的:co...

Android短信源码分析 --PDU解析过程

6.14 PDU解析过程   SmsMessage.java,通过createFromPdu开始解析PDU数据。     public static SmsMessage createFromPdu...

Android Mms专题之:PDU介绍

Android当中的Mms对MMS(Multimedia Messaging Service)的操作关乎MMS协议部分都是通过Frameworks中提供的API来完成的:com.google.andr...

还原Android PDU彩信

     几周前在做Android彩信数据库还原时遇到了一个很棘手的问题,就是Android的彩信数据库不向短信数据库那样可以方便的用一条insert语句创建一条记录,而我没有得到许可去修改Andro...

Android接收短信-createFromPdu

This method was deprecated in API level 23. Use createFromPdu(byte[], String) instead.Android收到短信的事件...

Android MMS之草稿管理

当编辑完一条信息后,如果在没有发送的情况下退出编辑页面,那么信息会自动保存为草稿。也就是在ComposeMessageActivity的onStop()时,如果还没有发送,那么就会调用WorkingM...

Android短信Mms接受流程

短信的接收流程应用层 1、源文件 这部分代码在packages/apps/Mms下,涉及的主要类: [plain] view plain copy com.android....

android 短信的接收和发送处理

一 初始化   手机开机初始化调用GSMPhone 构造函数。 GSMPhone (Context context, CommandsInterface ci, PhoneNotifier no...
  • tjy1985
  • tjy1985
  • 2012年02月02日 14:00
  • 4359

彩信pdu格式描述文档

  • 2009年12月14日 15:27
  • 65KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android接收彩信时解析PDU的过程记录
举报原因:
原因补充:

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