2011-07-29 9 views
1

興味深い問題があります。私のアプリケーションは、ファイルをいっぱいに開いて開くように設計されています。私は電子メールで添付する必要があるファイルを圧縮して送信することができます。Android:メールの添付ファイルを正しくダウンロード/保存する

g-メールの「表示」ボタンを使用してファイルを開くために自分のアプリを選択すると、ファイルが正しく解凍されません。ただし、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

だけからOSを変更してみてくださいなBufferedOutputStream –

+0

の代わりにするOutputStreamWriter使用してみてください完璧に動作しますBufferedOutputStream to OutputStreamWriter .. os.write(buffer、0、byteRead)はまだ動作します –

+0

読み込み専用バイトを取る[ – 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

素晴らしい。それは完全に動作します。 –

関連する問題