2011-07-29 36 views
1

我有一个有趣的问题:我的应用程序旨在发送和打开一个zip文件全部,并且zip有一个特殊的扩展名(更容易为用户)。我可以将需要附加到电子邮件中的文件压缩,然后发送给他们。Android:正确下载/保存电子邮件附件

当我使用g-mail“查看”按钮并选择我的应用程序打开文件时,它不会正确解压缩它们。但是,如果我使用gmail“下载”按钮,然后通过文件资源管理器打开文件,则该文件将正确解压缩。

这是我用它来下载附件代码:

// get attachment 
     try { 
      attachment = getContentResolver().openInputStream(
        getIntent().getData()); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
     // Save it 
     try { 
      File root = Environment.getExternalStorageDirectory(); 
      path = root.getPath() + "/PSattachment.psz"; 
      savedFile = new File(path); 
      FileOutputStream fos = new FileOutputStream(savedFile, false); 
      BufferedOutputStream os = new BufferedOutputStream(fos); 
      byte[] buffer = new byte[1024]; 
      int byteRead = 0; 
      while ((byteRead = attachment.read(buffer)) != -1) { 
       os.write(buffer, 0, byteRead); 
      } 
      fos.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

难道我做错了什么?提前致谢。 (另外,在这两种情况下[文件管理器和电子邮件视图]中的解压缩过程都是相同的,所以我非常肯定它在这里,而且文件是否下载,尺寸是否合适, t解压缩)。

+0

尝试使用OutputStreamWriter代替的BufferedOutputStream –

+0

的只是尝试更改OS BufferedOutputStream到OutputStreamWriter .. os.write(buffer,0,byteRead)仍然可以工作 –

+0

只读取byte [] – Mark

回答

1

我找到了答案!过了好一会儿,但至少现在它工作:

  try { 
      InputStream attachment = getContentResolver() 
        .openInputStream(getIntent().getData()); 
      savedFile = new File(Environment 
        .getExternalStorageDirectory().getAbsolutePath(), 
        "temp" + System.currentTimeMillis() + ".psz"); 
      FileOutputStream f = new FileOutputStream(savedFile); 
      byte[] buffer = new byte[1024]; 
      int len1 = 0; 
      while ((len1 = attachment.read(buffer)) > 0) { 
       f.write(buffer); 
      } 
      f.close(); 
     } catch (Exception e) { 
     } 

我只是用这个代码来下载附件,现在一切完美= d

+0

太好了。它完美的作品。 –