Android:如何处理application/smil MIME类型

Jus*_*tin 15 android mms

我正在使用类似于另一个SO帖子的代码.但我的每个MMS的MIME类型都是"application/smil".如何确定MMS是否包含图片,音频,文本等?

这是我目前使用的代码:

        String selectionPart = "mid =" + id;
        Uri ur = Uri.parse("content://mms/part");
        Cursor cur = getContentResolver().query(ur, null, selectionPart, null, null);
        if (cur.moveToFirst()) {
            do {
                String[] values = new String[cur.getColumnCount()];

                for (int i = 0; i < cur.getColumnCount(); i++) {
                    values[i] = cur.getString(i);
                }

                String partId = cur.getString(cur.getColumnIndex("_id"));
                String type = cur.getString(cur.getColumnIndex("ct"));
Run Code Online (Sandbox Code Playgroud)

这是音频MMS的值String []中包含的内容:

[56, 98, -1, application/smil, smil.xml, null, null, null, <0000>, smil.xml, null, null, null, <smil>
<smil>
  <head>
    <layout>
      <root-layout height="480px" width="320px"/>
      <region fit="meet" height="160px" id="Text" left="0" top="320" width="320px"/>
    </layout>
  </head>
  <body>
    <par dur="11000ms">
      <audio dur="11000ms" src="cid:171"/>
      <text region="Text" src="cid:172"/>
    </par>
  </body>
</smil>
]
Run Code Online (Sandbox Code Playgroud)

wna*_*fee 17

问题是你假设你的光标只有1个条目.它实际上没有.

对于MMS消息,您会发现有3个(或更多)条目对应于相同的消息mid.它们描述如下:

  1. 一个条目将对应于SMIL文件.SMIL是一种包含xml的文件格式,可帮助MMS查看器了解如何显示MMS(这是您上面打印的内容).此条目的MIME类型是application/smil您查看名为ct(内容类型的首字母缩写词)的列

  2. 另一个条目将对应于除了附件之外还包含该MMS内的任何文本的文本文件.这将是MIME类型text/plain

  3. 最后,您将找到另一个实际具有附件的条目.此附件可以具有各种不同的MIME类型,具体取决于文件的内容.如果它恰好是一个jpeg它将是image/jpeg,如果png它将是image/png等...(你明白了)

所以,问题在于您假设游标返回了1行.如果你遍历3行,你会发现你在寻找什么

通常,我会过滤_data非空值的列以立即到达附件行.(该_data列将包含用于在手机上保存附件的uri路径.该行将null用于与MMS附件不对应的所有其他行.因此,您必须搜索与您mid和哪里匹配的行_data column value is not null)当您找到该行,您只需读取该ct行的列即可找到该行的MIME类型.这将告诉你在MMS消息中传输的文件类型是什么image/xyz,audio/abc或者video/qwe等等......