Программная отправка MMS в Metro PCS MMSC (через реализацию Nokia) - PullRequest
2 голосов
/ 25 марта 2012

Это мой первый пост, поэтому я заранее извиняюсь, если это не тот сайт, на который можно отправить этот конкретный вопрос.

Вопрос
Я интегрировал реализацию MMS от Nokia для Android (http://androidbridge.blogspot.com/2011/03/how-to-send-mms-programmatically-in.html) в приложение для Android, которое я пишу, и я могу отправлять MMS со своего персонального устройства Metro PCS в MMSC Metro PCS, и сообщения доставляются любому получателю без проблем.

Вот как я отправляю MMS:

   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);
   }

Мне интересно, можно ли «подправить» код Nokia (если это необходимо), чтобы любое устройство могло отправлять правильно составленный MMS-запрос в MMSC Metro PCS, используя мои «минимальные» учетные данные. Я изучил поток пакетов (через «WireShark») о том, что происходит, когда MMS успешно отправляется с моего конкретного устройства другим получателям, однако при запуске этого же приложения для Android. на другом устройстве (не Metro PCS) сообщения MMS не отправляются, и «WireShark» не помогает объяснить, почему. Может ли кто-нибудь помочь вести меня в направлении, как я мог бы сделать эту работу?

Обновление : может помочь добавление отчетов logcat:
java.net.SocketTimeoutException: Connection timed out

Второе обновление: Я посмотрел другой пост, посвященный этой проблеме. Она называется "Android отправляет изображение через MMS программно (время операции истекло)" , но, к сожалению, в настоящее время нет однозначного ответа, и этот вопрос существует уже два месяца. Я постараюсь увеличить время ожидания чтения, как кто-то предложил (я сомневаюсь, что это причина), но если кто-то ДАЕТ знает, в чем может быть проблема, но просто хочет не дать прямого ответа, это нормально. Мне просто нужен намек на то, где искать.

Третье обновление: Теперь, когда я думаю об этом, мне интересно, является ли здесь IP-адрес отправителя (фактический IP-адрес, используемый устройством). Кто-нибудь может подтвердить?

Четвертое обновление: Я просто более подробно рассмотрел код для 'MMSender.java' (в частности, что происходит с объектом 'HttpURLConnection') и в соответствии с его методом setReadTimeout(ms), значением по умолчанию ( '0') в любом случае устанавливает бесконечное время ожидания, и этот метод нигде не вызывается в коде. Однако, только для ударов, я вручную установил это значение на 1 минуту для setConnectionTimeout(ms) и setReadTimeout(ms) и, как я подозревал, без кубиков. Та же проблема с тайм-аутом соединения.

Окончательное обновление: Извините. Я только что понял, что скопировал эту строку кода из другой публикации некоторое время назад:

((ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE)).startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,"enableSUPL");

и теперь, после более внимательного изучения этого вызова, я задаюсь вопросом, возможно ли, что я предоставляю неправильные значения параметров для startUsingNetworkFeature() (по крайней мере для устройства, не являющегося Metro PCS, на котором я пытаюсь установить приложение). Я не хочу перегибать мои «обновления» здесь для этого вопроса, но я хочу, чтобы вы, ребята (или девочки), были в курсе, так что ...; если эти значения параметров окажутся проблемой, я обязательно опубликую этот факт, но это будет мое последнее обновление. В то же время, любой совет очень ценится.

...