Android 以编程方式向Metro PC发送彩信(通过诺基亚实施)

Android 以编程方式向Metro PC发送彩信(通过诺基亚实施),android,nokia,mms,Android,Nokia,Mms,这是我的第一篇帖子,如果这是一个错误的网站,我会提前道歉。 问题 我已经将诺基亚针对android的彩信应用集成到我正在编写的android应用程序中,我可以将彩信从我的个人Metro PC设备发送到Metro PC的MMSC,并且信息可以毫无问题地发送给任何收件人 这就是我发送彩信的方式: public Boolean sendMMSMessage(final String senderNumber, final String smsText, final File imageFile

这是我的第一篇帖子,如果这是一个错误的网站,我会提前道歉。

问题
我已经将诺基亚针对android的彩信应用集成到我正在编写的android应用程序中,我可以将彩信从我的个人Metro PC设备发送到Metro PC的MMSC,并且信息可以毫无问题地发送给任何收件人

这就是我发送彩信的方式:

   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);
   }
public Boolean sendmmsessage(最终字符串senderNumber、最终字符串smsText、最终文件imageFile、最终整数requestId){
字节[]输出;
枚举键;
//设置图像文件
setImageFile(图像文件);
//创建MMMessage
setMMMessage(新的MMMessage());
//添加文本
addText(getMMMessage(),smsText,“,immstants.CT\u TEXT\u PLAIN);
//添加图像文件
addFromFile(getMMMessage(),getImageFile(),“”,IMMConstants.CT\u IMAGE\u JPEG);
//设置MMEncoder
setMMEncoder(新的MMEncoder());
getMMEncoder().setMessage(getMMMessage());
//事务ID(第二个参数)是任意的
setMessage(getMMMessage(),“T135d743a6b7”,发送者编号);
试一试{
getMMEncoder().encodeMessage();
out=getMMEncoder().getMessage();
setMMSender(新的MMSender());
getMMSender().setMMSCURL(“http://mms.metropcs.net:3128/mmsc");
//发送设备的“最小值”。Metro PCS MMSC要求。
getMMSender().addHeader(“X-DEVICE-MIN”,MIN);
setMMResponse(getMMSender().send(out));
}捕获(例外e){
System.out.println(e.getMessage());
返回false;
}
返回(getMMResponse().getResponseCode()==immcontents.HTTP\u RESPONSE\u OK);
}
我想知道是否有可能“调整”诺基亚的代码(如果有必要),以便任何设备都可以使用我的“min”凭据向Metro PC的MMSC发送正确构造的彩信请求。我已经研究了数据包流(通过“WireShark”)当彩信从我的特定设备成功发送到其他收件人时会发生什么,但是当我运行同一个android应用程序时。在另一台设备(非地铁PC设备)上,彩信无法发送,“WireShark”无法解释原因。有谁能帮我指引方向,让我如何让这项工作成功

更新:添加logcat报告可能会有所帮助:
java.net.SocketTimeoutException:连接超时


第二个更新:我看了另一篇关于这个问题的帖子。它的标题是“Android通过彩信程序发送图像(操作超时)”,但不幸的是,目前还没有一个明确的答案,这个问题已经存在了两个月。我将尝试按照某人的建议增加读取“超时”(我怀疑这是原因),但如果有人确实知道问题可能是什么,但只是希望不提供直接的答案,则可以。我只是想知道该去哪里找。

第三个更新:现在我想起来了,我想知道发送者的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 PC设备)。对于这个问题,我不想在这里过分强调我的“更新”,但我希望你们这些家伙(或女孩)得到充分的信息,所以。。。;如果这些参数值确实是问题所在,我肯定会发布这一事实,但这将是我的最终更新。同时,我们非常感谢您的任何建议