2012-02-29 14 views
14

Estoy usando un código similar a otro SO post. Pero mi tipo MIME para cada MMS es "aplicación/smil". ¿Cómo determino si el MMS contiene una imagen, audio, texto, etc.?Android: qué hacer con la aplicación/smil Tipo MIME

Aquí está el código que estoy utilizando en la actualidad

 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")); 

Esto es lo que está contenido en los valores String [] para un MMS de audio:

[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> 
] 
+0

¡Estoy haciendo algo similar AQUÍ! http://stackoverflow.com/questions/11556633/parse-application-smil-mms-mime-type-on-android – toobsco42

+0

Hay una excelente descripción de cómo acceder a imágenes y texto en mensajes MMS en http: // stackoverflow. com/questions/3012287/how-to-read-mms-data-in-android. –

Respuesta

14

El problema es que usted' asumiendo que su cursor solo tiene 1 entrada. En realidad no.

Para mensajes MMS, encontrará que hay 3 (o más) entradas correspondientes a la misma mid. Se describen a continuación:

  1. Una entrada corresponderá al archivo SMIL. SMIL es un formato de archivo que contiene xml que ayuda a un visor de MMS a saber cómo mostrar el MMS (esto es lo que ha impreso anteriormente). El tipo MIME de esta entrada es application/smil si nos fijamos en la columna llamada ct (acrónimo de tipo de contenido)

  2. Otra entrada se corresponderá con el archivo de texto que contiene cualquier texto dentro de ese MMS además del archivo adjunto. El tipo MIME de esto será text/plain

  3. Por último, encontrará otra entrada que en realidad tiene el archivo adjunto. Este archivo adjunto puede tener una variedad de tipos MIME diferentes según el archivo. Si pasa a ser un jpeg será image/jpeg, si png será image/png etc ... (usted consigue el punto)

Por lo tanto, el problema era que estabas asumiendo que el cursor tiene 1 fila devuelto. Si repite 3 filas, encontrará lo que está buscando

Normalmente, filtraría la columna _data por el valor no vacío para acceder a la fila de datos adjuntos de inmediato. (La columna _data contendrá la ruta uri donde se guarda el archivo adjunto en el teléfono. Esa fila será null para todas las demás filas que no correspondan al archivo adjunto MMS. Por lo tanto, debe buscar la fila que coincida con su mid y donde _data column value is not null) Cuando encuentre esa fila, puede simplemente leer la columna ct de esa fila para encontrar el tipo MIME de la fila. Eso le dirá qué tipo de archivo se está transfiriendo en el mensaje MMS ya sea image/xyz o audio/abc o video/qwe etc ...

+0

Está muy bien explicado. –