以编程方式将MMS发送到Metro PCS MMSC(通过诺基亚实施)

时间:2012-03-25 01:20:53

标签: android nokia mms

这是我的第一篇文章,所以我提前道歉,如果这是错误的网站发布这个特定的问题。

问题
我已将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设备)。我不想在这里针对这个问题过度使用我的“更新”,但我希望你们(或者是女士们)能够获得充分的信息......如果这些参数值确实成为问题,我肯定会发布这个事实,但这将是我的最终更新。与此同时,我们非常感谢任何建议。

0 个答案:

没有答案