我有一个应用程序可以收集一些信息,并允许用户使用Android的Intent框架共享它。
到目前为止,它以纯文本形式共享报告:使用 putExtra(Intent.EXTRA_TEXT, report)
,其中 report
是一个String
。
但是,我希望将报表作为文件共享,以便于作为电子邮件附件而不是正文共享。
我是否必须为此目的创建一个实际文件?如果我这样做,它必须位于其他应用程序可以读取的位置,如发送二进制内容中所述。
我期待一个允许我提供ByteArrayOutputStream
的 API,所以也许我只是错过了一些东西。具体来说,我宁愿不强制共享应用程序获得任何存储的权限。
使用 FileProvider
共享不可公开访问的文件。查看设置文件共享以获取简短教程。
不过,将文本作为电子邮件附件发送有点棘手。您不能将text/plain
用作类型,因为这意味着数据是在 EXTRA_TEXT
中提供的。但是此额外文本将最终出现在电子邮件正文中,而不是附件中。
应该起作用的是:
Uri fileUri = FileProvider.getUriForFile(context, "org.example.provider.authority", reportFile);
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("*/*");
shareIntent.putExtra(Intent.EXTRA_STREAM, fileUri);
startActivity(Intent.createChooser(shareIntent, null));
还应确保FileProvider.getType()
返回报告文件的text/plain
。实现此目的的最简单方法是使用 .txt
作为文件扩展名,FileProvider
将自动执行正确的操作。