2013-04-17 5 views
13

Я пытаюсь загрузить содержимое изображения MMS с помощью URL-адреса MMS, но он возвращается с ответом сервера 403 (Запрещенный) с недопустимым номером MSISDN. Я применил свой код ниже для справки. Заранее спасибо!android mms download mms content through mms url

private static boolean downloadThroughGateway(Context context, String host, 
      String port, String urlMms) throws Exception { 
     URL url = new URL(urlMms); 

     // Set-up proxy 
     if (host != null && port != null && host.equals("") && !port.equals("")) { 
      Log.d(TAG, "[MMS Receiver] Setting up proxy (" + host + ":" + port 
        + ")"); 
      Properties systemProperties = System.getProperties(); 
      systemProperties.setProperty("http.proxyHost", host); 
      systemProperties.setProperty("http.proxyPort", port); 
      systemProperties.setProperty("http.keepAlive", "false"); 
     } 

     // Open connection 
     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 

     // Disable cache 
     connection.setUseCaches(false); 

     // Set the timeouts 
     connection.setConnectTimeout(TIMEOUT); 
     connection.setReadTimeout(TIMEOUT); 

     // Connect to the MMSC 
     Log.d(TAG, "[MMS Receiver] Connecting to MMS Url " + urlMms); 
     connection.connect(); 

     try { 
      Log.d(TAG, 
        "[MMS Receiver] Response code is " 
          + connection.getResponseCode()); 

      if (connection.getContentLength() >= 0) { 
       Log.d(TAG, "[MMS Receiver] Download MMS data (Size: " 
         + connection.getContentLength() + ")"); 
       byte[] responseArray = new byte[connection.getContentLength()]; 
       DataInputStream i = new DataInputStream(
         connection.getInputStream()); 
       int b = 0; 
       int index = 0; 
       while ((b = i.read()) != -1) { 
        responseArray[index] = (byte) b; 
        index++; 
       } 
       i.close(); 

       // Parse the response 
       MmsDecoder parser = new MmsDecoder(responseArray); 
       parser.parse(); 

       byte[][] imageBytes = new byte[parser.getParts().size()][]; 
       for (int j = 0; j < parser.getParts().size(); j++) { 
        imageBytes[j] = parser.getParts().get(j).getContent(); 
       } 

       // Insert into db 
       // Uri msgUri = MmsHelper.insert(context, parser.getFrom(), 
       // parser.getSubject(), imageBytes); 
       // ContentValues updateValues = new ContentValues(); 
       // updateValues.put("read", 0); 
       // context.getContentResolver().update(msgUri, updateValues, 
       // null, 
       // null); 

       // Close the connection 
       Log.d(TAG, "[MMS Receiver] Disconnecting ..."); 
       connection.disconnect(); 

       System.gc(); 

       // Callback 
       // if (bi != null) 
       // bi.onReceiveMms(context, msgUri); 

       return true; 
      } 

      // Close the connection 
      Log.d(TAG, "[MMS Receiver] Disconnecting ..."); 
      connection.disconnect(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return false; 
    } 
+0

Как насчет учетных данных пользователя? Вы проверяли, установлены ли правильные учетные данные для доступа к службе данных. Вы пытались использовать инструменты (Network Protocol Analyzer), такие как WireShark и т. Д., Чтобы расшифровать запрос отправки MMS (HTTP PDU) и соответствующий ответ от удаленного MMSC. Без предоставления каких-либо сведений о соединении, таких как удаленный URL-адрес MMSC, введите учетные данные, которые трудно воспроизвести, и укажите исправление проблемы. – Sriram

+0

как передать учетные данные, и у меня также не было никакой информации о полномочиях, которые необходимо предоставить? –

+1

Сначала проверьте, сможете ли вы успешно запустить и запустить google.com в своем браузере. Затем вы можете перейти к определенным настройкам MMS, перейдя к (On android 2.0) Настройки-> Мобильные сети -> Имена точек доступа -> Имя вашего сетевого провизора. Здесь вы найдете такие вкладки, как 1.) MMSC 2.) MMS-прокси 3.) MMS-порт 4.) Имя пользователя 5.) Пароль. – Sriram

ответ

3

Теперь я могу найти решение, но я считаю, что когда-то загрузка кода не работает, но при попытке снова работает, хотя то, что я пропускал первого установления соединения с сервером. Я упоминал ниже метод подключения и после этого вызова имя метода downloadThroughGateway (параметры), которое упоминается в этом вопросительном коде.

private void startConnectivity() throws Exception { 
     ConnectivityManager mConnMgr = (ConnectivityManager) context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (!mConnMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE_MMS) 
       .isAvailable()) { 
      throw new Exception("Not available yet"); 
     } 
     int count = 0; 
     int result = beginMmsConnectivity(mConnMgr); 
     if (result != PhoneEx.APN_ALREADY_ACTIVE) { 
      NetworkInfo info = mConnMgr 
        .getNetworkInfo(ConnectivityManager.TYPE_MOBILE_MMS); 
      while (!info.isConnected()) { 
       Thread.sleep(1500); 
       info = mConnMgr 
         .getNetworkInfo(ConnectivityManager.TYPE_MOBILE_MMS); 
       Log.d(">>>", "Waiting for CONNECTED: state=" + info.getState()); 
       if (count++ > 5) 
        throw new Exception("Failed to connect"); 
      } 
     } 
     Thread.sleep(1500); 
    } 
+0

Где находится класс MmsDecoder? – user1163234

+0

Я делаю что-то подобное ЗДЕСЬ !!! http://stackoverflow.com/questions/21748209/receive-mms-messages-in-android-kitkat – toobsco42