2012-05-21 9 views
6

Tôi đang cố gắng đính kèm tệp PDF có tên là download.pdf vào email trong Ứng dụng Android của tôi. Tôi đang sao chép tập tin đầu tiên vào SDCard và sau đó đính kèm nó vào email.Đính kèm tệp PDF vào email từ ứng dụng Android - Kích thước tệp là Zero

Tôi không thích hợp, nhưng tôi đang thử nghiệm trên thiết bị tab thiên hà. Đường dẫn lưu trữ bên ngoài trả mnt/sdcard/

Mã của tôi là như sau:

public void sendemail() throws IOException { 

    CopyAssets(); 

    String emailAddress[] = {""}; 

    File externalStorage = Environment.getExternalStorageDirectory(); 

    Uri uri = Uri.fromFile(new File(externalStorage.getAbsolutePath() + "/" + "download.pdf")); 

    Intent emailIntent = new Intent(Intent.ACTION_SEND); 
    emailIntent.putExtra(Intent.EXTRA_EMAIL, emailAddress); 
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject"); 
    emailIntent.putExtra(Intent.EXTRA_TEXT, "Text"); 
    emailIntent.setType("application/pdf"); 
    emailIntent.putExtra(Intent.EXTRA_STREAM, uri); 

    startActivity(Intent.createChooser(emailIntent, "Send email using:")); 

    } 

public void CopyAssets() { 
    AssetManager assetManager = getAssets(); 
    String[] files = null; 
    try { 
     files = assetManager.list(""); 
    } catch (IOException e) { 
     Log.e("tag", e.getMessage()); 
    } 
    for(String filename : files) { 
     InputStream in = null; 
     OutputStream out = null; 
     if (filename.equals("download.pdf")) { 
     try { 
      System.out.println("Filename is " + filename); 
      in = assetManager.open(filename); 
      File externalStorage = Environment.getExternalStorageDirectory(); 
      out = new FileOutputStream(externalStorage.getAbsolutePath() + "/" + filename); 
      System.out.println("Loacation is" + out); 
      copyFile(in, out); 
      in.close(); 
      in = null; 
      out.flush(); 
      out.close(); 
      out = null; 
     } catch(Exception e) { 
      Log.e("tag", e.getMessage()); 
     }  
    } 
    } 
} 
private void copyFile(InputStream in, OutputStream out) throws IOException { 
    byte[] buffer = new byte[1024]; 
    int read; 
    while((read = in.read(buffer)) != -1){ 
     out.write(buffer, 0, read); 
    } 
} 
} 

Vấn đề là các tập tin được đính kèm là 0 byte trong kích thước. Bất cứ ai có thể phát hiện ra những gì có thể sai?

EDIT

Tôi có thể thấy rằng các tập tin đã được lưu vào thiết bị nếu tôi nhìn trong cài đặt, do đó điều này phải là một vấn đề xung quanh như thế nào Tôi gắn file vào email. Trong các lỗi đăng nhập tôi nhìn thấy:

gMail Attachment URI: file:///mnt/sdcard/download.pdf 
gMail type: application/pdf 
gmail name: download.pdf 
gmail size: 0 

EDIT

Tự hỏi nếu điều này là một lỗi trên galaxy tab? Nếu tôi mở tập tin thông qua một trình xem pdf (từ ứng dụng của tôi) sau đó cố gắng đính kèm vào một email gmail, kích thước là một lần nữa 0. Bất cứ ai có thể xác minh?

Cảm ơn bạn.

+0

Liệu ứng dụng của bạn có quyền truy cập vào thẻ SD? –

+0

Có - trong tệp kê khai - GuybrushThreepwood

+0

Bạn đã kiểm tra kích thước tệp pdf trong 'sdcard' mà bạn đã sao chép bằng phương thức' copyAssets() '. – Praveenkumar

Trả lời

0

Nếu tệp download.pdf của bạn tồn tại trong SDCard. Vì vậy, vấn đề nên được Uri từ File. Hãy thử điều này, nó làm việc cho tôi.

Uri uri = Uri.fromFile(new File("/sdcard/", "download.pdf")); 
+0

Không giúp được gì - đây không phải là điều cơ bản giống như tôi đã nói ở trên? – GuybrushThreepwood

+0

K, tôi cố gắng giúp bạn, hãy xem tại đây [cố gắng đính kèm-một-tệp-từ-sd-thẻ-tới-email] (http://stackoverflow.com/questions/587917/trying- to-attach-a-file-từ-sd-card-to-email). Nó có thể giúp bạn –

+0

Cảm ơn, nhưng tôi đã tìm thấy chuỗi đó và không có gì hữu ích. – GuybrushThreepwood

0

Sự cố tương tự cũng xảy ra với tôi. Tôi đã xóa rằng sử dụng một số phương pháp từ các ví dụ. Tôi đã có answered câu hỏi tương tự với truy vấn của bạn. Có lẽ điều đó có thể giúp bạn.

0
File externalStorage = Environment.getExternalStorageDirectory();  
String PDFpath = externalStorage.toString(); 
String pdfpath =path.replace("/mnt",""); 
Uri uri = Uri.parse(new File("file://" + pdfpath)); 
6
String[] mailto = {""}; 
         Uri uri = Uri.fromFile(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/CALC/REPORTS/",pdfname)); 
         Intent emailIntent = new Intent(Intent.ACTION_SEND); 
         emailIntent.putExtra(Intent.EXTRA_EMAIL, mailto); 
         emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Calc PDF Report"); 
         emailIntent.putExtra(Intent.EXTRA_TEXT, ViewAllAccountFragment.selectac+" PDF Report"); 
         emailIntent.setType("application/pdf"); 
         emailIntent.putExtra(Intent.EXTRA_STREAM, uri); 
         startActivity(Intent.createChooser(emailIntent, "Send email using:"));