【发布时间】:2015-01-09 02:03:49
【问题描述】:
我的应用程序创建带有附件的邮件,并使用带有Intent.ACTION_SEND 的意图来启动邮件应用程序。
它适用于我测试过的所有邮件应用程序,除了新的 Gmail 5.0(它适用于 Gmail 4.9),其中邮件打开时没有附件,显示错误:“附件的权限被拒绝”。
logcat 上没有来自 Gmail 的有用邮件。我只在 Android KitKat 上测试了 Gmail 5.0,但在多个设备上测试。
我像这样为附件创建文件:
String fileName = "file-name_something_like_this";
FileOutputStream output = context.openFileOutput(
fileName, Context.MODE_WORLD_READABLE);
// Write data to output...
output.close();
File fileToSend = new File(context.getFilesDir(), fileName);
我知道MODE_WORLD_READABLE 的安全问题。
我这样发送意图:
public static void compose(
Context context,
String address,
String subject,
String body,
File attachment) {
Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("message/rfc822");
emailIntent.putExtra(
Intent.EXTRA_EMAIL, new String[] { address });
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, body);
emailIntent.putExtra(
Intent.EXTRA_STREAM,
Uri.fromFile(attachment));
Intent chooser = Intent.createChooser(
emailIntent,
context.getString(R.string.send_mail_chooser));
context.startActivity(chooser);
}
在创建文件或发送意图时我做错了什么吗?有没有更好的方法来启动带有附件的邮件应用程序?或者 - 有人遇到过这个问题并找到了解决方法吗?
谢谢!
【问题讨论】:
-
@nobalG 与此问题无关。
-
我也遇到了这个问题,附件的位置似乎与问题有关,因为从 sd 卡共享附件仍然有效。 (由于 WORLD_READABLE 标志,这应该无关紧要)这可能是一个错误吗?
-
同样的问题...我仍然可以使用 ACTION_SEND 将文件发送到 Google Drive,但是当我选择 GMail(使用新版本)时,它会像您看到的那样失败。在以前版本的 GMail 上使用相同的代码没有问题。
-
在共享本地 PDF 文件时遇到了同样的问题。找到了这个解决方案,使用一个最小的 github 示例项目进行基本的 FileProvider 设置:stackoverflow.com/a/48103567/2162226,其中添加和发送附件是那里的代码的一部分。它提供了将哪些文件复制(不进行更改)到本地独立项目的步骤