发送电子邮件时,Gmail附件响应Intent.ACTION_GET_CONTENT失败
问题描述:
我试图创建一个文件选取器来连接云存储服务。我无法将文件附加到其他应用程序,甚至Gmail也能成功取回我的“活动”结果,并根据我设置的URI/clipdata显示适当的缩略图。发送电子邮件时,Gmail附件响应Intent.ACTION_GET_CONTENT失败
问题是,当你真的去发送电子邮件,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();
答
原来,问题是,文件的URI是位于存储目录/存储/模拟/ 0/folder_name(新文件(Environment.getExternalStorageDirectory(),“folder_name”)不起作用)。切换到Context.getExternalCacheDir()(/ sdcard/Android/data/packageName /)Gmail已成功获取附件。
显然,Gmail比其他应用程序(在更改之前工作正常)更严格地访问访问文件的权限。不幸的是,没有错误信息,而是Gmail在这种情况下发生的事后失败,并不是直截了当地发现它为什么不起作用。
'uri'的价值是什么?它是否指向你编写的'ContentProvider',你有'android:grantUriPermissions'集合? – CommonsWare 2014-10-16 22:34:17