最终目标将很快明确。
我想创建一个文件对象,而不是从真实的物理文件中获取数据,我想自己提供缓冲区。
然后,我想使用这个文件,它实际上并不存在于 sdcard 或我的应用程序之外的任何地方,给它一个名称并通过电子邮件作为附件发送(使用 EXTRA_STREAM)。
我找到了 Adriaan Koster (@adriaankoster) 的以下代码,在 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()));
我从示例中知道第二个参数应该是一个 URI,但是:如何创建一个虚拟URI 来适应我的文件?
编辑:
直接从应用程序中附加数据的选项对于某些类型的应用程序很重要。即,不想过多移动敏感数据的安全和银行应用程序。当然,如果数据没有到达 SD 卡并直接进入邮件附件,则比在应用程序内存中更难嗅探。
这不是我的具体情况,但我想指出,拥有这种能力很重要。