我的应用程序创建了一个PDF文件,将其保存在context.getFilesDir()
中,并使用内容提供者传递了URI
以启动电子邮件Intent
。我的实施适用于Gmail以外的所有电子邮件应用。
发生的情况是启动了新的电子邮件意图并附加了PDF,正确的名称和大小,但是发送后,另一端没有收到附件。仅电子邮件主题和正文。有时会在gmail中起作用(PDF通过)。大约90%的时间似乎无效。
编辑:
我已经尝试了所有可能的存储位置,甚至完全省略了内容提供程序并将其保存到公用文件夹。结果相同。
似乎禁用了用于发送电子邮件的帐户的gmail同步功能,以使其正常工作。因此,它必须与gmail应用有关。
相关代码部分:
// Creating PDF
PdfDocument document = new PdfDocument();
...
// Writing to file
File file = new File(context.getFilesDir(), mFileName);
try {
FileOutputStream outputStream = new FileOutputStream(file);
document.writeTo(outputStream);
outputStream.close();
} catch (IOException e) {
e.printSackTrace();
}
Uri uri = FileProvider.getUriForFile(context, "com.redacted.redacted.fileprovider", file);
// Email intent
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
// To
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{mEmail});
// Subject
intent.putExtra(Intent.EXTRA_SUBJECT, getEmailSubject());
// Attachment
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
// Launch intent
context.startActivity(Intent.createChooser(intent, "Sending PDF..."));
表现
...
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.redacted.redacted.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/paths"/>
</provider>
...
xml / paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths>
<files-path name="name" path="/" />
</paths>
我相信一切都可以正确实施,因为它可以在收件箱,三星邮件应用程序和其他电子邮件应用程序中正常工作。只是Gmail,似乎当它发送到以前曾被接收过附件的地址时,PDF无法通过。
知道为什么吗?
最佳答案
您必须设置“ mailto” Uri以便将电子邮件发送到Gmail等电子邮件客户端。并且操作将是ACTION_SENDTO,而不是ACTION_SEND。
为您的意图编写如下代码:
// Email intent
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:"));
// To
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{mEmail});
// Subject
intent.putExtra(Intent.EXTRA_SUBJECT, getEmailSubject());
// Attachment
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
// Launch intent
context.startActivity(Intent.createChooser(intent, "Sending PDF..."));