我可以收到彩信,但是当我将它们保存在手表中时会出现问题。我无法解析他。有什么好办法吗?
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���;
我最初认为这是我的编码错误,但当我将其切换过来时,我无法正确解析它并且他现在需要一些帮助。我要做的最后一件事就是解析它并获得正确的附件并保存它,我试图阅读系统数据库由于某种原因,这是行不通的。
答案 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;
}
}