发送附有附件的电子邮件

时间:2017-11-04 22:50:17

标签: android performance android-intent

我遇到了问题...当我尝试从Intent打开Gmail时,带有附件,它在Toast中向我显示:“无法发送空文件”。我的PDF文件位于我的应用程序的一个文件夹中(/storage/emulated/0/Android/data/teste.com.br.cartaovisitateste/files/business.pdf),但我不能吮吸这个文件,放入电子邮件。可能,问题在于本地化路径,但我不知道如何解决这个问题

这是我的代码:

Intent i = new Intent(Intent.ACTION_SEND);
i.setType("vnd.android.cursor.dir/email");
i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
i.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
i.putExtra(Intent.EXTRA_EMAIL, "wallacekingsdon@gmail.com");
//  it does not work
i.putExtra(Intent.EXTRA_STREAM, Uri.parse("/storage/emulated/0/Android/data/digitalsa.com.br.cartaovisitaultragaz/files/business.pdf"));
//  it does not work too
Uri.fromFile(new File(Environment.getDataDirectory().getAbsolutePath(), "business.pdf"));
i.putExtra(Intent.EXTRA_SUBJECT, String.valueOf(Hawk.get("registro_nome")).concat(" Business Card"));
startActivity(Intent.createChooser(i, "Enviando e-mail..."));

1 个答案:

答案 0 :(得分:0)

i.setType("vnd.android.cursor.dir/email");

PDF文件的MIME类型为application/pdfACTION_SEND Intent的MIME类型可以是EXTRA_STREAMEXTRA_TEXT使用的类型。在您的情况下,您正在使用EXTRA_STREAM,而这似乎是在尝试指向PDF文件。

i.putExtra(Intent.EXTRA_STREAM, Uri.parse("/storage/emulated/0/Android/data/digitalsa.com.br.cartaovisitaultragaz/files/business.pdf"));

不要对路径进行硬编码。并且不要将非Uri值的内容传递给Uri.parse()Uri有一个方案,例如httpsfilecontent

Uri.fromFile(new File(Environment.getDataDirectory().getAbsolutePath(), "business.pdf"));

首先,你不是要多加一点。该值未被使用。

其次,Uri.fromFile()Intent额外费用中无法在Android 7.0+上运行。你会得到一个FileUriExposedException。使用FileProvider来提供PDF,并使用FileProvider.getUriForFile()Uri放入EXTRA_STREAM,至少在Android 7.0及更高版本的设备上。