Android如何解析下载的MMS并将其保存到数据库表中?

时间:2018-01-30 03:17:19

标签: android mms

我可以收到彩信,但是当我将它们保存在手表中时会出现问题。我无法解析他。有什么好办法吗?

public class MultimediaReceiver extends BroadcastReceiver {
public static final String MMS_RECEIVE_ACTION = "android.provider.Telephony.WAP_PUSH_RECEIVED";

@Override
public void onReceive(final Context context, Intent intent) {
    if (intent.getAction().equals(MMS_RECEIVE_ACTION)) {
        PduParser parser = new PduParser(intent.getByteArrayExtra("data"));
        final NotificationInd genericPdu = (NotificationInd) parser.parse();
        byte [] data=genericPdu.getContentLocation();
        final String string=new String(data);
        Log.e("download url",string);
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Log.e("download ",new String(genericPdu.getTransactionId()));
                    byte[] s = HttpUtils.httpConnection(context, -1L, string, null, HttpUtils.HTTP_GET_METHOD,true, "10.0.0.200", 80);
                    Log.e("download length", new String(s));
                    if (s!=null && s.length>0){
                        parser(s);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();

    }
}
public void parser(byte []mmsData){
    try {
        PduBody body = null;
        GenericPdu pdu = new PduParser(mmsData).parse();
        if ((pdu == null) || (pdu.getMessageType() != 0x84)) {
        } else if (pdu instanceof MultimediaMessagePdu) {
            body = ((MultimediaMessagePdu) pdu).getBody();
            String subject = String.valueOf(((MultimediaMessagePdu) pdu).getSubject());
            if (body != null) {
                int partNum = body.getPartsNum();
                for (int i = 0; i < partNum; i++) {
                    PduPart part = body.getPart(i);
                    String contentType = new String(part.getContentType(), "gb2312");
                    if (contentType.contains("text")) {
                        String content = new EncodedStringValue(part.getData()).getString();
                    } else if (contentType.contains("jpeg")) {
                        Bitmap bmp = BitmapFactory.decodeByteArray(part.getData(), 0, part.getData().length);
                        if (bmp != null) {
                        } else {
                        }
                    }else {
                    }
                }
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}}

我打印出日志输出。

 <head>
      <layout>
       <root-layout/>
      <region id="Text" top="70%" left="0%" height="30%" width="100%" fit="scroll"/>
      <region id="Image" top="0%" left="0%" height="70%" width="100%" fit="meet"/>
      </layout>
  </head>
  <body>
  <par dur="10s">
  <img src="IMG_5106.jpg" region="Image"/>
  </par>
  </body>
  </smil>

  ����IMG_5106.jpg���IMG_5106.jpg��������JFIF������H��H��������LExif����MM��*���������i�������������������������������������������������������������������������������8Photoshop 3.0��8BIM������������8BIM%������������ُ����    ���B~������"��������������������������  
  �����������}��!1AQa"q2���#B��R��$3br� 
  %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz�������������������������������������������������������������������������������������������  
  ���������w��!1AQaq"2�B����    #3R�br�
  $4�%�&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz����������������������������������������������������������������������������C��





  ����C     ������)��������?����(��?�@�����5�V�<    ��X�ƿV�5�/�?eMo�_.>2ů�[����zs[�3�`�+�`�+7��F�2y����n4cv��G������*�(FRP[���O��O3���<�R�ꇃ>���'�׮4>MM�;��ַCs�L�7��(�������<O�#Í)�j��Z@�S�p���q��ӌ�'��Zߝ&�}����<e���zߖ�jޛ�9
  ��z��2i+�o�~�7�|r�4�;ĺ���e��[�iQGm,��*�i<�!x$����_��3��4?x�ZmH�{s\i1EX�fR��!�����S�4��j�]-������"�R�5�3��s�N{�]Q��w}��^@�I��_F|+�LѾ���e�ݾ��Z%Χd/���7��3����W�Cw�K�^x��)���lf����Y�Vx�a�B@��N�\�.t���m{��1�T���IPmFJ7\��j.��%o�%wv�>�=�s�;��=��|C��\������V�ږ�����f��k$�1���p��^���ii�V��K������}N[�k�yt��i���<�;9�Ue��UO+s�QwI_E�;�bxʝ
  P�Zj2��-)��鮪�=W-�[��  ���u>�����'��Vo��Cm�mH�����'i��ke%1DV�ZL���l�ˑ���ī�K��MKJ73�g��M:}�d(q    Nц8a�YW�{5̟7���y���o,\��ظ�wո��K_vOW���<�0H�zWк��b����k/i�4mu�A��.l��ZI/<��=��<Y��~/����O�.������g�M�B8%����UV,���!��U����ӵ��wn�Ռ��~���4��v����\��5%�T�i{�C�)�Pޣ5�>�|[����4[o)�%�B<�R>Z8|�Ls�A88�qP�:�*{����q�p8j��K� �n�輖��S���~�iڧ���mFO�)�{w�#W��.n-���[׮�ބ��y�Wާ�<m�B�G��i�3}�[��/�O 
  �M%�� ǨV�o�
    {��Go�
  �?9�����ZU�˪�=U�F��N\����>�/ᔚO�|�;}[E�i--�-�Q���׉!��ps�|�^>+<=WJ���}�M�a�L1�K�J�i٦�T�AEW9�Q@Q@Q@Q@Q@Q@Wٿ���?��6���� kr_j�#���t=9�7���;

我最初认为这是我的编码错误,但当我将其切换过来时,我无法正确解析它并且他现在需要一些帮助。我要做的最后一件事就是解析它并获得正确的附件并保存它,我试图阅读系统数据库由于某种原因,这是行不通的。

1 个答案:

答案 0 :(得分:0)

这是一篇旧文章,但是我在加载MMS数据时遇到了同样的问题。这是我的代码(在MMS接收器中),用于从MMS pdu中提取数据:

byte[] returnData = null;

GenericPdu pdu = new PduParser(rawPdu).parse();
if (pdu instanceof MultimediaMessagePdu) {
    PduBody body = ((MultimediaMessagePdu) pdu).getBody();
    if (body != null) {
        int partsNum = body.getPartsNum();
        for (int i = 0; i < partsNum; i++) {
            try {
                PduPart part = body.getPart(i);
                if (part == null || part.getData() == null || part.getContentType() == null || part.getName() == null) {
                    continue;
                }

                // Assuming image type for testing purposes
                String partType = new String(part.getContentType());
                String partName = new String(part.getName());
                returnData = part.getData();
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

// Return the MMS
callback.finish(returnData);

在返回的回调中,我通过执行以下操作用数据填充imageview:

MMSSaver.saveMessage(context, intent, new Callback() {
    @Override
    public void finish(Object data) {
        byte[] bytes = (byte[]) data;
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                ImageView testImage = view.findViewById(R.id.testImage);
                testImage.setImageBitmap(BitmapFactory.decodeByteArray(bytes, 0, bytes.length));
            }
        });
        return;
    }
}