最終的な目的はすぐに明らかになります。
ファイル オブジェクトを作成したいのですが、実際の物理ファイルからデータを取得する代わりに、自分でバッファーを提供したいと考えています。
次に、sdcard またはアプリの外部には実際には存在しないこのファイルを使用し、名前を付けて、添付ファイルとして電子メールで送信します (EXTRA_STREAM を使用)。
Adriaan Koster (@adriaankoster) による次のコードを見つけました。投稿Write byte[] to File in Java
// convert byte[] to File
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bis);
File fileFromBytes = (File) ois.readObject();
bis.close();
ois.close();
System.out.println(fileFromBytes);
私はそれを使ってこの関数を作成しました
private File fileFromBytes(byte[] buf) {
File f = null;
try {
ByteArrayInputStream bis = new ByteArrayInputStream(buf);
ObjectInputStream ois = new ObjectInputStream(bis);
f = (File) ois.readObject();
bis.close();
ois.close();
}
catch (Exception e) {}
return f;
}
私がそれを使用するとき、ここが私が立ち往生している場所です:
// When sent as body the mail is sent OK
// emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, dump());
// When I try to attach the mail is empty
emailIntent.putExtra(android.content.Intent.EXTRA_STREAM, fileFromBytes(dump().getBytes()));
例からわかるように、2 番目の引数は URI である必要がありますが、ファイルに合わせて仮想URI を作成するにはどうすればよいですか?
編集:
アプリケーション内から直接データを添付するオプションは、特定の種類のアプリケーションにとって重要です。つまり、機密データをあまり移動したくないセキュリティおよびバンキング アプリケーションです。確かに、データが SD カードに届かず、メールの添付ファイルに直接送られる場合、アプリケーション メモリ内よりも傍受するのが難しくなります。
これは私の特定のケースではありませんが、この機能が重要であることを指摘したいと思います。