【问题标题】:Responding to Intent.ACTION_GET_CONTENT for Gmail attachment fails when sending email发送电子邮件时响应 Gmail 附件的 Intent.ACTION_GET_CONTENT 失败
【发布时间】:2014-10-16 22:18:21
【问题描述】:

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

【问题讨论】:

  • uri 的值是多少?它是否指向您写的ContentProvider,并在其上设置了android:grantUriPermissions

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 2013-08-26
    • 2015-11-06
    • 2017-12-08
    相关资源
    最近更新 更多