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 Mms专题之:PDU介绍

Android当中的Mms对MMS(Multimedia Messaging Service)的操作关乎MMS协议部分都是通过Frameworks中提供的API来完成的:com.google.andr...
  • hitlion2008
  • hitlion2008
  • 2012年03月29日 20:23
  • 11877

短息接收--android短彩信的接收流程深入分析(framework)

短彩信的接收流程 涉及的文件 com.android.internal.telephony/Ril.java com.android.internal.telephony/SMSDispatche...
  • ceko_wu
  • ceko_wu
  • 2012年07月07日 13:13
  • 9592

Android 短信模块分析(五) MMS之彩信的发送与接收

1.4.2彩信发送   彩信比短信麻烦很多。从sendMmsWorker函数的参数就可以看出来:(conv, mmsUri, persister, slideshow, sendReq) 上下文,ur...
  • t12x3456
  • t12x3456
  • 2013年07月18日 09:25
  • 8772

Android 5.0 Lollipop 短彩信接收流程

短彩信接收流程和来电流程有点类似,最开始也是RIL层上报短信事件,然后上层来处理接收短信的流程。android的ril位于应用程序框架与内核之间,分成了两个部分,一个部分是rild,它负责socket...
  • yin1031468524
  • yin1031468524
  • 2016年05月07日 19:43
  • 2657

Android短彩信收发流程(Framework)

短信部分: 短信的发送,Framework部分从SmsManager的sendTextMessage(普通短信,无分段)与sendMultipartTextMessage(长短信,已分段)开始,一直...
  • jingwen3699
  • jingwen3699
  • 2012年08月24日 11:08
  • 1280

Android Mms专题之:接收信息流程

信息的接收工作是由底层来完成的,当有一个 新的信息时底层完成接收后会以Intent的方式来通知上层应用,信息的相关内容也包含在Intent当中,Android所支持的信息Intent都定义在andro...
  • hitlion2008
  • hitlion2008
  • 2011年12月30日 19:57
  • 16774

Android短信Mms接受流程

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

彩信MMSpdu

原文来自:点击打开链接 Android当中的Mms对MMS(Multimedia Messaging Service)的操作关乎MMS协议部分都是通过Frameworks中提供的API来完成的:co...
  • yizhesong
  • yizhesong
  • 2015年08月27日 14:40
  • 474

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

6.14 PDU解析过程   SmsMessage.java,通过createFromPdu开始解析PDU数据。     public static SmsMessage createFromPdu...
  • xiashaohua
  • xiashaohua
  • 2014年12月01日 22:28
  • 2421

高通android 7.0彩信发送过程中使用到的google pdu

对于彩信与数据库的交互操作,google并没有将这部分代码放在Mms中,而是放在framework中的pdu部分。 具体代码路径是在:opt\telephony\src\java\com\googl...
  • tangyisen18
  • tangyisen18
  • 2017年09月14日 10:42
  • 323
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android接收彩信时解析PDU的过程记录
举报原因:
原因补充:

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