在EXTRA_STREAM中传递的内容URI显示为“收件人:”电子邮件字段

时间:2016-10-06 14:22:24

标签: android email android-fileprovider

我正在缓存目录中创建一个我想与他人分享的文件(通过Gmail / WhatsApp等)。我可以使用FileProvider来做到这一点,它适用于WhatsApp。当选择在Gmail上共享时,照片已正确附加,但我通过Intent.EXTRA_STREAM传递的Uri也最终被Gmail解析为新撰写的电子邮件的“收件人:”字段中的地址以及地址( es)我通过Intent.EXTRA_EMAIL传递。

因此,用户需要在发送前删除伪造(Uri)电子邮件地址。知道如何防止这种情况发生吗?

Uri contentUri = FileProvider.getUriForFile(getActivity(), "com.mypackage.fileprovider", cacheFile);

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setDataAndType(contentUri, "image/jpeg");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putExtra(Intent.EXTRA_EMAIL, new String[] {"some_address@gmail.com"});
intent.putExtra(Intent.EXTRA_SUBJECT, "Photo");
intent.putExtra(Intent.EXTRA_TEXT, "Check out this photo");
intent.putExtra(Intent.EXTRA_STREAM, contentUri);

if(intent.resolveActivity(getActivity().getPackageManager()) != null)
{
    startActivity(Intent.createChooser(intent, getString(R.string.share_file)));
}

1 个答案:

答案 0 :(得分:11)

替换:

intent.setDataAndType(contentUri, "image/jpeg");

使用:

intent.setType("image/jpeg");

您的问题不是EXTRA_STREAM,而是您将Uri放在Intent的数据方面。

此外,如果您的minSdkVersion低于21,则需要some extra steps to ensure that clients can read the content,因为Intent标记未在早期版本的Android上自动应用于EXTRA_STREAM