发送电子邮件时,响应Intent.ACTION_GET_CONTENT for Gmail附件失败

时间:2014-10-16 22:18:21

标签: android android-intent gmail android-contentprovider android-fileprovider

我正在尝试创建一个文件选择器来连接云存储服务。我将文件附加到其他应用程序没有问题,甚至Gmail也成功恢复了我的活动结果,并根据我设置的URI / clipdata显示了一个合适的缩略图。

问题在于,当您实际发送电子邮件时,Gmail会通知用户“无法发送附件”并发送没有附件的电子邮件。

我不知道我做错了什么。我已经尝试将URI设置为Intent.setData()以及使用URI并设置Intent.setClipData()。另外,我尝试显式包含FLAG_GRANT_READ_URI_PERMISSION的标志。这些都没有解决问题。

任何知道可能出现问题的人都请加入。其他云提供商在通过此流程附加内容时似乎没有问题,所以我只是不知道我做错了什么。

我的代码现在大致如下所示,但仍不适用于Gmail:

Intent result = new Intent();
result.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
result.setData(uri);

if (getActivity().getIntent().getBooleanExtra(Intent.EXTRA_ALLOW_MULTIPLE, false)) {
    String mime = Utils.getMimeType(document);
    result.setClipData(new ClipData(document.getSimpleName(), new String[]{mime}, new ClipData.Item(uri)));
    result.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
    result.putExtra(Intent.EXTRA_STREAM, uri);
}

getActivity().setResult(Activity.RESULT_OK, result);
getActivity().finish();

1 个答案:

答案 0 :(得分:0)

原来问题是file-uri位于存储目录/ storage / emulated / 0 / folder_name(新文件(Environment.getExternalStorageDirectory()," folder_name")不起作用) 。通过切换到Context.getExternalCacheDir()(/ s​​dcard / Android / data / packageName /),Gmail已成功检索到附件。

显然,Gmail在访问其访问权限的文件方面拥有比其他应用程序更严格的权限(在更改之前它可以正常工作)。不幸的是,没有任何错误消息,而是Gmail在这种情况下发生了事后的失败,并不是直截了当地发现它为什么不起作用。