我有一个应用程序收集一些信息,并允许用户使用Android的Intent框架共享它。
到目前为止,它以纯文本形式分享报告:使用putExtra(Intent.EXTRA_TEXT, report)
,其中report
是String
。
但是,我希望将报告作为文件共享,以便于作为电子邮件附件而非正文共享。
我是否必须为此目的创建实际文件?如果我这样做,则必须位于其他应用可以阅读的位置,如send binary content中所述。
我期待一个允许我提供ByteArrayOutputStream
的API,所以也许我只是遗漏了一些东西。具体来说,我宁愿不强迫共享应用程序获得对任何存储的许可。
答案 0 :(得分:1)
使用FileProvider
共享无法公开访问的文件。查看Setting Up File Sharing获取简短教程。
将文字作为电子邮件附件发送虽然有点棘手。您不能使用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
将自动执行正确的操作。