0

我正在尝试创建一个文件选择器来连接云存储服务。我将文件附加到其他应用程序时没有问题,甚至 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();
4

1 回答 1

0

原来问题是文件uri位于存储目录/storage/emulated/0/folder_name(新文件(环境.getExternalStorageDirectory(),“文件夹名称”)不起作用)。通过切换到 Context.getExternalCacheDir() (/sdcard/Android/data/packageName/),Gmail 能够成功检索附件。

显然,Gmail 在访问其被授予访问权限的文件方面具有比其他应用程序更严格的权限(在更改之前它运行良好)。不幸的是,在这种情况下,Gmail 中没有错误消息,而是事后失败,很难发现它为什么不起作用。

于 2014-10-18T05:11:28.743 回答