0

我试图创建一个文件选取器来连接云存储服务。我无法将文件附加到其他应用程序,甚至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(); 
+0

'uri'的价值是什么?它是否指向你编写的'ContentProvider',你有'android:grantUriPermissions'集合? – CommonsWare 2014-10-16 22:34:17

回答

0

原来,问题是,文件的URI是位于存储目录/存储/模拟/ 0/folder_name(新文件(Environment.getExternalStorageDirectory(),“folder_name”)不起作用)。切换到Context.getExternalCacheDir()(/ s​​dcard/Android/data/packageName /)Gmail已成功获取附件。

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