2013-04-17 10 views
13

Ich versuche, den MMS Bildinhalt über die MMS-URL herunterladen, aber es kommt mit einer 403 (Verboten) Serverantwort mit einer ungültigen MSISDN Nummer zurück. Ich habe meinen Code unten als Referenz eingefügt. Danke im Voraus!android mms herunterladen mms Inhalt durch 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

Was ist mit Benutzer Zugangsdaten? Haben Sie überprüft, ob die richtigen Anmeldeinformationen für den Datenservicezugriff festgelegt sind? Haben Sie versucht (Network Protocol Analyzer) Tools wie WireShark usw. zu verwenden, um die MMS-Sendeanforderung (HTTP PDU) und die entsprechende Antwort vom Remote-MMSC zu entschlüsseln. Ohne Angabe von Details bezüglich der Verbindung, wie z. B. der Remote-MMSC-URL, sind Anmeldedaten schwer reproduzierbar und bieten eine Lösung für das Problem. – Sriram

+0

Wie die Anmeldeinformationen übergeben und ich hatte auch keine Informationen über die Anmeldeinformationen, die zur Verfügung gestellt werden müssen? –

+1

Bitte überprüfen Sie zunächst, ob Sie google.com erfolgreich in Ihrem Browser aufrufen und starten können. Dann können Sie zu den MMS-spezifischen Einstellungen navigieren, indem Sie zu (On android 2.0) Einstellungen-> Mobile Netzwerke -> Zugangspunktnamen -> Name Ihres Network Providors navigieren. Hier finden Sie Tabs wie 1.) MMSC 2.) MMS-Proxy 3.) MMS-Port 4.) Benutzername 5.) Passwort. – Sriram

Antwort

3

Jetzt bin ich in der Lage, die Lösung zu finden, aber ich finde, dass irgendwann der Download-Code nicht aber funktioniert, wenn Sie versuchen, wieder funktioniert es zwar, was ich ersten fehlte die Verbindung zum Server. Ich habe unter der Konnektivitätsmethode erwähnt und nach diesem Aufruf den Methodennamen downloadThroughGateway (Parameter), der auf diesem Fragecode erwähnt wird.

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

Woher kommt die MmsDecoder-Klasse? – user1163234

+0

Ich mache sowas HIER !!! http://stackoverflow.com/questions/21748209/receive-mms-messages-in-android-kitkat – toobsco42