我遇到了问题...当我尝试从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..."));
答案 0 :(得分:0)
i.setType("vnd.android.cursor.dir/email");
PDF文件的MIME类型为application/pdf
。 ACTION_SEND
Intent
的MIME类型可以是EXTRA_STREAM
或EXTRA_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
有一个方案,例如https
,file
或content
。
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及更高版本的设备上。