Android:可以在不写入SD的情况下将文件附加到电子邮件中吗?

Bee*_*Bee 10 email android uri

我的应用程序将数据本地存储在本机SQLite数据库中,我希望允许用户通过向自己发送.csv文件来导出这些数据.为了做到这一点,我从数据库生成.csv并将其写入SD卡,然后将其附加到电子邮件中:

StringBuilder csv = generateFile();
writeFile(csv.toString(),"file.csv");
Intent email = new Intent(android.content.Intent.ACTION_SEND);
email.setType("application/octet-stream");
email.putExtra(android.content.Intent.EXTRA_STREAM, Uri.parse("file://sdcard/file.csv"));
Run Code Online (Sandbox Code Playgroud)

哪一切都很棒.但我想知道的是,是否有可能首先跳过写入SD的步骤,并直接附加数据.

Com*_*are 3

即使有可能,我也建议不要这样做。

Intents用于启动活动的将被保留(可能)相当长的时间——只要相关活动是“活动的”并且可以想象返回(例如,回到堆栈,因为用户接了电话)一边写电子邮件,一边通过短信聊了半个小时)。

此外,Intents作为其中的一部分,在进程之间进行相当多的复制。例如,电子邮件客户端将处于与您的应用程序不同的进程中。

出于这两个原因,您需要保持Intents小型化。内容的唯一替代方案Uri是将内容直接放在额外的内容中......并且该 CSV 文件可能会变得有点大。

  • 您可以尝试将其放入应用程序本地文件存储区域(getFilesDir())并使其可供所有人读取。我通常不会弄乱访问控制标志,但您需要电子邮件客户端能够读取该文件。SD 卡可以用于此目的,但正如您所指出的,可以想象没有 SD 卡。 (3认同)