这是我的第一篇文章,所以我提前道歉,如果这是错误的网站发布这个特定的问题。
问题
我已将Android的诺基亚MMS实现(http://androidbridge.blogspot.com/2011/03/how-to-send-mms-programmatically-in.html)整合到我正在编写的Android应用程序中,并且我能够将MMS从我的个人Metro PCS设备发送到Metro PCS的MMSC,并且消息可以毫无问题地发送给任何收件人。 / p>
这就是我发送彩信的方式:
public Boolean sendMMSMessage(final String senderNumber, final String smsText, final File imageFile, final Integer requestId){
byte[] out;
Enumeration keys;
//set image File
setImageFile(imageFile);
//create MMMessage
setMMMessage(new MMMessage());
//add text
addText(getMMMessage(),smsText,"<0>",IMMConstants.CT_TEXT_PLAIN);
//add image file
addFromFile(getMMMessage(),getImageFile(),"<1>",IMMConstants.CT_IMAGE_JPEG);
//set MMEncoder
setMMEncoder(new MMEncoder());
getMMEncoder().setMessage(getMMMessage());
//transaction ID (second parameter) is arbitrary
setMessage(getMMMessage(),"T135d743a6b7",senderNumber);
try {
getMMEncoder().encodeMessage();
out = getMMEncoder().getMessage();
setMMSender(new MMSender());
getMMSender().setMMSCURL("http://mms.metropcs.net:3128/mmsc");
//'min' of sending device. Required by Metro PCS MMSC.
getMMSender().addHeader("X-DEVICE-MIN", min);
setMMResponse(getMMSender().send(out));
} catch (Exception e) {
System.out.println(e.getMessage());
return false;
}
return (getMMResponse().getResponseCode()==IMMConstants.HTTP_RESPONSE_OK);
}
我想知道是否有可能'调整'诺基亚代码(如果有必要),以便任何设备都可以使用我的'min'凭证向Metro PCS的MMSC发送正确构建的MMS请求。我研究了从我的特定设备成功发送MMS到其他收件人时发生的数据包流(通过'WireShark')然而当我运行这个相同的Android应用程序时。在另一台设备(非Metro PCS设备)上,MMS消息无法发送,“WireShark”无法解释原因。任何人都可以帮助我指导我如何使这项工作?
更新:添加该logcat报告可能会有所帮助:
java.net.SocketTimeoutException: Connection timed out
第二次更新:我看了一下有关此问题的另一篇文章。标题为“Android以编程方式通过MMS发送图像(操作超时)”但不幸的是,目前还没有明确的答案,这个问题已经存在了两个月。我会尝试按照某人的建议增加读取“超时”(我怀疑这是原因),但如果有人 DOES 知道问题可能是什么,但只是希望不提供直接答案,这很好。我只需要一个在哪里看的暗示。
第三次更新:现在我考虑一下,我想知道发件人的IP地址(设备使用的实际IP地址)是否构成了一个因素。谁能确认一下?
第四次更新:我只是仔细查看了“MMSender.java”的代码(特别是在“HttpURLConnection”对象的最新情况下)并根据其setReadTimeout(ms)
方法,默认值('0')无论如何都会建立无限等待时间,并且不会在代码中的任何位置调用此方法。然而,仅仅为了踢,我为setConnectionTimeout(ms)
和setReadTimeout(ms)
手动将此值设置为1分钟,并且我怀疑没有骰子。相同的连接超时问题。
最终更新:抱歉。我刚刚意识到我前一段时间从另一个帖子中复制了这行代码:
((ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE)).startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,"enableSUPL");
现在,在仔细查看此调用后,我想知道是否有可能向startUsingNetworkFeature()
提供不正确的参数值(至少对于我正在尝试应用程序的非Metro PCS设备)。我不想在这里针对这个问题过度使用我的“更新”,但我希望你们(或者是女士们)能够获得充分的信息......如果这些参数值确实成为问题,我肯定会发布这个事实,但这将是我的最终更新。与此同时,我们非常感谢任何建议。