2014-03-26 64 views
1

OK乡亲,安卓彩信,如何解析PDU?

  1. 我知道如何拦截短信和/或彩信接收广播
  2. 我知道如何解析短信PDU
  3. 我知道如何彩信和短信保存到设备存储

对我来说唯一的缺点是如何解析MMS PDU并获取二进制数据及其MIME类型。

任何人都可以指点我良好的资源/示例或只是解释如何做到这一点?

public class MmsReceiver extends BroadcastReceiver { 
    private static final String PDUS = "pdus"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    Bundle bundle = intent.getExtras(); 
    Object[] pdus = (Object[]) bundle.get(PDUS); //getting PDU's from extras 

    //what next?? 

    } 
} 
+0

这篇文章可能对您有用:http://stackoverflow.com/a/6446831/2445061 – ChrisCarneiro

+0

@ChrisCarneiro nope它没用,它只是关于读/写设备存储。我正在寻找解析'BroadcastReceiver'中收到的PDU。 – barmaley

回答

-1
SmsMessage[] sms = new SmsMessage[pdus.length]; 
    sms[0] = SmsMessage.createFromPdu((byte[]) pdus[0]); 
+0

我正在问解析彩信pdu,而不是短信pdu – barmaley

+0

是的,我很抱歉... ... –

0

你想要做这样的事情

SendReq parsed = (SendReq) new PduParser(pduByteArray).parse(); 

例如如果它是一个传出MMS SendReq;如果它是传入的,我相信你想要转换为RetrieveConf。然后有访问器等将其分开。

可悲的是,的toString()对这些对象不给你什么特别有用的(我们可以梦想!)

在RetrieveConf,你可以调用的getContentType()的返回类型的数组中信息。为了获得实际的二进制数据,我认为你可能需要直接进入系统内容存储表;我不认为完整的二进制数据存储在PDU对象中(尽管它可能已经以这种方式发送出去;我认为它一旦到达就被系统数据库存储,分成单独的对象) 。