ありがとうございますLokesh Kumar、あなたのコードは多くの助けになりました! しかし、私はあなたのソリューションに関する問題を強調したいと思います。あなたのこのコードを使用しようとすると
:
FileOutputStream tmp = new FileOutputStream(getCacheDir().getPath() + "/temp.myfile");
byte[] buffer = new byte[1024];
while (attachment.read(buffer) > 0)
tmp.write(buffer);
tmp.close();
attachment.close();
それはファイル全体をコピーしなかったが、私は問題があると思います。 attachment.read(buffer)
を実行するときは、毎回1024バイトを読み込み、2000バイトのファイルがあるとします。
最初の読書では、最初の1024を取得し、次の最後の読書では、最後の976バイトが得られます。この場合、バッファは最後のバイト読み込まれたプレビューから、ファイルの最後は最後の読み取りから976バイト、残りの48は最後の読み取りの前に読み込まれます。 これにより、ファイルの最後が正しくなりません。
私の場合、添付ファイルは、コピーしなければならないkmlファイル(xml形式の位置データファイル)です。このコードを使用しようとすると、私はいつもkmlの終わりが間違っています。終了タグの後には、最後のテキストの前に読まれたテキストがあります。このような
何か:もちろん
</Document>
</kml>
278
34.81186031,31.96118044
34.81184437,31.96122622
34.81181701,31.96127052
34.81182701,31.9612875
、これは有効なKMLではなく、PARSにそれをしようとしたときには、エラーが発生します。
したがって、入力ストリームから読み込むためにいくつかの異なるコードを使用しています。
これは、ファイルのコピーのために私のコードです:
InputStream attachment = getContentResolver().openInputStream(container.uri);
FileOutputStream tmp = new FileOutputStream(container.fileName);
BufferedInputStream bis = new BufferedInputStream(attachment);
StringBuffer b = new StringBuffer();
while (bis.available() != 0) {
char c = (char) bis.read();
b.append(c);
}
bis.close();
attachment.close();
tmp.write(String.valueOf(b).getBytes());
tmp.close();
を私は共有の意図を経由して私のアプリにGmailアプリから添付画像を取得したいが、私はuが指定されているファイルのURIをデコードすることはできませんよ投稿内容://gmail-ls/messages/mailid%40gmail.com/4/attachments/0.1/BEST/false "助けてください。 –