2013-04-17 30 views
13

Tôi đang cố gắng tải xuống nội dung hình ảnh MMS qua url MMS, nhưng nó trả về bằng phản hồi máy chủ 403 (Bị cấm) với số không hợp lệ MSISDN. Tôi đã dán mã của tôi dưới đây để tham khảo. Cảm ơn trước!mms tải xuống nội dung mm thông qua 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

Điều gì về thông tin đăng nhập của người dùng? Bạn đã kiểm tra xem thông tin xác thực phù hợp có được đặt để truy cập dịch vụ dữ liệu hay không. Bạn đã thử sử dụng các công cụ (Network Protocol Analyzer) chẳng hạn như WireShark vv .. để giải mã yêu cầu gửi MMS (HTTP PDU) và phản hồi tương ứng từ MMSC từ xa. Không cung cấp bất kỳ chi tiết nào liên quan đến kết nối như URL MMSC từ xa, hãy đăng nhập vào các thông tin khó tạo lại và cung cấp bản sửa lỗi cho sự cố. – Sriram

+0

cách chuyển thông tin đăng nhập và tôi cũng không có bất kỳ thông tin nào về thông tin đăng nhập cần được cung cấp? –

+1

Trước tiên, hãy kiểm tra xem bạn có thể truy cập và khởi chạy google.com trên trình duyệt của bạn thành công hay không. Sau đó, bạn có thể điều hướng đến cài đặt MMS cụ thể bằng cách điều hướng đến (Trên android 2.0) Cài đặt-> Mạng di động -> Tên điểm truy cập -> Tên mạng của nhà cung cấp dịch vụ của bạn. Dưới đây bạn sẽ tìm thấy các tab như 1.) MMSC 2.) MMS proxy 3.) Cổng MMS 4.) Tên đăng nhập 5.) Mật khẩu. – Sriram

Trả lời

3

Bây giờ tôi có thể tìm ra giải pháp nhưng tôi thấy rằng đôi khi các mã tải không hoạt động nhưng khi bạn cố gắng một lần nữa nó hoạt động mặc dù những gì tôi đã mất tích đầu tiên thiết lập các kết nối đến máy chủ. Tôi đã đề cập dưới đây phương pháp kết nối và sau này gọi phương thức downloadThroughGateway (tham số) được đề cập đến trên mã câu hỏi này.

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

Lớp MmsDecoder từ đâu? – user1163234

+0

Tôi đang làm một cái gì đó tương tự Ở ĐÂY !!! http://stackoverflow.com/questions/21748209/receive-mms-messages-in-android-kitkat – toobsco42

Các vấn đề liên quan